From a0f644715b43af1e4acf2513b972c3f980efdaca Mon Sep 17 00:00:00 2001 From: pk910 Date: Wed, 27 Jan 2016 11:29:18 +0100 Subject: [PATCH] Grundaufbau der App --- .gitignore | 8 + .idea/.name | 1 + .idea/compiler.xml | 22 + .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 6 + .idea/gradle.xml | 19 + .idea/misc.xml | 46 ++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 + .idea/vcs.xml | 6 + app/.gitignore | 1 + app/build.gradle | 60 +++ app/proguard-rules.pro | 17 + .../de/dhbwloe/campusapp/ApplicationTest.java | 13 + app/src/main/AndroidManifest.xml | 40 ++ app/src/main/ic_close_white-web.png | Bin 0 -> 5600 bytes app/src/main/ic_search-web.png | Bin 0 -> 6034 bytes .../java/com/codebutler/farebot/Utils.java | 268 ++++++++++++ .../card/desfire/DesfireApplication.java | 77 ++++ .../card/desfire/DesfireException.java | 13 + .../farebot/card/desfire/DesfireFile.java | 135 ++++++ .../card/desfire/DesfireFileSettings.java | 241 +++++++++++ .../desfire/DesfireManufacturingData.java | 173 ++++++++ .../farebot/card/desfire/DesfireProtocol.java | 188 ++++++++ .../farebot/card/desfire/DesfireRecord.java | 35 ++ .../AppCompatPreferenceActivity.java | 109 +++++ .../java/de/dhbwloe/campusapp/CampusApp.java | 296 +++++++++++++ .../dhbwloe/campusapp/CampusAppContext.java | 159 +++++++ .../dhbwloe/campusapp/CampusAppFragment.java | 26 ++ .../dhbwloe/campusapp/NavigationManager.java | 183 ++++++++ .../dhbwloe/campusapp/SettingsActivity.java | 267 ++++++++++++ .../main/java/de/dhbwloe/campusapp/Tools.java | 54 +++ .../campusapp/database/DatabaseManager.java | 402 ++++++++++++++++++ .../database/MensaplanDatabaseHelper.java | 170 ++++++++ .../database/NewsDatabaseHelper.java | 117 +++++ .../campusapp/database/NfcCardData.java | 51 +++ .../VorlesungsplanDatabaseHelper.java | 245 +++++++++++ .../campusapp/fragments/AppSearch.java | 156 +++++++ .../campusapp/fragments/AppSearchDhbw.java | 129 ++++++ .../fragments/AppSearchInternal.java | 129 ++++++ .../fragments/AppSearchListAdapter.java | 62 +++ .../fragments/AppSearchListItem.java | 30 ++ .../fragments/AppSearchProvider.java | 8 + .../campusapp/fragments/AppSearchStuv.java | 126 ++++++ .../campusapp/fragments/Dashboard.java | 43 ++ .../dhbwloe/campusapp/fragments/FirstRun.java | 37 ++ .../campusapp/fragments/Impressum.java | 40 ++ .../de/dhbwloe/campusapp/fragments/Mensa.java | 213 ++++++++++ .../campusapp/fragments/MensaCard.java | 63 +++ .../campusapp/fragments/MensaTagesplan.java | 113 +++++ .../fragments/MensaTagesplanListAdapter.java | 66 +++ .../campusapp/fragments/MensaWochenplan.java | 31 ++ .../de/dhbwloe/campusapp/fragments/News.java | 42 ++ .../campusapp/fragments/PopupFragment.java | 80 ++++ .../campusapp/fragments/SplashScreen.java | 254 +++++++++++ .../campusapp/fragments/Vorlesungsplan.java | 40 ++ .../campusapp/fragments/WebBrowser.java | 68 +++ .../campusapp/fragments/WifiSettings.java | 97 +++++ .../campusapp/mensaplan/MensaTagesplan.java | 122 ++++++ .../campusapp/mensaplan/MensaplanManager.java | 151 +++++++ .../mensaplan/MensaplanManagerInterface.java | 11 + .../campusapp/network/IscRequestHelper.java | 83 ++++ .../dhbwloe/campusapp/network/XmlEntry.java | 88 ++++ .../campusapp/network/XmlRequestHelper.java | 158 +++++++ .../de/dhbwloe/campusapp/news/NewsItem.java | 116 +++++ .../dhbwloe/campusapp/news/NewsManager.java | 171 ++++++++ .../campusapp/news/NewsManagerInterface.java | 9 + .../campusapp/nfcreader/NfcCardInterface.java | 13 + .../campusapp/nfcreader/NfcCardListener.java | 186 ++++++++ .../nfcreader/cardreader/ICardReader.java | 40 ++ .../nfcreader/cardreader/IntercardReader.java | 100 +++++ .../cardreader/MagnaCartaReader.java | 66 +++ .../nfcreader/cardreader/NfcCardData.java | 215 ++++++++++ .../nfcreader/cardreader/Readers.java | 106 +++++ .../campusapp/search/DhbwSearchHelper.java | 112 +++++ .../campusapp/search/SearchHelper.java | 94 ++++ .../campusapp/search/SearchIndices.java | 78 ++++ .../search/SearchResultListener.java | 15 + .../campusapp/search/SearchTarget.java | 74 ++++ .../campusapp/search/StuvSearchHelper.java | 79 ++++ .../campusapp/vorlesungen/CourseEvent.java | 167 ++++++++ .../campusapp/vorlesungen/CourseGroup.java | 75 ++++ .../vorlesungen/VorlesungsplanManager.java | 261 ++++++++++++ .../VorlesungsplanManagerInterface.java | 11 + .../res/drawable-hdpi/ic_info_black_24dp.png | Bin 0 -> 321 bytes .../ic_notifications_black_24dp.png | Bin 0 -> 233 bytes .../res/drawable-hdpi/ic_sync_black_24dp.png | Bin 0 -> 368 bytes .../res/drawable-mdpi/ic_info_black_24dp.png | Bin 0 -> 222 bytes .../ic_notifications_black_24dp.png | Bin 0 -> 182 bytes .../res/drawable-mdpi/ic_sync_black_24dp.png | Bin 0 -> 250 bytes .../res/drawable-v21/ic_info_black_24dp.xml | 9 + .../main/res/drawable-v21/ic_menu_camera.xml | 12 + .../main/res/drawable-v21/ic_menu_gallery.xml | 9 + .../main/res/drawable-v21/ic_menu_manage.xml | 9 + .../main/res/drawable-v21/ic_menu_send.xml | 9 + .../main/res/drawable-v21/ic_menu_share.xml | 9 + .../res/drawable-v21/ic_menu_slideshow.xml | 9 + .../ic_notifications_black_24dp.xml | 9 + .../res/drawable-v21/ic_sync_black_24dp.xml | 9 + .../res/drawable-xhdpi/ic_info_black_24dp.png | Bin 0 -> 412 bytes .../ic_notifications_black_24dp.png | Bin 0 -> 278 bytes .../res/drawable-xhdpi/ic_sync_black_24dp.png | Bin 0 -> 467 bytes .../drawable-xxhdpi/ic_info_black_24dp.png | Bin 0 -> 579 bytes .../ic_notifications_black_24dp.png | Bin 0 -> 383 bytes .../drawable-xxhdpi/ic_sync_black_24dp.png | Bin 0 -> 669 bytes .../drawable-xxxhdpi/ic_info_black_24dp.png | Bin 0 -> 766 bytes .../ic_notifications_black_24dp.png | Bin 0 -> 497 bytes .../drawable-xxxhdpi/ic_sync_black_24dp.png | Bin 0 -> 875 bytes .../appsearch_resulttype_external.xml | 9 + .../drawable/appsearch_resulttype_inapp.xml | 9 + app/src/main/res/drawable/dhbw_campus.jpg | Bin 0 -> 68496 bytes app/src/main/res/drawable/dhbw_campus_hd.jpg | Bin 0 -> 452291 bytes app/src/main/res/drawable/dhbw_logo.png | Bin 0 -> 24559 bytes app/src/main/res/drawable/side_nav_bar.xml | 8 + .../main/res/layout/activity_campus_app.xml | 25 ++ .../main/res/layout/app_bar_campus_app.xml | 85 ++++ .../main/res/layout/content_campus_app.xml | 18 + app/src/main/res/layout/content_popup.xml | 11 + .../main/res/layout/fragment_appsearch.xml | 24 ++ .../res/layout/fragment_appsearch_list.xml | 13 + .../layout/fragment_appsearch_listitem.xml | 62 +++ .../main/res/layout/fragment_dashboard.xml | 9 + .../main/res/layout/fragment_first_run.xml | 20 + .../main/res/layout/fragment_impressum.xml | 13 + app/src/main/res/layout/fragment_mensa.xml | 24 ++ .../main/res/layout/fragment_mensa_card.xml | 31 ++ .../res/layout/fragment_mensa_tagesplan.xml | 15 + .../fragment_mensa_tagesplan_listitem.xml | 28 ++ .../res/layout/fragment_mensa_wochenplan.xml | 13 + app/src/main/res/layout/fragment_news.xml | 13 + .../main/res/layout/fragment_splashscreen.xml | 45 ++ .../res/layout/fragment_vorlesungsplan.xml | 13 + .../main/res/layout/fragment_web_browser.xml | 12 + .../res/layout/fragment_wifi_settings.xml | 167 ++++++++ .../main/res/layout/nav_header_campus_app.xml | 56 +++ .../res/menu/activity_campus_app_drawer.xml | 31 ++ app/src/main/res/menu/campus_app.xml | 9 + .../main/res/mipmap-hdpi/ic_close_white.png | Bin 0 -> 615 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes app/src/main/res/mipmap-hdpi/ic_search.png | Bin 0 -> 974 bytes .../main/res/mipmap-mdpi/ic_close_white.png | Bin 0 -> 396 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes app/src/main/res/mipmap-mdpi/ic_search.png | Bin 0 -> 654 bytes .../main/res/mipmap-xhdpi/ic_close_white.png | Bin 0 -> 882 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes app/src/main/res/mipmap-xhdpi/ic_search.png | Bin 0 -> 1492 bytes .../main/res/mipmap-xxhdpi/ic_close_white.png | Bin 0 -> 1415 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes app/src/main/res/mipmap-xxhdpi/ic_search.png | Bin 0 -> 2804 bytes .../res/mipmap-xxxhdpi/ic_close_white.png | Bin 0 -> 1527 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes app/src/main/res/mipmap-xxxhdpi/ic_search.png | Bin 0 -> 3781 bytes app/src/main/res/values-v21/styles.xml | 9 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/customids.xml | 4 + app/src/main/res/values/dimens.xml | 9 + app/src/main/res/values/drawables.xml | 8 + app/src/main/res/values/strings.xml | 82 ++++ app/src/main/res/values/styles.xml | 20 + app/src/main/res/xml/pref_data_sync.xml | 21 + app/src/main/res/xml/pref_general.xml | 33 ++ app/src/main/res/xml/pref_headers.xml | 20 + app/src/main/res/xml/pref_notification.xml | 27 ++ .../de/dhbwloe/campusapp/ExampleUnitTest.java | 15 + build.gradle | 23 + gradle.properties | 18 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53637 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 +++++++ gradlew.bat | 90 ++++ settings.gradle | 1 + 172 files changed, 9305 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/de/dhbwloe/campusapp/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/ic_close_white-web.png create mode 100644 app/src/main/ic_search-web.png create mode 100644 app/src/main/java/com/codebutler/farebot/Utils.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireApplication.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFile.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFileSettings.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireManufacturingData.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireProtocol.java create mode 100644 app/src/main/java/com/codebutler/farebot/card/desfire/DesfireRecord.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/AppCompatPreferenceActivity.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/CampusApp.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/CampusAppFragment.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/NavigationManager.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/Tools.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/database/MensaplanDatabaseHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/database/NfcCardData.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/database/VorlesungsplanDatabaseHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListAdapter.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListItem.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchProvider.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplanListAdapter.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/MensaWochenplan.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/News.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/PopupFragment.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/SplashScreen.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/WebBrowser.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaTagesplan.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManagerInterface.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/network/IscRequestHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/network/XmlEntry.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/network/XmlRequestHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/news/NewsItem.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/news/NewsManager.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/news/NewsManagerInterface.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardInterface.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardListener.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/ICardReader.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/IntercardReader.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/MagnaCartaReader.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/NfcCardData.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/Readers.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/search/DhbwSearchHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/search/SearchHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/search/SearchResultListener.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/search/SearchTarget.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/search/StuvSearchHelper.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseEvent.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseGroup.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManager.java create mode 100644 app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManagerInterface.java create mode 100644 app/src/main/res/drawable-hdpi/ic_info_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_notifications_black_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_sync_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_info_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_notifications_black_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_sync_black_24dp.png create mode 100644 app/src/main/res/drawable-v21/ic_info_black_24dp.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_manage.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_send.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_share.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_slideshow.xml create mode 100644 app/src/main/res/drawable-v21/ic_notifications_black_24dp.xml create mode 100644 app/src/main/res/drawable-v21/ic_sync_black_24dp.xml create mode 100644 app/src/main/res/drawable-xhdpi/ic_info_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_notifications_black_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_sync_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_info_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_notifications_black_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_sync_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_info_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_notifications_black_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_sync_black_24dp.png create mode 100644 app/src/main/res/drawable/appsearch_resulttype_external.xml create mode 100644 app/src/main/res/drawable/appsearch_resulttype_inapp.xml create mode 100644 app/src/main/res/drawable/dhbw_campus.jpg create mode 100644 app/src/main/res/drawable/dhbw_campus_hd.jpg create mode 100644 app/src/main/res/drawable/dhbw_logo.png create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/activity_campus_app.xml create mode 100644 app/src/main/res/layout/app_bar_campus_app.xml create mode 100644 app/src/main/res/layout/content_campus_app.xml create mode 100644 app/src/main/res/layout/content_popup.xml create mode 100644 app/src/main/res/layout/fragment_appsearch.xml create mode 100644 app/src/main/res/layout/fragment_appsearch_list.xml create mode 100644 app/src/main/res/layout/fragment_appsearch_listitem.xml create mode 100644 app/src/main/res/layout/fragment_dashboard.xml create mode 100644 app/src/main/res/layout/fragment_first_run.xml create mode 100644 app/src/main/res/layout/fragment_impressum.xml create mode 100644 app/src/main/res/layout/fragment_mensa.xml create mode 100644 app/src/main/res/layout/fragment_mensa_card.xml create mode 100644 app/src/main/res/layout/fragment_mensa_tagesplan.xml create mode 100644 app/src/main/res/layout/fragment_mensa_tagesplan_listitem.xml create mode 100644 app/src/main/res/layout/fragment_mensa_wochenplan.xml create mode 100644 app/src/main/res/layout/fragment_news.xml create mode 100644 app/src/main/res/layout/fragment_splashscreen.xml create mode 100644 app/src/main/res/layout/fragment_vorlesungsplan.xml create mode 100644 app/src/main/res/layout/fragment_web_browser.xml create mode 100644 app/src/main/res/layout/fragment_wifi_settings.xml create mode 100644 app/src/main/res/layout/nav_header_campus_app.xml create mode 100644 app/src/main/res/menu/activity_campus_app_drawer.xml create mode 100644 app/src/main/res/menu/campus_app.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_close_white.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_search.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_close_white.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_search.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_close_white.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_search.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_close_white.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_search.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_close_white.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_search.png create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/customids.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/drawables.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/pref_data_sync.xml create mode 100644 app/src/main/res/xml/pref_general.xml create mode 100644 app/src/main/res/xml/pref_headers.xml create mode 100644 app/src/main/res/xml/pref_notification.xml create mode 100644 app/src/test/java/de/dhbwloe/campusapp/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..fc882fd --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +DHBW Campus App \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..9a8b7e5 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..d390b65 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6a1e020 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a1be715 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..6414d6d --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,60 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.2" + + defaultConfig { + applicationId "de.dhbwloe.campusapp" + minSdkVersion 16 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + packagingOptions { + exclude 'META-INF/DEPENDENCIES.txt' + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/NOTICE.txt' + exclude 'META-INF/NOTICE' + exclude 'META-INF/LICENSE' + exclude 'META-INF/DEPENDENCIES' + exclude 'META-INF/notice.txt' + exclude 'META-INF/license.txt' + exclude 'META-INF/dependencies.txt' + exclude 'META-INF/LGPL2.1' + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile 'junit:junit:4.12' + compile 'org.mnode.ical4j:ical4j:1.0.5' + compile 'backport-util-concurrent:backport-util-concurrent:3.1' + compile 'commons-codec:commons-codec:1.8' + compile 'commons-lang:commons-lang:2.6' + compile 'com.loopj.android:android-async-http:1.4.9' + compile 'org.jsoup:jsoup:1.8.3' + compile 'org.apache.commons:commons-lang3:3.1' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:design:23.1.1' + compile 'com.android.support:support-v4:23.1.1' +} + + + + + + + + + + + + + diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..2b76c9d --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in D:\android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/de/dhbwloe/campusapp/ApplicationTest.java b/app/src/androidTest/java/de/dhbwloe/campusapp/ApplicationTest.java new file mode 100644 index 0000000..ce43036 --- /dev/null +++ b/app/src/androidTest/java/de/dhbwloe/campusapp/ApplicationTest.java @@ -0,0 +1,13 @@ +package de.dhbwloe.campusapp; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..89c3c04 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/ic_close_white-web.png b/app/src/main/ic_close_white-web.png new file mode 100644 index 0000000000000000000000000000000000000000..5b55c6944f7d7b824d861994ac854b9abb64837d GIT binary patch literal 5600 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 literal 0 HcmV?d00001 diff --git a/app/src/main/ic_search-web.png b/app/src/main/ic_search-web.png new file mode 100644 index 0000000000000000000000000000000000000000..a31172c66c52ca68addcdad3b47187c64952159a GIT binary patch literal 6034 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 + * + * 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 3 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, see . + */ + +package com.codebutler.farebot; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.util.Log; +import android.view.WindowManager; + +import com.codebutler.farebot.card.desfire.DesfireException; +import com.codebutler.farebot.card.desfire.DesfireFileSettings; +import com.codebutler.farebot.card.desfire.DesfireProtocol; + +import org.w3c.dom.Node; + +import java.io.StringWriter; +import java.util.List; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +public class Utils { + + private static final String TAG = Utils.class.getName(); + + public static void showError (final Activity activity, Exception ex) { + Log.e(activity.getClass().getName(), ex.getMessage(), ex); + new AlertDialog.Builder(activity) + .setMessage(Utils.getErrorMessage(ex)) + .show(); + } + + public static void showErrorAndFinish (final Activity activity, Exception ex) { + try { + Log.e(activity.getClass().getName(), Utils.getErrorMessage(ex)); + ex.printStackTrace(); + + new AlertDialog.Builder(activity) + .setMessage(Utils.getErrorMessage(ex)) + .setCancelable(false) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface arg0, int arg1) { + activity.finish(); + } + }) + .show(); + } catch (WindowManager.BadTokenException unused) { + /* Ignore... happens if the activity was destroyed */ + } + } + + public static String getHexString (byte[] b) throws Exception { + String result = ""; + for (int i=0; i < b.length; i++) { + result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 ); + } + return result; + } + + public static String getHexString (byte[] b, String defaultResult) { + try { + return getHexString(b); + } catch (Exception ex) { + return defaultResult; + } + } + + public static byte[] hexStringToByteArray (String s) { + if ((s.length() % 2) != 0) { + throw new IllegalArgumentException("Bad input string: " + s); + } + + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i+1), 16)); + } + return data; + } + + /* + public static byte[] intToByteArray(int value) { + return new byte[] { + (byte)(value >>> 24), + (byte)(value >>> 16), + (byte)(value >>> 8), + (byte)value}; + } + */ + + public static int byteArrayToInt(byte[] b) { + return byteArrayToInt(b, 0); + } + + public static int byteArrayToInt(byte[] b, int offset) { + return byteArrayToInt(b, offset, b.length); + } + + public static int byteArrayToInt(byte[] b, int offset, int length) { + return (int) byteArrayToLong(b, offset, length); + } + + public static long byteArrayToLong(byte[] b, int offset, int length) { + if (b.length < length) + throw new IllegalArgumentException("length must be less than or equal to b.length"); + + long value = 0; + for (int i = 0; i < length; i++) { + int shift = (length - 1 - i) * 8; + value += (b[i + offset] & 0x000000FF) << shift; + } + return value; + } + + public static byte[] byteArraySlice(byte[] b, int offset, int length) { + byte[] ret = new byte[length]; + for (int i = 0; i < length; i++) + ret[i] = b[offset+i]; + return ret; + } + + public static String xmlNodeToString (Node node) throws Exception { + // The amount of code required to do simple things in Java is incredible. + Source source = new DOMSource(node); + StringWriter stringWriter = new StringWriter(); + Result result = new StreamResult(stringWriter); + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer = factory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + transformer.setURIResolver(null); + transformer.transform(source, result); + return stringWriter.getBuffer().toString(); + } + + public static String getErrorMessage (Throwable ex) { + String errorMessage = ex.getLocalizedMessage(); + if (errorMessage == null) + errorMessage = ex.getMessage(); + if (errorMessage == null) + errorMessage = ex.toString(); + + if (ex.getCause() != null) { + String causeMessage = ex.getCause().getLocalizedMessage(); + if (causeMessage == null) + causeMessage = ex.getCause().getMessage(); + if (causeMessage == null) + causeMessage = ex.getCause().toString(); + + if (causeMessage != null) + errorMessage += ": " + causeMessage; + } + + return errorMessage; + } + + + public static T findInList(List list, Matcher matcher) { + for (T item : list) { + if (matcher.matches(item)) { + return item; + } + } + return null; + } + + public static interface Matcher { + public boolean matches(T t); + } + + public static int convertBCDtoInteger(byte data) { + return (((data & (char)0xF0) >> 4) * 10) + ((data & (char)0x0F)); + } + + public static int getBitsFromInteger(int buffer, int iStartBit, int iLength) { + return (buffer >> (iStartBit)) & ((char)0xFF >> (8 - iLength)); + } + + /* Based on function from mfocGUI by 'Huuf' (http://www.huuf.info/OV/) */ + public static int getBitsFromBuffer(byte[] buffer, int iStartBit, int iLength) { + int iEndBit = iStartBit + iLength - 1; + int iSByte = iStartBit / 8; + int iSBit = iStartBit % 8; + int iEByte = iEndBit / 8; + int iEBit = iEndBit % 8; + + if (iSByte == iEByte) { + return (int)(((char)buffer[iEByte] >> (7 - iEBit)) & ((char)0xFF >> (8 - iLength))); + } else { + int uRet = (((char)buffer[iSByte] & (char)((char)0xFF >> iSBit)) << (((iEByte - iSByte - 1) * 8) + (iEBit + 1))); + + for (int i = iSByte + 1; i < iEByte; i++) { + uRet |= (((char)buffer[i] & (char)0xFF) << (((iEByte - i - 1) * 8) + (iEBit + 1))); + } + + uRet |= (((char)buffer[iEByte] & (char)0xFF)) >> (7 - iEBit); + + return uRet; + } + } + + + public static DesfireFileSettings selectAppFile(DesfireProtocol tag, int appID, int fileID) { + try { + tag.selectApp(appID); + } catch (DesfireException e) { + Log.w(TAG,"App not found"); + return null; + } + try { + return tag.getFileSettings(fileID); + } catch (DesfireException e) { + Log.w(TAG,"File not found"); + return null; + } + } + + public static boolean arrayContains(int[] arr, int item) { + for (int i: arr) + if (i==item) + return true; + return false; + } + + public static boolean containsAppFile(DesfireProtocol tag, int appID, int fileID) { + try { + tag.selectApp(appID); + } catch (DesfireException e) { + Log.w(TAG,"App not found"); + Log.w(TAG, e); + return false; + } + try { + return arrayContains(tag.getFileList(),fileID); + } catch (DesfireException e) { + Log.w(TAG,"File not found"); + Log.w(TAG, e); + return false; + } + } +} diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireApplication.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireApplication.java new file mode 100644 index 0000000..bda03a6 --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireApplication.java @@ -0,0 +1,77 @@ +/* + * DesfireApplication.java + * + * Copyright (C) 2011 Eric Butler + * + * Authors: + * Eric Butler + * + * 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 3 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, see . + */ + +package com.codebutler.farebot.card.desfire; + +import android.os.Parcel; +import android.os.Parcelable; + +public class DesfireApplication implements Parcelable { + private int mId; + private DesfireFile[] mFiles; + + public DesfireApplication (int id, DesfireFile[] files) { + mId = id; + mFiles = files; + } + + public int getId () { + return mId; + } + + public DesfireFile[] getFiles () { + return mFiles; + } + + public DesfireFile getFile (int fileId) { + for (DesfireFile file : mFiles) { + if (file.getId() == fileId) + return file; + } + return null; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public DesfireApplication createFromParcel(Parcel source) { + int id = source.readInt(); + + DesfireFile[] files = new DesfireFile[source.readInt()]; + source.readTypedArray(files, DesfireFile.CREATOR); + + return new DesfireApplication(id, files); + } + + public DesfireApplication[] newArray (int size) { + return new DesfireApplication[size]; + } + }; + + public void writeToParcel (Parcel parcel, int flags) { + parcel.writeInt(mId); + parcel.writeInt(mFiles.length); + parcel.writeTypedArray(mFiles, flags); + } + + public int describeContents () { + return 0; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.java new file mode 100644 index 0000000..b737d38 --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.java @@ -0,0 +1,13 @@ +package com.codebutler.farebot.card.desfire; + +/** + * Created by Jakob Wenzel on 16.11.13. + */ +public class DesfireException extends Exception { + public DesfireException(String message) { + super(message); + } + public DesfireException(Throwable cause) { + super(cause); + } +} diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFile.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFile.java new file mode 100644 index 0000000..80ae5fc --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFile.java @@ -0,0 +1,135 @@ +/* + * DesfireFile.java + * + * Copyright (C) 2011 Eric Butler + * + * Authors: + * Eric Butler + * + * 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 3 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, see . + */ + +package com.codebutler.farebot.card.desfire; + +import org.apache.commons.lang3.ArrayUtils; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.codebutler.farebot.card.desfire.DesfireFileSettings.RecordDesfireFileSettings; + +public class DesfireFile implements Parcelable { + private int mId; + private DesfireFileSettings mSettings; + private byte[] mData; + + public static DesfireFile create (int fileId, DesfireFileSettings fileSettings, byte[] fileData) { + if (fileSettings instanceof RecordDesfireFileSettings) + return new RecordDesfireFile(fileId, fileSettings, fileData); + else + return new DesfireFile(fileId, fileSettings, fileData); + } + + private DesfireFile (int fileId, DesfireFileSettings fileSettings, byte[] fileData) { + mId = fileId; + mSettings = fileSettings; + mData = fileData; + } + + public DesfireFileSettings getFileSettings () { + return mSettings; + } + + public int getId () { + return mId; + } + + public byte[] getData () { + return mData; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public DesfireFile createFromParcel(Parcel source) { + int fileId = source.readInt(); + + boolean isError = (source.readInt() == 1); + + if (!isError) { + DesfireFileSettings fileSettings = (DesfireFileSettings) source.readParcelable(DesfireFileSettings.class.getClassLoader()); + int dataLength = source.readInt(); + byte[] fileData = new byte[dataLength]; + source.readByteArray(fileData); + + return DesfireFile.create(fileId, fileSettings, fileData); + } else { + return new InvalidDesfireFile(fileId, source.readString()); + } + } + + public DesfireFile[] newArray (int size) { + return new DesfireFile[size]; + } + }; + + public void writeToParcel (Parcel parcel, int flags) { + parcel.writeInt(mId); + if (this instanceof InvalidDesfireFile) { + parcel.writeInt(1); + parcel.writeString(((InvalidDesfireFile)this).getErrorMessage()); + } else { + parcel.writeInt(0); + parcel.writeParcelable(mSettings, 0); + parcel.writeInt(mData.length); + parcel.writeByteArray(mData); + } + } + + public int describeContents () { + return 0; + } + + public static class RecordDesfireFile extends DesfireFile { + private DesfireRecord[] mRecords; + + private RecordDesfireFile (int fileId, DesfireFileSettings fileSettings, byte[] fileData) { + super(fileId, fileSettings, fileData); + + RecordDesfireFileSettings settings = (RecordDesfireFileSettings) fileSettings; + + DesfireRecord[] records = new DesfireRecord[settings.curRecords]; + for (int i = 0; i < settings.curRecords; i++) { + int offset = settings.recordSize * i; + records[i] = new DesfireRecord(ArrayUtils.subarray(getData(), offset, offset + settings.recordSize)); + } + mRecords = records; + } + + public DesfireRecord[] getRecords () { + return mRecords; + } + } + + public static class InvalidDesfireFile extends DesfireFile { + private String mErrorMessage; + + public InvalidDesfireFile (int fileId, String errorMessage) { + super(fileId, null, new byte[0]); + mErrorMessage = errorMessage; + } + + public String getErrorMessage () { + return mErrorMessage; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFileSettings.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFileSettings.java new file mode 100644 index 0000000..17220b7 --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireFileSettings.java @@ -0,0 +1,241 @@ +/* + * DesfireFileSettings.java + * + * Copyright (C) 2011 Eric Butler + * + * Authors: + * Eric Butler + * + * 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 3 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, see . + */ + +package com.codebutler.farebot.card.desfire; + +import java.io.ByteArrayInputStream; + +import org.apache.commons.lang3.ArrayUtils; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.codebutler.farebot.Utils; + +public abstract class DesfireFileSettings implements Parcelable { + public final byte fileType; + public final byte commSetting; + public final byte[] accessRights; + + /* DesfireFile Types */ + static final byte STANDARD_DATA_FILE = (byte) 0x00; + static final byte BACKUP_DATA_FILE = (byte) 0x01; + static final byte VALUE_FILE = (byte) 0x02; + static final byte LINEAR_RECORD_FILE = (byte) 0x03; + static final byte CYCLIC_RECORD_FILE = (byte) 0x04; + + public static DesfireFileSettings Create (byte[] data) throws DesfireException { + byte fileType = (byte) data[0]; + + ByteArrayInputStream stream = new ByteArrayInputStream(data); + + if (fileType == STANDARD_DATA_FILE || fileType == BACKUP_DATA_FILE) + return new StandardDesfireFileSettings(stream); + else if (fileType == LINEAR_RECORD_FILE || fileType == CYCLIC_RECORD_FILE) + return new RecordDesfireFileSettings(stream); + else if (fileType == VALUE_FILE) + return new ValueDesfireFileSettings(stream); + else + throw new DesfireException("Unknown file type: " + Integer.toHexString(fileType)); + } + + private DesfireFileSettings (ByteArrayInputStream stream) { + fileType = (byte) stream.read(); + commSetting = (byte) stream.read(); + + accessRights = new byte[2]; + stream.read(accessRights, 0, accessRights.length); + } + + private DesfireFileSettings (byte fileType, byte commSetting, byte[] accessRights) { + this.fileType = fileType; + this.commSetting = commSetting; + this.accessRights = accessRights; + } + + public String getFileTypeName () { + switch (fileType) { + case STANDARD_DATA_FILE: + return "Standard"; + case BACKUP_DATA_FILE: + return "Backup"; + case VALUE_FILE: + return "Value"; + case LINEAR_RECORD_FILE: + return "Linear Record"; + case CYCLIC_RECORD_FILE: + return "Cyclic Record"; + default: + return "Unknown"; + } + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public DesfireFileSettings createFromParcel(Parcel source) { + byte fileType = source.readByte(); + byte commSetting = source.readByte(); + byte[] accessRights = new byte[source.readInt()]; + source.readByteArray(accessRights); + + if (fileType == STANDARD_DATA_FILE || fileType == BACKUP_DATA_FILE) { + int fileSize = source.readInt(); + return new StandardDesfireFileSettings(fileType, commSetting, accessRights, fileSize); + } else if (fileType == LINEAR_RECORD_FILE || fileType == CYCLIC_RECORD_FILE) { + int recordSize = source.readInt(); + int maxRecords = source.readInt(); + int curRecords = source.readInt(); + return new RecordDesfireFileSettings(fileType, commSetting, accessRights, recordSize, maxRecords, curRecords); + } else { + return new UnsupportedDesfireFileSettings(fileType); + } + } + + public DesfireFileSettings[] newArray(int size) { + return new DesfireFileSettings[size]; + } + }; + + public void writeToParcel (Parcel parcel, int flags) { + parcel.writeByte(fileType); + parcel.writeByte(commSetting); + parcel.writeInt(accessRights.length); + parcel.writeByteArray(accessRights); + } + + public int describeContents () { + return 0; + } + + public static class StandardDesfireFileSettings extends DesfireFileSettings { + public final int fileSize; + + private StandardDesfireFileSettings (ByteArrayInputStream stream) { + super(stream); + byte[] buf = new byte[3]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + fileSize = Utils.byteArrayToInt(buf); + } + + StandardDesfireFileSettings (byte fileType, byte commSetting, byte[] accessRights, int fileSize) { + super(fileType, commSetting, accessRights); + this.fileSize = fileSize; + } + + @Override + public void writeToParcel (Parcel parcel, int flags) { + super.writeToParcel(parcel, flags); + parcel.writeInt(fileSize); + } + } + + public static class RecordDesfireFileSettings extends DesfireFileSettings { + public final int recordSize; + public final int maxRecords; + public final int curRecords; + + public RecordDesfireFileSettings(ByteArrayInputStream stream) { + super(stream); + + byte[] buf = new byte[3]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + recordSize = Utils.byteArrayToInt(buf); + + buf = new byte[3]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + maxRecords = Utils.byteArrayToInt(buf); + + buf = new byte[3]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + curRecords = Utils.byteArrayToInt(buf); + } + + RecordDesfireFileSettings (byte fileType, byte commSetting, byte[] accessRights, int recordSize, int maxRecords, int curRecords) { + super(fileType, commSetting, accessRights); + this.recordSize = recordSize; + this.maxRecords = maxRecords; + this.curRecords = curRecords; + } + + @Override + public void writeToParcel (Parcel parcel, int flags) { + super.writeToParcel(parcel, flags); + parcel.writeInt(recordSize); + parcel.writeInt(maxRecords); + parcel.writeInt(curRecords); + } + } + + + + + public static class ValueDesfireFileSettings extends DesfireFileSettings { + public final int lowerLimit; + public final int upperLimit; + public final int value; + public final byte limitedCreditEnabled; + + public ValueDesfireFileSettings(ByteArrayInputStream stream) { + super(stream); + + byte[] buf = new byte[4]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + lowerLimit = Utils.byteArrayToInt(buf); + + buf = new byte[4]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + upperLimit = Utils.byteArrayToInt(buf); + + buf = new byte[4]; + stream.read(buf, 0, buf.length); + ArrayUtils.reverse(buf); + value = Utils.byteArrayToInt(buf); + + + buf = new byte[1]; + stream.read(buf, 0, buf.length); + limitedCreditEnabled = buf[0]; + + //http://www.skyetek.com/docs/m2/desfire.pdf + //http://neteril.org/files/M075031_desfire.pdf + } + + @Override + public void writeToParcel (Parcel parcel, int flags) { + super.writeToParcel(parcel, flags); + parcel.writeInt(lowerLimit); + parcel.writeInt(upperLimit); + parcel.writeInt(value); + parcel.writeByte(limitedCreditEnabled); + } + } + public static class UnsupportedDesfireFileSettings extends DesfireFileSettings { + public UnsupportedDesfireFileSettings(byte fileType) { + super(fileType, Byte.MIN_VALUE, new byte[0]); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireManufacturingData.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireManufacturingData.java new file mode 100644 index 0000000..becc763 --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireManufacturingData.java @@ -0,0 +1,173 @@ +/* + * DesfireManufacturingData.java + * + * Copyright (C) 2011 Eric Butler + * + * Authors: + * Eric Butler + * + * 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 3 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, see . + */ + +package com.codebutler.farebot.card.desfire; + +import android.os.Parcel; +import android.os.Parcelable; +import com.codebutler.farebot.Utils; +import org.w3c.dom.Element; + +import java.io.ByteArrayInputStream; + +public class DesfireManufacturingData implements Parcelable { + public final int hwVendorID; + public final int hwType; + public final int hwSubType; + public final int hwMajorVersion; + public final int hwMinorVersion; + public final int hwStorageSize; + public final int hwProtocol; + + public final int swVendorID; + public final int swType; + public final int swSubType; + public final int swMajorVersion; + public final int swMinorVersion; + public final int swStorageSize; + public final int swProtocol; + + public final int uid; + public final int batchNo; + public final int weekProd; + public final int yearProd; + + public DesfireManufacturingData (byte[] data) { + ByteArrayInputStream stream = new ByteArrayInputStream(data); + hwVendorID = stream.read(); + hwType = stream.read(); + hwSubType = stream.read(); + hwMajorVersion = stream.read(); + hwMinorVersion = stream.read(); + hwStorageSize = stream.read(); + hwProtocol = stream.read(); + + swVendorID = stream.read(); + swType = stream.read(); + swSubType = stream.read(); + swMajorVersion = stream.read(); + swMinorVersion = stream.read(); + swStorageSize = stream.read(); + swProtocol = stream.read(); + + // FIXME: This has fewer digits than what's contained in EXTRA_ID, why? + byte[] buf = new byte[7]; + stream.read(buf, 0, buf.length); + uid = Utils.byteArrayToInt(buf); + + // FIXME: This is returning a negative number. Probably is unsigned. + buf = new byte[5]; + stream.read(buf, 0, buf.length); + batchNo = Utils.byteArrayToInt(buf); + + // FIXME: These numbers aren't making sense. + weekProd = stream.read(); + yearProd = stream.read(); + } + + public static DesfireManufacturingData fromXml (Element element) { + return new DesfireManufacturingData(element); + } + + private DesfireManufacturingData (Element element) { + hwVendorID = Integer.parseInt(element.getElementsByTagName("hw-vendor-id").item(0).getTextContent()); + hwType = Integer.parseInt(element.getElementsByTagName("hw-type").item(0).getTextContent()); + hwSubType = Integer.parseInt(element.getElementsByTagName("hw-sub-type").item(0).getTextContent()); + hwMajorVersion = Integer.parseInt(element.getElementsByTagName("hw-major-version").item(0).getTextContent()); + hwMinorVersion = Integer.parseInt(element.getElementsByTagName("hw-minor-version").item(0).getTextContent()); + hwStorageSize = Integer.parseInt(element.getElementsByTagName("hw-storage-size").item(0).getTextContent()); + hwProtocol = Integer.parseInt(element.getElementsByTagName("hw-protocol").item(0).getTextContent()); + + swVendorID = Integer.parseInt(element.getElementsByTagName("sw-vendor-id").item(0).getTextContent()); + swType = Integer.parseInt(element.getElementsByTagName("sw-type").item(0).getTextContent()); + swSubType = Integer.parseInt(element.getElementsByTagName("sw-sub-type").item(0).getTextContent()); + swMajorVersion = Integer.parseInt(element.getElementsByTagName("sw-major-version").item(0).getTextContent()); + swMinorVersion = Integer.parseInt(element.getElementsByTagName("sw-minor-version").item(0).getTextContent()); + swStorageSize = Integer.parseInt(element.getElementsByTagName("sw-storage-size").item(0).getTextContent()); + swProtocol = Integer.parseInt(element.getElementsByTagName("sw-protocol").item(0).getTextContent()); + + uid = Integer.parseInt(element.getElementsByTagName("uid").item(0).getTextContent()); + batchNo = Integer.parseInt(element.getElementsByTagName("batch-no").item(0).getTextContent()); + weekProd = Integer.parseInt(element.getElementsByTagName("week-prod").item(0).getTextContent()); + yearProd = Integer.parseInt(element.getElementsByTagName("year-prod").item(0).getTextContent()); + } + + private DesfireManufacturingData (Parcel parcel) { + hwVendorID = parcel.readInt(); + hwType = parcel.readInt(); + hwSubType = parcel.readInt(); + hwMajorVersion = parcel.readInt(); + hwMinorVersion = parcel.readInt(); + hwStorageSize = parcel.readInt(); + hwProtocol = parcel.readInt(); + + swVendorID = parcel.readInt(); + swType = parcel.readInt(); + swSubType = parcel.readInt(); + swMajorVersion = parcel.readInt(); + swMinorVersion = parcel.readInt(); + swStorageSize = parcel.readInt(); + swProtocol = parcel.readInt(); + + uid = parcel.readInt(); + batchNo = parcel.readInt(); + weekProd = parcel.readInt(); + yearProd = parcel.readInt(); + } + + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeInt(hwVendorID); + parcel.writeInt(hwType); + parcel.writeInt(hwSubType); + parcel.writeInt(hwMajorVersion); + parcel.writeInt(hwMinorVersion); + parcel.writeInt(hwStorageSize); + parcel.writeInt(hwProtocol); + + parcel.writeInt(swVendorID); + parcel.writeInt(swType); + parcel.writeInt(swSubType); + parcel.writeInt(swMajorVersion); + parcel.writeInt(swMinorVersion); + parcel.writeInt(swStorageSize); + parcel.writeInt(swProtocol); + + parcel.writeInt(uid); + parcel.writeInt(batchNo); + parcel.writeInt(weekProd); + parcel.writeInt(yearProd); + } + + public int describeContents() { + return 0; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public DesfireManufacturingData createFromParcel(Parcel source) { + return new DesfireManufacturingData(source); + } + + public DesfireManufacturingData[] newArray(int size) { + return new DesfireManufacturingData[size]; + } + }; +} \ No newline at end of file diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireProtocol.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireProtocol.java new file mode 100644 index 0000000..28404d7 --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireProtocol.java @@ -0,0 +1,188 @@ +/* + * DesfireProtocol.java + * + * Copyright (C) 2011 Eric Butler + * + * Authors: + * Eric Butler + * + * 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 3 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, see . + */ + +package com.codebutler.farebot.card.desfire; + +import android.nfc.tech.IsoDep; +import com.codebutler.farebot.Utils; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.apache.commons.lang3.ArrayUtils; + +public class DesfireProtocol { + /* Commands */ + static final byte GET_MANUFACTURING_DATA = (byte) 0x60; + static final byte GET_APPLICATION_DIRECTORY = (byte) 0x6A; + static final byte GET_ADDITIONAL_FRAME = (byte) 0xAF; + static final byte SELECT_APPLICATION = (byte) 0x5A; + static final byte READ_DATA = (byte) 0xBD; + static final byte READ_RECORD = (byte) 0xBB; + static final byte READ_VALUE = (byte) 0x6C; + static final byte GET_FILES = (byte) 0x6F; + static final byte GET_FILE_SETTINGS = (byte) 0xF5; + + /* Status codes */ + static final byte OPERATION_OK = (byte) 0x00; + static final byte PERMISSION_DENIED = (byte) 0x9D; + static final byte ADDITIONAL_FRAME = (byte) 0xAF; + + private IsoDep mTagTech; + + public DesfireProtocol(IsoDep tagTech) { + mTagTech = tagTech; + } + + public DesfireManufacturingData getManufacturingData() throws DesfireException { + byte[] respBuffer = sendRequest(GET_MANUFACTURING_DATA); + + if (respBuffer.length != 28) + throw new DesfireException("Invalid response"); + + return new DesfireManufacturingData(respBuffer); + } + + public int[] getAppList() throws DesfireException { + byte[] appDirBuf = sendRequest(GET_APPLICATION_DIRECTORY); + + int[] appIds = new int[appDirBuf.length / 3]; + + for (int app = 0; app < appDirBuf.length; app += 3) { + byte[] appId = new byte[3]; + System.arraycopy(appDirBuf, app, appId, 0, 3); + + appIds[app / 3] = Utils.byteArrayToInt(appId); + } + + return appIds; + } + + public void selectApp (int appId) throws DesfireException { + byte[] appIdBuff = new byte[3]; + appIdBuff[0] = (byte) ((appId & 0xFF0000) >> 16); + appIdBuff[1] = (byte) ((appId & 0xFF00) >> 8); + appIdBuff[2] = (byte) (appId & 0xFF); + + sendRequest(SELECT_APPLICATION, appIdBuff); + } + + public int[] getFileList() throws DesfireException { + byte[] buf = sendRequest(GET_FILES); + int[] fileIds = new int[buf.length]; + for (int x = 0; x < buf.length; x++) { + fileIds[x] = (int)buf[x]; + } + return fileIds; + } + + public DesfireFileSettings getFileSettings (int fileNo) throws DesfireException { + byte[] data = new byte[0]; + data = sendRequest(GET_FILE_SETTINGS, new byte[] { (byte) fileNo }); + return DesfireFileSettings.Create(data); + } + + public byte[] readFile (int fileNo) throws DesfireException { + return sendRequest(READ_DATA, new byte[] { + (byte) fileNo, + (byte) 0x0, (byte) 0x0, (byte) 0x0, + (byte) 0x0, (byte) 0x0, (byte) 0x0 + }); + } + + public byte[] readRecord (int fileNum) throws DesfireException { + return sendRequest(READ_RECORD, new byte[]{ + (byte) fileNum, + (byte) 0x0, (byte) 0x0, (byte) 0x0, + (byte) 0x0, (byte) 0x0, (byte) 0x0 + }); + } + + public int readValue(int fileNum) throws DesfireException { + byte[] buf = sendRequest(READ_VALUE, new byte[]{ + (byte) fileNum + }); + ArrayUtils.reverse(buf); + return Utils.byteArrayToInt(buf); + } + + + private byte[] sendRequest (byte command) throws DesfireException { + return sendRequest(command, null); + } + + private byte[] sendRequest (byte command, byte[] parameters) throws DesfireException { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + + byte[] recvBuffer = new byte[0]; + try { + recvBuffer = mTagTech.transceive(wrapMessage(command, parameters)); + } catch (IOException e) { + throw new DesfireException(e); + } + + while (true) { + if (recvBuffer[recvBuffer.length - 2] != (byte) 0x91) + throw new DesfireException("Invalid response"); + + output.write(recvBuffer, 0, recvBuffer.length - 2); + + byte status = recvBuffer[recvBuffer.length - 1]; + if (status == OPERATION_OK) { + break; + } else if (status == ADDITIONAL_FRAME) { + try { + recvBuffer = mTagTech.transceive(wrapMessage(GET_ADDITIONAL_FRAME, null)); + } catch (IOException e) { + throw new DesfireException(e); + } + } else if (status == PERMISSION_DENIED) { + throw new DesfireException("Permission denied"); + } else { + throw new DesfireException("Unknown status code: " + Integer.toHexString(status & 0xFF)); + } + } + + return output.toByteArray(); + } + + private byte[] wrapMessage (byte command, byte[] parameters) throws DesfireException { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + stream.write((byte) 0x90); + stream.write(command); + stream.write((byte) 0x00); + stream.write((byte) 0x00); + if (parameters != null) { + stream.write((byte) parameters.length); + try { + stream.write(parameters); + } catch (IOException e) { + throw new DesfireException(e); + } + } + stream.write((byte) 0x00); + + return stream.toByteArray(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireRecord.java b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireRecord.java new file mode 100644 index 0000000..2dfeda4 --- /dev/null +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireRecord.java @@ -0,0 +1,35 @@ +/* + * DesfireRecord.java + * + * Copyright (C) 2011 Eric Butler + * + * Authors: + * Eric Butler + * + * 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 3 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, see . + */ + +package com.codebutler.farebot.card.desfire; + +public class DesfireRecord { + private byte[] mData; + + public DesfireRecord (byte[] data) { + mData = data; + } + + public byte[] getData () { + return mData; + } +} \ No newline at end of file diff --git a/app/src/main/java/de/dhbwloe/campusapp/AppCompatPreferenceActivity.java b/app/src/main/java/de/dhbwloe/campusapp/AppCompatPreferenceActivity.java new file mode 100644 index 0000000..3423ee5 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/AppCompatPreferenceActivity.java @@ -0,0 +1,109 @@ +package de.dhbwloe.campusapp; + +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatDelegate; +import android.support.v7.widget.Toolbar; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls + * to be used with AppCompat. + */ +public abstract class AppCompatPreferenceActivity extends PreferenceActivity { + + private AppCompatDelegate mDelegate; + + @Override + protected void onCreate(Bundle savedInstanceState) { + getDelegate().installViewFactory(); + getDelegate().onCreate(savedInstanceState); + super.onCreate(savedInstanceState); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + getDelegate().onPostCreate(savedInstanceState); + } + + public ActionBar getSupportActionBar() { + return getDelegate().getSupportActionBar(); + } + + public void setSupportActionBar(@Nullable Toolbar toolbar) { + getDelegate().setSupportActionBar(toolbar); + } + + @Override + public MenuInflater getMenuInflater() { + return getDelegate().getMenuInflater(); + } + + @Override + public void setContentView(@LayoutRes int layoutResID) { + getDelegate().setContentView(layoutResID); + } + + @Override + public void setContentView(View view) { + getDelegate().setContentView(view); + } + + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().setContentView(view, params); + } + + @Override + public void addContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().addContentView(view, params); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getDelegate().onPostResume(); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + super.onTitleChanged(title, color); + getDelegate().setTitle(title); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getDelegate().onConfigurationChanged(newConfig); + } + + @Override + protected void onStop() { + super.onStop(); + getDelegate().onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + getDelegate().onDestroy(); + } + + public void invalidateOptionsMenu() { + getDelegate().invalidateOptionsMenu(); + } + + private AppCompatDelegate getDelegate() { + if (mDelegate == null) { + mDelegate = AppCompatDelegate.create(this, null); + } + return mDelegate; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java b/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java new file mode 100644 index 0000000..e9200ac --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusApp.java @@ -0,0 +1,296 @@ +package de.dhbwloe.campusapp; + +import android.content.Context; +import android.content.Intent; +import android.nfc.NfcAdapter; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v4.app.FragmentActivity; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.support.design.widget.NavigationView; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.util.Date; + +import de.dhbwloe.campusapp.nfcreader.NfcCardListener; + +public class CampusApp extends FragmentActivity { + + private boolean bSearchActive = false; + private CampusAppContext AppContext = null; + + /* + * Dev Info: + * + * Die App besteht aus einer einzigen Activity, auf welcher dynamisch Fragmente platziert werden. + * Das Menü, sowie die Headerleiste befinden sich auf der Activity, sind dementsprechend immer verfügbar. + * + * Zur laufzeit der App wird eine einzige Instanz der Klasse CampusAppContext angelegt. + * Dieser Kontext dient als einstiegspunkt für sämmtliche global verfügbaren verwaltungs tools. + * Dazu gehören: + * AppContext.getNavigationManager() NavigationManager Verwaltet die angezeigten Fragmente und deren Navigation + * .navigatePage("Dashboard") to navigate to the Dashboard + * ... to be continued ... + */ + + @Override + protected void onCreate(Bundle savedInstanceState) { + Log.i("CampusApp", "Event: onCreate"); + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_campus_app); + + AppContext = CampusAppContext.getInstance(); + if(AppContext == null) + AppContext = new CampusAppContext(this, R.id.fragment_container); + else + AppContext.setMainActivity(this); + + boolean instantRestore = false; + if(savedInstanceState != null) { + long lastrun = savedInstanceState.getLong("lastrun"); + if(((new Date()).getTime()/1000) - lastrun < 30) { + instantRestore = true; + + AppContext.setTitle(savedInstanceState.getString("activetitle")); + + } + } + + prepareMainUi(); + if(instantRestore) // orientation change + loadMainUi(); + else + // don't add navigation to SlashScreen, or even from SplashScreen to Dashboard to the history log! + // it would be very strange to return to the SplashScreen or an "empty" page on return ;) + AppContext.getNavigationManager().navigatePage("SplashScreen", null, false); + + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + Log.i("CampusApp", "Event: onSaveInstanceState"); + // Save instance state during "restarts" due to orientation changes. + // We don't want to see the splash screen everytime the orientation changes ;) + savedInstanceState.putLong("lastrun", (new Date()).getTime() / 1000); + savedInstanceState.putString("activepage", AppContext.getNavigationManager().getCurrentPageName()); + TextView titleView = (TextView) findViewById(R.id.title); + savedInstanceState.putString("activetitle", titleView.getText().toString()); + + // Always call the superclass so it can save the view hierarchy state + super.onSaveInstanceState(savedInstanceState); + } + + public void prepareMainUi() { + ImageView btnOpenSearch = (ImageView) findViewById(R.id.search_button); + btnOpenSearch.setVisibility(View.GONE); + } + + public void loadMainUi() { + ImageView btnOpenSearch = (ImageView) findViewById(R.id.search_button); + + btnOpenSearch.setVisibility(View.VISIBLE); + setupActionBar(); + setupSearchTriggers(); + + AppContext.getNfcCardListener().startNfcListener(); + } + + private void setupActionBar() { + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.setDrawerListener(toggle); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { + @SuppressWarnings("StatementWithEmptyBody") + @Override + public boolean onNavigationItemSelected(MenuItem item) { + // Handle navigation view item clicks here. + int id = item.getItemId(); + + switch (id) { // Navigation Items from res/menu/activity_campus_app_drawer.xml + case R.id.nav_dashboard: + AppContext.getNavigationManager().navigatePage("Dashboard"); + break; + case R.id.nav_vorlesungsplan: + AppContext.getNavigationManager().navigatePage("Vorlesungsplan"); + break; + case R.id.nav_mensa: + AppContext.getNavigationManager().navigatePage("Mensa"); + break; + case R.id.nav_news: + AppContext.getNavigationManager().navigatePage("News"); + break; + case R.id.nav_settings: + Intent settings = new Intent(AppContext.getMainActivity(), SettingsActivity.class); + AppContext.getMainActivity().startActivity(settings); + break; + case R.id.nav_impressum: + AppContext.getNavigationManager().navigatePage("Impressum"); + break; + default: + return false; + } + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } + }); + } + + private void setupSearchTriggers() { + ImageView btnOpenSearch = (ImageView) findViewById(R.id.search_button); + ImageView btnCloseSearch = (ImageView) findViewById(R.id.search_clear); + EditText edtSearchInput = (EditText) findViewById(R.id.search_input); + TextView txtTitle = (TextView) findViewById(R.id.title); + + btnOpenSearch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + triggerSearchPanel(true); + } + }); + edtSearchInput.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText edtSearchInput = (EditText) v; + if (!hasFocus && edtSearchInput.getText().length() == 0) { + triggerSearchPanel(false); + } + } + }); + edtSearchInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + EditText edtSearchInput = (EditText) v; + triggerSearchAction(edtSearchInput.getText().toString()); + triggerSearchPanel(false); + return true; + } + return false; + } + }); + btnCloseSearch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + EditText edtSearchInput = (EditText) findViewById(R.id.search_input); + edtSearchInput.setText(""); + triggerSearchPanel(false); + } + }); + txtTitle.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + triggerSearchPanel(true); + } + }); + + } + + private void triggerSearchPanel(boolean show) { + if(bSearchActive == show) + return; + bSearchActive = show; + LinearLayout layTitleContainer = (LinearLayout) findViewById(R.id.title_container); + LinearLayout laySearchContainer = (LinearLayout) findViewById(R.id.search_container); + EditText edtSearchInput = (EditText) findViewById(R.id.search_input); + + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if(show) { + layTitleContainer.setVisibility(View.GONE); + laySearchContainer.setVisibility(View.VISIBLE); + edtSearchInput.requestFocus(); + + imm.showSoftInput(edtSearchInput, InputMethodManager.SHOW_IMPLICIT); + } else { + layTitleContainer.setVisibility(View.VISIBLE); + laySearchContainer.setVisibility(View.GONE); + + View view = this.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + } + + private void triggerSearchAction(String query) { + Bundle bundle = new Bundle(); + bundle.putString("query", query); + + AppContext.getNavigationManager().navigatePage("AppSearch", bundle); + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else if(!AppContext.getNavigationManager().back()) { + super.onBackPressed(); // trigger system action if internal navigation manager returns false for back() + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.campus_app, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + /* nfc listener related callbacks */ + @Override + public void onResume() { + super.onResume(); + Log.i("CampusApp", "onResume event"); + AppContext.getNfcCardListener().resumeForefrontDispatcher(); + } + + @Override + public void onPause() { + super.onPause(); + Log.i("CampusApp", "Event: onPause"); + AppContext.getNfcCardListener().pauseForefrontDispatcher(); + } + + @Override + public void onNewIntent(Intent intent) { + if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { + AppContext.getNfcCardListener().handleNfcEvent(intent); + } + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java new file mode 100644 index 0000000..4f42cb5 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusAppContext.java @@ -0,0 +1,159 @@ +package de.dhbwloe.campusapp; + +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; +import android.widget.TextView; + +import java.lang.reflect.Method; + +import de.dhbwloe.campusapp.database.DatabaseManager; +import de.dhbwloe.campusapp.fragments.AppSearch; +import de.dhbwloe.campusapp.fragments.Dashboard; +import de.dhbwloe.campusapp.fragments.FirstRun; +import de.dhbwloe.campusapp.fragments.Impressum; +import de.dhbwloe.campusapp.fragments.Mensa; +import de.dhbwloe.campusapp.fragments.MensaCard; +import de.dhbwloe.campusapp.fragments.MensaWochenplan; +import de.dhbwloe.campusapp.fragments.News; +import de.dhbwloe.campusapp.fragments.PopupFragment; +import de.dhbwloe.campusapp.fragments.SplashScreen; +import de.dhbwloe.campusapp.fragments.Vorlesungsplan; +import de.dhbwloe.campusapp.fragments.WebBrowser; +import de.dhbwloe.campusapp.fragments.WifiSettings; +import de.dhbwloe.campusapp.nfcreader.NfcCardInterface; +import de.dhbwloe.campusapp.nfcreader.NfcCardListener; +import de.dhbwloe.campusapp.database.NfcCardData; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** CampusAppContext + * A context, that is pushed to each fragment. + * This context will be persistent during app execution. + */ +public class CampusAppContext { + private class AppPage { + String name; + Class fragment; + int fragementType; + + public AppPage(String name, Class fragment) { + this.name = name; + this.fragment = fragment; + } + + public AppPage(String name, Class fragment, int type) { + this.name = name; + this.fragment = fragment; + this.fragementType = type; + } + } + private final AppPage[] PAGES = { + new AppPage("SplashScreen", SplashScreen.class), + new AppPage("Dashboard", Dashboard.class), + new AppPage("AppSearch", AppSearch.class), + new AppPage("Vorlesungsplan", Vorlesungsplan.class), + new AppPage("Mensa", Mensa.class), + new AppPage("MensaCard", MensaCard.class, 3), + new AppPage("News", News.class), + new AppPage("WifiSettings", WifiSettings.class), + new AppPage("FirstRun", FirstRun.class), + new AppPage("Impressum", Impressum.class), + new AppPage("WebBrowser", WebBrowser.class), + new AppPage("WebBrowserPopup", WebBrowser.class, 3) + }; + + private static CampusAppContext instance; + public static CampusAppContext getInstance() { + Log.i("AppContext", "Request new context instance"); + return instance; + } + + private Activity oMainActivity; + private NavigationManager oNavigationManager; + private DatabaseManager oDatabaseManager; + private NfcCardListener oNfcCardListener; + + public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) { + final CampusAppContext AppContext = this; + instance = this; + oMainActivity = mainActivity; + oNavigationManager = new NavigationManager(this, fragmentContainerId); + oDatabaseManager = new DatabaseManager(this); + oNfcCardListener = new NfcCardListener(this); + + for(int i = 0; i < PAGES.length; i++) + oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType); + + oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() { + @Override + public void onNfcReaderStateChanged(boolean state) { + + } + + @Override + public void onNfcReaderReceived(NfcCardData data) { + if (data != null) + AppContext.onNfcCardDataReceived(data); + } + }); + } + + public Activity getMainActivity() { + return oMainActivity; + } + public void setMainActivity(Activity activity) { + oMainActivity = activity; + } + + public NavigationManager getNavigationManager() { + return oNavigationManager; + } + + public void setTitle(String title) { + PopupFragment popup = oNavigationManager.getDialog(); + if(popup != null) { + popup.getDialog().setTitle(title); + } else { + TextView titleView = (TextView)oMainActivity.findViewById(R.id.title); + titleView.setText(title); + } + } + + public DatabaseManager getDatabaseManager() { + return oDatabaseManager; + } + + public void addDefaultSearchIndexes() { + for(int i = 0; i < PAGES.length; i++) { + try { + Method m = PAGES[i].fragment.getMethod("GetSearchIndices"); + Object result = m.invoke(null); + SearchIndices[] indices = (SearchIndices[]) result; + addSearchIndices(indices); + } catch (Exception e) { + } + } + } + + public void addSearchIndices(SearchIndices[] indices) { + oDatabaseManager.addSearchIndices(indices); + } + + public NfcCardListener getNfcCardListener() { + return oNfcCardListener; + } + + private void onNfcCardDataReceived(NfcCardData data) { + Bundle bundle = new Bundle(); + bundle.putDouble("balance", data.getBalance() / 100.0); + bundle.putString("data", data.getCardData()); + + String pagename = oNavigationManager.getCurrentPageName(); + if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) { + MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment(); + fragment.showNfcCardData(bundle); + } else + oNavigationManager.navigatePage("MensaCard", bundle); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/CampusAppFragment.java b/app/src/main/java/de/dhbwloe/campusapp/CampusAppFragment.java new file mode 100644 index 0000000..e0aead8 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/CampusAppFragment.java @@ -0,0 +1,26 @@ +package de.dhbwloe.campusapp; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.View; + +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * Created by pk910 on 19.01.2016. + */ +public abstract class CampusAppFragment extends Fragment { + protected CampusAppContext AppContext; + protected View oFragmentView; + + @Override + public void onCreate(Bundle savedInstanceState) { + AppContext = CampusAppContext.getInstance(); + super.onCreate(savedInstanceState); + } + + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[0]; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/NavigationManager.java b/app/src/main/java/de/dhbwloe/campusapp/NavigationManager.java new file mode 100644 index 0000000..33d2f1c --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/NavigationManager.java @@ -0,0 +1,183 @@ +package de.dhbwloe.campusapp; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.view.Gravity; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.PopupWindow; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; + +import de.dhbwloe.campusapp.fragments.PopupFragment; + +/** + * Created by pk910 on 19.01.2016. + */ +public class NavigationManager { + private class NavPage { + String name; + Class fragmentClass; + int fragmentType; // 0 = normal; 1 = fullscreen; 2 = popup + }; + + private CampusAppContext AppContext; + private NavPage oCurrentPage; + private NavPage oParentPage; + private Fragment oCurrentFragment; + private Fragment oParentFragment; + private int iFragmentContainerId; + private ArrayList lNavigationPages = new ArrayList(); + + public NavigationManager(CampusAppContext context, int fragmentContainer) { + AppContext = context; + iFragmentContainerId = fragmentContainer; + oCurrentPage = null; + } + + public void registerPage(String name, Class fragment, int fragmentType) { + NavPage page = new NavPage(); + page.name = name; + page.fragmentClass = (Class) fragment; + page.fragmentType = fragmentType; + lNavigationPages.add(page); + } + + public String getCurrentPageName() { + if(oCurrentPage == null) + return null; + return oCurrentPage.name; + } + + public CampusAppFragment getCurrentFragment() { + if(oCurrentPage == null) + return null; + if(oCurrentPage.fragmentType != 3) + return (CampusAppFragment)oCurrentFragment; + return null; + } + + public void navigatePage(String name) { + navigatePage(name, null, true); + } + + public void navigatePage(String name, Bundle args) { + navigatePage(name, args, true); + } + + public void navigatePage(String name, Bundle args, boolean history) { + + NavPage page = getPageByName(name); + if(page == null) + return; + Fragment fragment; + + if(page.fragmentType == 3) { + PopupFragment popupFragment = new PopupFragment(); + if(args == null) + args = new Bundle(); + args.putString("target", "#"+page.name); + fragment = popupFragment; + } else { + fragment = getFragmentOfPage(page); + } + + fragment.setArguments(args); + + FragmentActivity fragmentActivity = (FragmentActivity) AppContext.getMainActivity(); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + + if (oCurrentPage != null && oCurrentPage.fragmentType == 3) { + transaction.remove(oCurrentFragment); + oCurrentPage = oParentPage; + oCurrentFragment = oParentFragment; + } + if (page.fragmentType == 3) { + transaction.add(fragment, "popup"); + oParentPage = oCurrentPage; + oParentFragment = oCurrentFragment; + history = false; + } else if (oCurrentPage != null) { + transaction.replace(iFragmentContainerId, fragment); + } else { + transaction.add(iFragmentContainerId, fragment); + } + if (history) + transaction.addToBackStack(null); + + oCurrentPage = page; + oCurrentFragment = fragment; + + transaction.commit(); + } + + private NavPage getPageByName(String name) { + NavPage page = null; + for(int i = 0; i < lNavigationPages.size(); i++) { + if(lNavigationPages.get(i).name.equalsIgnoreCase(name)) { + page = lNavigationPages.get(i); + break; + } + } + if(page == null) + return null; + + return page; + } + + private CampusAppFragment getFragmentOfPage(NavPage page) { + Class fragmentClass = page.fragmentClass; + Constructor fragmentConstructor; + CampusAppFragment fragment; + try { + fragmentConstructor = fragmentClass.asSubclass(fragmentClass).getConstructor(); + fragment = (CampusAppFragment)fragmentConstructor.newInstance(new Object[]{}); + } catch (Exception e) { + return null; + } + return fragment; + } + + public CampusAppFragment getPageFragment(String name) { + NavPage page = getPageByName(name); + if(page == null) + return null; + return getFragmentOfPage(page); + } + + public PopupFragment getDialog() { + if(oCurrentPage != null && oCurrentPage.fragmentType == 3) { + PopupFragment fragment = (PopupFragment) oCurrentFragment; + return fragment; + } + return null; + } + + public boolean closeDialog() { + if(oCurrentPage != null && oCurrentPage.fragmentType == 3) { + PopupFragment fragment = (PopupFragment) oCurrentFragment; + fragment.destroyView(); + + FragmentActivity fragmentActivity = (FragmentActivity) AppContext.getMainActivity(); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + + transaction.remove(oCurrentFragment); + + oCurrentPage = oParentPage; + oCurrentFragment = oParentFragment; + + transaction.commit(); + return true; + } + return false; + } + + public boolean back() { + return closeDialog(); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java b/app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java new file mode 100644 index 0000000..86aedcc --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/SettingsActivity.java @@ -0,0 +1,267 @@ +package de.dhbwloe.campusapp; + + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.media.Ringtone; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.support.v7.app.ActionBar; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; +import android.preference.RingtonePreference; +import android.text.TextUtils; +import android.view.MenuItem; +import android.support.v4.app.NavUtils; + +import java.util.List; + +/** + * A {@link PreferenceActivity} that presents a set of application settings. On + * handset devices, settings are presented as a single list. On tablets, + * settings are split by category, with category headers shown to the left of + * the list of settings. + *

+ * See + * Android Design: Settings for design guidelines and the Settings + * API Guide for more information on developing a Settings UI. + */ +public class SettingsActivity extends AppCompatPreferenceActivity { + /** + * A preference value change listener that updates the preference's summary + * to reflect its new value. + */ + private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object value) { + String stringValue = value.toString(); + + if (preference instanceof ListPreference) { + // For list preferences, look up the correct display value in + // the preference's 'entries' list. + ListPreference listPreference = (ListPreference) preference; + int index = listPreference.findIndexOfValue(stringValue); + + // Set the summary to reflect the new value. + preference.setSummary( + index >= 0 + ? listPreference.getEntries()[index] + : null); + + } else if (preference instanceof RingtonePreference) { + // For ringtone preferences, look up the correct display value + // using RingtoneManager. + if (TextUtils.isEmpty(stringValue)) { + // Empty values correspond to 'silent' (no ringtone). + preference.setSummary(R.string.pref_ringtone_silent); + + } else { + Ringtone ringtone = RingtoneManager.getRingtone( + preference.getContext(), Uri.parse(stringValue)); + + if (ringtone == null) { + // Clear the summary if there was a lookup error. + preference.setSummary(null); + } else { + // Set the summary to reflect the new ringtone display + // name. + String name = ringtone.getTitle(preference.getContext()); + preference.setSummary(name); + } + } + + } else { + // For all other preferences, set the summary to the value's + // simple string representation. + preference.setSummary(stringValue); + } + return true; + } + }; + + /** + * Helper method to determine if the device has an extra-large screen. For + * example, 10" tablets are extra-large. + */ + private static boolean isXLargeTablet(Context context) { + return (context.getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; + } + + /** + * Binds a preference's summary to its value. More specifically, when the + * preference's value is changed, its summary (line of text below the + * preference title) is updated to reflect the value. The summary is also + * immediately updated upon calling this method. The exact display format is + * dependent on the type of preference. + * + * @see #sBindPreferenceSummaryToValueListener + */ + private static void bindPreferenceSummaryToValue(Preference preference) { + // Set the listener to watch for value changes. + preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); + + // Trigger the listener immediately with the preference's + // current value. + sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, + PreferenceManager + .getDefaultSharedPreferences(preference.getContext()) + .getString(preference.getKey(), "")); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setupActionBar(); + } + + /** + * Set up the {@link android.app.ActionBar}, if the API is available. + */ + private void setupActionBar() { + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + // Show the Up button in the action bar. + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + int id = item.getItemId(); + if (id == android.R.id.home) { + if (!super.onMenuItemSelected(featureId, item)) { + NavUtils.navigateUpFromSameTask(this); + } + return true; + } + return super.onMenuItemSelected(featureId, item); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onIsMultiPane() { + return isXLargeTablet(this); + } + + /** + * {@inheritDoc} + */ + @Override + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public void onBuildHeaders(List

target) { + loadHeadersFromResource(R.xml.pref_headers, target); + } + + /** + * This method stops fragment injection in malicious applications. + * Make sure to deny any unknown fragments here. + */ + protected boolean isValidFragment(String fragmentName) { + return PreferenceFragment.class.getName().equals(fragmentName) + || GeneralPreferenceFragment.class.getName().equals(fragmentName) + || DataSyncPreferenceFragment.class.getName().equals(fragmentName) + || NotificationPreferenceFragment.class.getName().equals(fragmentName); + } + + /** + * This fragment shows general preferences only. It is used when the + * activity is showing a two-pane settings UI. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static class GeneralPreferenceFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_general); + setHasOptionsMenu(true); + + // Bind the summaries of EditText/List/Dialog/Ringtone preferences + // to their values. When their values change, their summaries are + // updated to reflect the new value, per the Android Design + // guidelines. + bindPreferenceSummaryToValue(findPreference("example_text")); + bindPreferenceSummaryToValue(findPreference("example_list")); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == android.R.id.home) { + startActivity(new Intent(getActivity(), SettingsActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + } + + /** + * This fragment shows notification preferences only. It is used when the + * activity is showing a two-pane settings UI. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static class NotificationPreferenceFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_notification); + setHasOptionsMenu(true); + + // Bind the summaries of EditText/List/Dialog/Ringtone preferences + // to their values. When their values change, their summaries are + // updated to reflect the new value, per the Android Design + // guidelines. + bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone")); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == android.R.id.home) { + startActivity(new Intent(getActivity(), SettingsActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + } + + /** + * This fragment shows data and sync preferences only. It is used when the + * activity is showing a two-pane settings UI. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static class DataSyncPreferenceFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_data_sync); + setHasOptionsMenu(true); + + // Bind the summaries of EditText/List/Dialog/Ringtone preferences + // to their values. When their values change, their summaries are + // updated to reflect the new value, per the Android Design + // guidelines. + bindPreferenceSummaryToValue(findPreference("sync_frequency")); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == android.R.id.home) { + startActivity(new Intent(getActivity(), SettingsActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/Tools.java b/app/src/main/java/de/dhbwloe/campusapp/Tools.java new file mode 100644 index 0000000..02c8d7a --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/Tools.java @@ -0,0 +1,54 @@ +package de.dhbwloe.campusapp; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +/** + * Created by pk910 on 25.01.2016. + */ +public class Tools { + + public static final String md5(final String s) { + final String MD5 = "MD5"; + try { + // Create MD5 Hash + MessageDigest digest = java.security.MessageDigest.getInstance(MD5); + digest.update(s.getBytes()); + byte messageDigest[] = digest.digest(); + + // Create Hex String + StringBuilder hexString = new StringBuilder(); + for (byte aMessageDigest : messageDigest) { + String h = Integer.toHexString(0xFF & aMessageDigest); + while (h.length() < 2) + h = "0" + h; + hexString.append(h); + } + return hexString.toString(); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return ""; + } + + public static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + byte[] encrypted = cipher.doFinal(clear); + return encrypted; + } + + public static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.DECRYPT_MODE, skeySpec); + byte[] decrypted = cipher.doFinal(encrypted); + return decrypted; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java b/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java new file mode 100644 index 0000000..43a5fd5 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java @@ -0,0 +1,402 @@ +package de.dhbwloe.campusapp.database; + +import android.app.Activity; +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import net.fortuna.ical4j.model.DateList; +import net.fortuna.ical4j.model.DateTime; +import net.fortuna.ical4j.model.Period; +import net.fortuna.ical4j.model.Recur; +import net.fortuna.ical4j.model.parameter.Value; +import net.fortuna.ical4j.model.property.RRule; + +import java.lang.reflect.Array; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.ListIterator; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.mensaplan.MensaTagesplan; +import de.dhbwloe.campusapp.news.NewsItem; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.vorlesungen.CourseEvent; +import de.dhbwloe.campusapp.vorlesungen.CourseGroup; + +/** + * Created by pk910 on 19.01.2016. + */ +public class DatabaseManager { + private static final String DATABASE_NAME = "DHBWLoe.CampusApp.DEV"; + private static final int DATABASE_VERSION = 1; + private CampusAppContext AppContext; + private SQLiteDatabase database; + private NewsDatabaseHelper newsDBHelper; + private MensaplanDatabaseHelper mensaplanDBHelper; + private VorlesungsplanDatabaseHelper vorlesungsplanDBHelper; + + + public DatabaseManager(CampusAppContext context) { + AppContext = context; + } + + public void initializeDatabase() { + database = AppContext.getMainActivity().openOrCreateDatabase(DATABASE_NAME, Activity.MODE_PRIVATE, null); + database.execSQL("CREATE TABLE IF NOT EXISTS Version(Version INT);"); + + Cursor resultSet = database.rawQuery("Select * from Version", null); + int version; + if(resultSet.moveToFirst()) { + version = resultSet.getInt(0); + } else { + version = 0; + database.execSQL("INSERT INTO Version (Version) VALUES (0);"); + } + + resultSet.close(); + if(version < DATABASE_VERSION) + upgradeTables(version, DATABASE_VERSION); + + + } + + private void upgradeTables(int oldVersion, int newVersion) { + if(oldVersion == 0 && newVersion > 0) { + database.execSQL("CREATE TABLE IF NOT EXISTS RuntimeCache " + + "(" + + "Reference TEXT, " + + "Value TEXT, " + + "LastUpdate INT, " + + "PRIMARY KEY (Reference)" + + ");"); + database.execSQL("CREATE TABLE IF NOT EXISTS SearchIndex " + + "(" + + "KeyName TEXT, " + + "SearchText TEXT, " + + "SearchTitle TEXT," + + "Description TEXT, " + + "StaticEntry INT, " + + "UpdateTime INT, " + + "TargetPage TEXT);"); + database.execSQL("CREATE TABLE IF NOT EXISTS CourseCalendar " + + "(" + + "Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + + "CourseName TEXT, " + + "UniqueId TEXT, " + + "SequenceId INT, " + + "EventFrom INT, " + + "EventTo INT, " + + "EventTitle TEXT, " + + "EventLocation TEXT, " + + "EventStatus TEXT," + + "RecurRule TEXT," + + "ExcludeDates TEXT," + + "CourseGroupId INT," + + "UNIQUE (CourseName, UniqueId)" + + ");"); + database.execSQL("CREATE TABLE IF NOT EXISTS CourseCalendarEvent " + + "(" + + "EventId INT, " + + "EventFrom INT, " + + "EventTo INT, " + + "PRIMARY KEY (EventId, EventFrom, EventTo)" + + ");"); + database.execSQL("CREATE INDEX CourseCalendarEventIdx ON CourseCalendarEvent (EventFrom, EventTo);"); + database.execSQL("CREATE TABLE IF NOT EXISTS NfcCardStore " + + "(" + + "CardId INT, " + + "UpdateTime INT," + + "CardData TEXT, " + + "CardBalance INT, " + + "CardLastTransaction INT, " + + "PRIMARY KEY (CardId, UpdateTime)" + + ");"); + database.execSQL("CREATE TABLE IF NOT EXISTS CourseCalendarGroup " + + "(" + + "GroupId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + + "CourseName INT," + + "GroupName TEXT, " + + "LastUpdate INT, " + + "UNIQUE (GroupName)" + + ");"); + database.execSQL("CREATE INDEX CourseCalendarGroupIdx ON CourseCalendarGroup (CourseName, GroupName);"); + database.execSQL("CREATE TABLE IF NOT EXISTS MensaPlan " + + "(" + + "PlanDate INT, " + + "MenuName TEXT, " + + "ChkSum INT, " + + "Name TEXT, " + + "NameHtml TEXT, " + + "Additional TEXT, " + + "Notes TEXT, " + + "PriceStudents INT, " + + "PriceEmployees INT, " + + "PriceGuests INT, " + + "PriceSchool INT, " + + "PRIMARY KEY (PlanDate, MenuName)" + + ");"); + database.execSQL("CREATE TABLE IF NOT EXISTS News " + + "(" + + "Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + + "Source TEXT, " + + "Time INT, " + + "UniqueId TEXT, " + + "ChkSum INT, " + + "Title TEXT, " + + "Summary TEXT, " + + "Content TEXT, " + + "Link TEXT, " + + "Categories TEXT, " + + "UNIQUE(Source, UniqueId) " + + ");"); + database.execSQL("CREATE INDEX NewsIdx ON News (Source, Time);"); + } + if(oldVersion < 2 && newVersion >= 2) { + // Version 2 + + } + + database.execSQL("UPDATE Version SET Version = "+Integer.toString(newVersion)); + } + + public void addSearchIndices(SearchIndices[] indices) { + for(int i = 0; i < indices.length; i++) { + String[] whereArgs = new String[] { + indices[i].getKeyName() + }; + Cursor resultSet = database.rawQuery("SELECT UpdateTime FROM SearchIndex WHERE KeyName = ?", whereArgs); + if(resultSet.moveToFirst()) { + long updateTime = resultSet.getLong(0); + if (updateTime < indices[i].getUpdateTime()) { + // remove + database.rawQuery("DELETE FROM SearchIndex WHERE KeyName = ?", whereArgs); + } else + continue; + } + resultSet.close(); + // add new + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("KeyName", indices[i].getKeyName()); + indexValues.put("SearchText", indices[i].getKeyWords()); + indexValues.put("SearchTitle", indices[i].getTitle()); + indexValues.put("Description", indices[i].getDescription()); + indexValues.put("StaticEntry", indices[i].getIsStatic() ? 1 : 0); + indexValues.put("UpdateTime", indices[i].getUpdateTime()); + indexValues.put("TargetPage", indices[i].getTarget()); + + database.insertOrThrow("SearchIndex", null, indexValues); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + + public SearchIndices[] performSearchRequest(String query, int maxResults) { + String[] whereArgs = new String[] { + "%" + query + "%" + }; + Cursor resultSet = database.rawQuery("SELECT KeyName, SearchTitle, Description, StaticEntry, UpdateTime, TargetPage, SearchText FROM SearchIndex WHERE SearchText LIKE ? ORDER BY StaticEntry DESC, UpdateTime DESC", whereArgs); + ArrayList indices = new ArrayList(); + if(resultSet.moveToFirst()) { + int[] columnIndexes = { + resultSet.getColumnIndex("KeyName"), + resultSet.getColumnIndex("SearchTitle"), + resultSet.getColumnIndex("Description"), + resultSet.getColumnIndex("StaticEntry"), + resultSet.getColumnIndex("UpdateTime"), + resultSet.getColumnIndex("TargetPage"), + resultSet.getColumnIndex("SearchText") + }; + do { + SearchIndices cIndices = new SearchIndices(resultSet.getString(columnIndexes[0]), (resultSet.getInt(columnIndexes[3]) == 1)); + cIndices.setUpdateTime(resultSet.getLong(columnIndexes[4])); + cIndices.setTarget(resultSet.getString(columnIndexes[5])); + cIndices.addKeyWord(resultSet.getString(columnIndexes[6])); + cIndices.setTitle(resultSet.getString(columnIndexes[1])); + cIndices.setDescription(resultSet.getString(columnIndexes[2])); + indices.add(cIndices); + } while (resultSet.moveToNext() && indices.size() < maxResults); + } + resultSet.close(); + + SearchIndices[] indicesArr = new SearchIndices[indices.size()]; + indicesArr = indices.toArray(indicesArr); + return indicesArr; + } + + public void setRuntimeCache(String name, String value) { + long now = (new Date()).getTime() / 1000; + String[] whereArgs = new String[] { + name + }; + Cursor resultSet = database.rawQuery("SELECT Value FROM RuntimeCache WHERE Reference = ?", whereArgs); + if(resultSet.moveToFirst()) { + if(resultSet.getString(0).equalsIgnoreCase(value)) + return; + try { + ContentValues updateValues = new ContentValues(); + updateValues.put("Value", value); + updateValues.put("LastUpdate", now); + + database.update("RuntimeCache", updateValues, "Reference = ?", whereArgs); + } catch(Exception e) { + e.printStackTrace(); + } + } else { + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("Reference", name); + indexValues.put("Value", value); + indexValues.put("LastUpdate", now); + + database.insertOrThrow("RuntimeCache", null, indexValues); + } catch(Exception e) { + e.printStackTrace(); + } + } + resultSet.close(); + } + + public String getRuntimeCache(String name) { + String value = null; + String[] whereArgs = new String[] { + name + }; + Cursor resultSet = database.rawQuery("SELECT Value FROM RuntimeCache WHERE Reference = ?", whereArgs); + if(resultSet.moveToFirst()) { + value = resultSet.getString(0); + } + resultSet.close(); + return value; + } + + public void addNfcCardData(NfcCardData nfcCardData) { + String[] whereArgs = new String[] { + Integer.toString(nfcCardData.getUniqueId()), + Long.toString(nfcCardData.getLastUpdate()) + }; + Cursor resultSet = database.rawQuery("SELECT CardData FROM NfcCardStore WHERE CardId = ? AND UpdateTime = ?", whereArgs); + if(resultSet.moveToFirst()) { + if(resultSet.getString(0).equalsIgnoreCase(nfcCardData.getCardData())) + return; + try { + ContentValues updateValues = new ContentValues(); + updateValues.put("CardData", nfcCardData.getCardData()); + updateValues.put("CardBalance", nfcCardData.getBalance()); + updateValues.put("CardLastTransaction", nfcCardData.getLastTransaction()); + + database.update("NfcCardStore", updateValues, "CardId = ? AND UpdateTime = ?", whereArgs); + } catch(Exception e) { + e.printStackTrace(); + } + } else { + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("CardId", nfcCardData.getUniqueId()); + indexValues.put("UpdateTime", nfcCardData.getLastUpdate()); + indexValues.put("CardData", nfcCardData.getCardData()); + indexValues.put("CardBalance", nfcCardData.getBalance()); + indexValues.put("CardLastTransaction", nfcCardData.getLastTransaction()); + + database.insertOrThrow("NfcCardStore", null, indexValues); + } catch(Exception e) { + e.printStackTrace(); + } + } + resultSet.close(); + } + + public NfcCardData[] getNfcCardData(int lastLimit) { + String value = null; + Cursor resultSet; + if(lastLimit > 0) { + String[] whereArgs = { + Integer.toString(lastLimit) + }; + resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardData,CardBalance,CardLastTransaction FROM NfcCardStore ORDER BY UpdateTime DESC LIMIT ?", whereArgs); + } else + resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardData,CardBalance,CardLastTransaction FROM NfcCardStore ORDER BY UpdateTime DESC", null); + ArrayList nfcCardDatas = new ArrayList(); + if(resultSet.moveToFirst()) { + do { + NfcCardData nfcCardData = new NfcCardData(resultSet.getInt(0), resultSet.getLong(1), resultSet.getString(2), resultSet.getInt(3), resultSet.getInt(4)); + nfcCardDatas.add(nfcCardData); + } while (resultSet.moveToNext()); + } + resultSet.close(); + NfcCardData[] resultsArr = new NfcCardData[nfcCardDatas.size()]; + resultsArr = nfcCardDatas.toArray(resultsArr); + return resultsArr; + } + + public void updateCourseCalendar(CourseEvent event) { + if(vorlesungsplanDBHelper == null) + vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database); + vorlesungsplanDBHelper.updateCourseCalendar(event); + } + + public CourseEvent[] getCourseCalendarEvents(String coursename, long timeFrom, long timeTo) { + if(vorlesungsplanDBHelper == null) + vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database); + return vorlesungsplanDBHelper.getCourseCalendarEvents(coursename, timeFrom, timeTo); + } + + public CourseGroup getCourseGroup(int courseGroupId) { + if(vorlesungsplanDBHelper == null) + vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database); + return vorlesungsplanDBHelper.getCourseGroup(courseGroupId); + } + + public CourseGroup getCourseGroup(String coursename, String groupname) { + if(vorlesungsplanDBHelper == null) + vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database); + return vorlesungsplanDBHelper.getCourseGroup(coursename, groupname); + } + + public CourseGroup addCourseGroup(String coursename, String groupname) { + if(vorlesungsplanDBHelper == null) + vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database); + return vorlesungsplanDBHelper.addCourseGroup(coursename, groupname); + } + + public void updateMensaTagesplan(MensaTagesplan plan) { + if(mensaplanDBHelper == null) + mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database); + mensaplanDBHelper.updateMensaTagesplan(plan); + } + + public MensaTagesplan[] getMensaTagesplan(long timeFrom, long timeTo) { + if(mensaplanDBHelper == null) + mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database); + return mensaplanDBHelper.getMensaTagesplan(timeFrom, timeTo); + } + + public long[] getDaysWithPlanData(long timeFrom, long timeTo) { + if(mensaplanDBHelper == null) + mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database); + return mensaplanDBHelper.getDaysWithPlanData(timeFrom, timeTo); + } + + public long[] getWeeksWithPlanData(long timeFrom, long timeTo) { + if(mensaplanDBHelper == null) + mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database); + return mensaplanDBHelper.getWeeksWithPlanData(timeFrom, timeTo); + } + + public void updateNewsItem(NewsItem news) { + if(newsDBHelper == null) + newsDBHelper = new NewsDatabaseHelper(AppContext, database); + newsDBHelper.updateNewsItem(news); + } + + public NewsItem[] getNewsItems(String source, long timeFrom, long timeTo) { + if(newsDBHelper == null) + newsDBHelper = new NewsDatabaseHelper(AppContext, database); + return newsDBHelper.getNewsItems(source, timeFrom, timeTo); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/MensaplanDatabaseHelper.java b/app/src/main/java/de/dhbwloe/campusapp/database/MensaplanDatabaseHelper.java new file mode 100644 index 0000000..a8a6fd4 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/database/MensaplanDatabaseHelper.java @@ -0,0 +1,170 @@ +package de.dhbwloe.campusapp.database; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import java.util.ArrayList; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.mensaplan.MensaTagesplan; + +/** + * Created by pk910 on 24.01.2016. + */ +public class MensaplanDatabaseHelper { + private CampusAppContext AppContext; + private SQLiteDatabase database; + + public MensaplanDatabaseHelper(CampusAppContext context, SQLiteDatabase database) { + this.database = database; + AppContext = context; + } + + public void updateMensaTagesplan(MensaTagesplan plan) { + boolean isExisting = false; + String[] whereArgs = new String[] { + Long.toString(plan.getPlanDate()), + plan.getMenuName() + }; + Cursor resultSet = database.rawQuery("SELECT ChkSum FROM MensaPlan WHERE PlanDate = ? AND MenuName = ?", whereArgs); + if(resultSet.moveToFirst()) { + long chksum = resultSet.getLong(0); + if(plan.getChkSum() == chksum) + return; // nothing to update + isExisting = true; + } + resultSet.close(); + + if(isExisting) { + try { + ContentValues updateValues = new ContentValues(); + updateValues.put("ChkSum", plan.getChkSum()); + updateValues.put("Name", plan.getName()); + updateValues.put("NameHtml", plan.getNameHtml()); + updateValues.put("Additional", plan.getAdditional()); + updateValues.put("Notes", plan.getNotes()); + int plainPrice[] = plan.getPlainPrice(); + updateValues.put("PriceStudents", plainPrice[0]); + updateValues.put("PriceEmployees", plainPrice[1]); + updateValues.put("PriceGuests", plainPrice[2]); + updateValues.put("PriceSchool", plainPrice[3]); + + database.update("MensaPlan", updateValues, "PlanDate = ? AND MenuName = ?", whereArgs); + } catch(Exception e) { + e.printStackTrace(); + } + } else { + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("PlanDate", plan.getPlanDate()); + indexValues.put("MenuName", plan.getMenuName()); + + indexValues.put("ChkSum", plan.getChkSum()); + indexValues.put("Name", plan.getName()); + indexValues.put("NameHtml", plan.getNameHtml()); + indexValues.put("Additional", plan.getAdditional()); + indexValues.put("Notes", plan.getNotes()); + int plainPrice[] = plan.getPlainPrice(); + indexValues.put("PriceStudents", plainPrice[0]); + indexValues.put("PriceEmployees", plainPrice[1]); + indexValues.put("PriceGuests", plainPrice[2]); + indexValues.put("PriceSchool", plainPrice[3]); + + database.insertOrThrow("MensaPlan", null, indexValues); + plan.setIsNew(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + } + + public MensaTagesplan[] getMensaTagesplan(long timeFrom, long timeTo) { + String[] whereArgs = new String[] { + Long.toString(timeFrom), + Long.toString(timeTo) + }; + Cursor resultSet = database.rawQuery("SELECT PlanDate,MenuName,ChkSum,Name,NameHtml,Additional,Notes,PriceStudents,PriceEmployees,PriceGuests,PriceSchool FROM MensaPlan WHERE PlanDate >= ? AND PlanDate <= ?", whereArgs); + ArrayList results = new ArrayList(); + if(resultSet.moveToFirst()) { + int[] columnIndexes = { + resultSet.getColumnIndex("PlanDate"), + resultSet.getColumnIndex("MenuName"), + resultSet.getColumnIndex("ChkSum"), + resultSet.getColumnIndex("Name"), + resultSet.getColumnIndex("NameHtml"), + resultSet.getColumnIndex("Additional"), + resultSet.getColumnIndex("Notes"), + resultSet.getColumnIndex("PriceStudents"), + resultSet.getColumnIndex("PriceEmployees"), + resultSet.getColumnIndex("PriceGuests"), + resultSet.getColumnIndex("PriceSchool") + }; + do { + MensaTagesplan plan = new MensaTagesplan( + resultSet.getLong(columnIndexes[0]), resultSet.getString(columnIndexes[1]), + resultSet.getLong(columnIndexes[2]), resultSet.getString(columnIndexes[3]), + resultSet.getString(columnIndexes[4]), resultSet.getString(columnIndexes[5]), + resultSet.getString(columnIndexes[6]), + resultSet.getInt(columnIndexes[7]), resultSet.getInt(columnIndexes[8]), + resultSet.getInt(columnIndexes[9]), resultSet.getInt(columnIndexes[10]) + ); + + results.add(plan); + } while (resultSet.moveToNext()); + } + resultSet.close(); + + MensaTagesplan[] resultsArr = new MensaTagesplan[results.size()]; + resultsArr = results.toArray(resultsArr); + return resultsArr; + } + + public long[] getDaysWithPlanData(long timeFrom, long timeTo) { + String[] whereArgs = new String[] { + Long.toString(timeFrom), + Long.toString(timeTo) + }; + Cursor resultSet = database.rawQuery("SELECT PlanDate FROM MensaPlan WHERE PlanDate >= ? AND PlanDate <= ? GROUP BY PlanDate", whereArgs); + ArrayList results = new ArrayList(); + if(resultSet.moveToFirst()) { + do { + long date = resultSet.getLong(0); + + results.add(date); + } while (resultSet.moveToNext()); + } + resultSet.close(); + + long[] resultsArr = new long[results.size()]; + for(int i = 0; i < resultsArr.length; i++) { + resultsArr[i] = results.get(i); + } + return resultsArr; + } + + public long[] getWeeksWithPlanData(long timeFrom, long timeTo) { + String[] whereArgs = new String[] { + Long.toString(timeFrom), + Long.toString(timeTo) + }; + Cursor resultSet = database.rawQuery("SELECT MIN(PlanDate) AS PlanDate, strftime(\"%W\", PlanDate, \"unixepoch\") AS PlanWeek FROM MensaPlan WHERE PlanDate >= ? AND PlanDate <= ? GROUP BY PlanWeek", whereArgs); + ArrayList results = new ArrayList(); + if(resultSet.moveToFirst()) { + do { + long date = resultSet.getLong(0); + + results.add(date); + } while (resultSet.moveToNext()); + } + resultSet.close(); + + long[] resultsArr = new long[results.size()]; + for(int i = 0; i < resultsArr.length; i++) { + resultsArr[i] = results.get(i); + } + return resultsArr; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java b/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java new file mode 100644 index 0000000..e71066d --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/database/NewsDatabaseHelper.java @@ -0,0 +1,117 @@ +package de.dhbwloe.campusapp.database; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import java.util.ArrayList; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.news.NewsItem; + +/** + * Created by pk910 on 24.01.2016. + */ +public class NewsDatabaseHelper { + private CampusAppContext AppContext; + private SQLiteDatabase database; + + public NewsDatabaseHelper(CampusAppContext context, SQLiteDatabase database) { + this.database = database; + AppContext = context; + } + + public void updateNewsItem(NewsItem news) { + boolean isExisting = false; + String[] whereArgs = new String[] { + news.getSource(), + news.getUniqueId() + }; + Cursor resultSet = database.rawQuery("SELECT ChkSum FROM News WHERE Source = ? AND UniqueId = ?", whereArgs); + if(resultSet.moveToFirst()) { + long chksum = resultSet.getLong(0); + if (news.getChkSum() == chksum) + return; // nothing to update + isExisting = true; + } + resultSet.close(); + + if(isExisting) { + try { + ContentValues updateValues = new ContentValues(); + updateValues.put("ChkSum", news.getChkSum()); + updateValues.put("Title", news.getTitle()); + updateValues.put("Time", news.getTime()); + updateValues.put("Summary", news.getSummary()); + updateValues.put("Content", news.getContent()); + updateValues.put("Link", news.getLink()); + updateValues.put("Categories", news.getCategories()); + + database.update("News", updateValues, "Source = ? AND UniqueId = ?", whereArgs); + } catch(Exception e) { + e.printStackTrace(); + } + } else { + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("Source", news.getSource()); + indexValues.put("UniqueId", news.getUniqueId()); + + indexValues.put("ChkSum", news.getChkSum()); + indexValues.put("Title", news.getTitle()); + indexValues.put("Time", news.getTime()); + indexValues.put("Summary", news.getSummary()); + indexValues.put("Content", news.getContent()); + indexValues.put("Link", news.getLink()); + indexValues.put("Categories", news.getCategories()); + + long newId = database.insertOrThrow("News", null, indexValues); + news.setIsNew((int) newId); + } catch(Exception e) { + e.printStackTrace(); + } + } + + } + + public NewsItem[] getNewsItems(String source, long timeFrom, long timeTo) { + String[] whereArgs = new String[] { + source, + Long.toString(timeFrom), + Long.toString(timeTo) + }; + Cursor resultSet = database.rawQuery("SELECT Id, Source, Time, UniqueId, ChkSum, Title, Summary, Content, Link, Categories FROM News WHERE Source = ? AND Time >= ? AND Time <= ?", whereArgs); + ArrayList results = new ArrayList(); + if(resultSet.moveToFirst()) { + int[] columnIndexes = { + resultSet.getColumnIndex("Id"), + resultSet.getColumnIndex("Source"), + resultSet.getColumnIndex("Time"), + resultSet.getColumnIndex("UniqueId"), + resultSet.getColumnIndex("ChkSum"), + resultSet.getColumnIndex("Title"), + resultSet.getColumnIndex("Summary"), + resultSet.getColumnIndex("Content"), + resultSet.getColumnIndex("Link"), + resultSet.getColumnIndex("Categories") + }; + do { + NewsItem news = new NewsItem( + resultSet.getInt(columnIndexes[0]), resultSet.getString(columnIndexes[1]), + resultSet.getLong(columnIndexes[2]), resultSet.getString(columnIndexes[3]), + resultSet.getLong(columnIndexes[4]), resultSet.getString(columnIndexes[5]), + resultSet.getString(columnIndexes[6]), resultSet.getString(columnIndexes[7]), + resultSet.getString(columnIndexes[8]), resultSet.getString(columnIndexes[9]) + ); + + results.add(news); + } while (resultSet.moveToNext()); + } + resultSet.close(); + + NewsItem[] resultsArr = new NewsItem[results.size()]; + resultsArr = results.toArray(resultsArr); + return resultsArr; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/NfcCardData.java b/app/src/main/java/de/dhbwloe/campusapp/database/NfcCardData.java new file mode 100644 index 0000000..08a6e2d --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/database/NfcCardData.java @@ -0,0 +1,51 @@ +package de.dhbwloe.campusapp.database; + +import java.util.Date; + +/** + * Created by pk910 on 21.01.2016. + */ +public class NfcCardData { + private int iUniqueId; + private long iLastUpdate; + private String sCardData; + private int iBalance; + private int iLastTransaction; + + public NfcCardData(de.dhbwloe.campusapp.nfcreader.cardreader.NfcCardData carddata) { + iUniqueId = carddata.getUniqueid(); + iLastUpdate = (new Date()).getTime()/1000; + sCardData = carddata.getCompactCardDataSummary(); + iBalance = (int)(carddata.getBalanceData() * 100); + iLastTransaction = (int)(carddata.getLastTransaction() * 100); + } + + public NfcCardData(int uid, long lastupdate, String carddata, int balance, int transaction) { + iUniqueId = uid; + iLastUpdate = lastupdate; + sCardData = carddata; + iBalance = balance; + iLastTransaction = transaction; + } + + public int getUniqueId() { + return iUniqueId; + } + + public String getCardData() { + return sCardData; + } + + public long getLastUpdate() { + return iLastUpdate; + } + + public int getBalance() { + return iBalance; + } + + public int getLastTransaction() { + return iLastTransaction; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/VorlesungsplanDatabaseHelper.java b/app/src/main/java/de/dhbwloe/campusapp/database/VorlesungsplanDatabaseHelper.java new file mode 100644 index 0000000..e38b87d --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/database/VorlesungsplanDatabaseHelper.java @@ -0,0 +1,245 @@ +package de.dhbwloe.campusapp.database; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import net.fortuna.ical4j.model.DateList; +import net.fortuna.ical4j.model.DateTime; +import net.fortuna.ical4j.model.Period; +import net.fortuna.ical4j.model.Recur; +import net.fortuna.ical4j.model.parameter.Value; +import net.fortuna.ical4j.model.property.RRule; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.vorlesungen.CourseEvent; +import de.dhbwloe.campusapp.vorlesungen.CourseGroup; + +/** + * Created by pk910 on 24.01.2016. + */ +public class VorlesungsplanDatabaseHelper { + private CampusAppContext AppContext; + private SQLiteDatabase database; + + public VorlesungsplanDatabaseHelper(CampusAppContext context, SQLiteDatabase database) { + this.database = database; + AppContext = context; + } + + + public void updateCourseCalendar(CourseEvent event) { + boolean isExisting = false; + String[] whereArgs = new String[] { + event.getCourseName(), + event.getUniqueId() + }; + Cursor resultSet = database.rawQuery("SELECT SequenceId FROM CourseCalendar WHERE CourseName = ? AND UniqueId = ?", whereArgs); + if(resultSet.moveToFirst()) { + int sequence = resultSet.getInt(0); + if(event.getSequenceId() <= sequence) + return; + isExisting = true; + } + resultSet.close(); + + if(isExisting) { + try { + ContentValues updateValues = new ContentValues(); + updateValues.put("SequenceId", event.getSequenceId()); + updateValues.put("EventFrom", event.getEventFrom()); + updateValues.put("EventTo", event.getEventTo()); + updateValues.put("EventTitle", event.getEventTitle()); + updateValues.put("EventLocation", event.getEventLocation()); + updateValues.put("EventStatus", event.getEventStatus()); + updateValues.put("RecurRule", event.getRecurRule()); + updateValues.put("ExcludeDates", event.getExcludeDates()); + if(event.getCourseGroup() != null) + updateValues.put("CourseGroupId", event.getCourseGroup().getGroupId()); + + database.update("CourseCalendar", updateValues, "CourseName = ? AND UniqueId = ?", whereArgs); + updateCourseCalendarEventTable(event, true); + } catch(Exception e) { + e.printStackTrace(); + } + } else { + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("CourseName", event.getCourseName()); + indexValues.put("UniqueId", event.getUniqueId()); + indexValues.put("SequenceId", event.getSequenceId()); + indexValues.put("EventFrom", event.getEventFrom()); + indexValues.put("EventTo", event.getEventTo()); + indexValues.put("EventTitle", event.getEventTitle()); + indexValues.put("EventLocation", event.getEventLocation()); + indexValues.put("EventStatus", event.getEventStatus()); + indexValues.put("RecurRule", event.getRecurRule()); + indexValues.put("ExcludeDates", event.getExcludeDates()); + if(event.getCourseGroup() != null) + indexValues.put("CourseGroupId", event.getCourseGroup().getGroupId()); + + long id = database.insertOrThrow("CourseCalendar", null, indexValues); + event.setEventId((int) id); + updateCourseCalendarEventTable(event, false); + } catch(Exception e) { + e.printStackTrace(); + } + } + + } + + private void updateCourseCalendarEventTable(CourseEvent event, boolean clear) { + if(clear) { + String[] whereArgs = { + Integer.toString(event.getEventId()) + }; + database.rawQuery("DELETE FROM CourseCalendarEvent WHERE EventId = ?", whereArgs); + } + + String rrule = event.getRecurRule(); + String exdates = event.getExcludeDates(); + + if(rrule != null && rrule.length() > 0) { + try { + Log.i("DBM", "RRule: " + rrule); + RRule rule = new RRule(rrule); + Recur recur = rule.getRecur(); + Date startDate = new Date((event.getEventFrom())*1000); + Date endDate = new Date(startDate.getTime() + (86400 * 365)*1000); + + DateTime startDateTime = new DateTime(startDate); + DateList dates = recur.getDates(startDateTime, new Period(startDateTime, new DateTime(endDate)), Value.DATE); + + Log.i("DBM", "Update events table for " + event.getUniqueId()); + Log.i("DBM", "events: " +dates.size()); + + for(int i = 0; i < dates.size(); i++) { + net.fortuna.ical4j.model.Date date = (net.fortuna.ical4j.model.Date) dates.get(i); + long eventStartTime = date.getTime() / 1000; + long eventEndTime = (eventStartTime + (event.getEventTo() - event.getEventFrom())) / 1000; + + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("EventId", event.getEventId()); + indexValues.put("EventFrom", eventStartTime); + indexValues.put("EventTo", eventEndTime); + database.insertOrThrow("CourseCalendarEvent", null, indexValues); + } catch(Exception e) { + e.printStackTrace(); + } + } + + } catch (ParseException e) { + } + } else { + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("EventId", event.getEventId()); + indexValues.put("EventFrom", event.getEventFrom()); + indexValues.put("EventTo", event.getEventTo()); + database.insertOrThrow("CourseCalendarEvent", null, indexValues); + } catch(Exception e) { + e.printStackTrace(); + } + } + + } + + public CourseEvent[] getCourseCalendarEvents(String coursename, long timeFrom, long timeTo) { + String[] whereArgs = new String[] { + coursename, + Long.toString(timeFrom), + Long.toString(timeTo) + }; + Cursor resultSet = database.rawQuery("SELECT Id, CourseName, UniqueId, SequenceId, EventFrom, EventTo, EventTitle, EventLocation, EventStatus, RecurRule, ExcludeDates, CourseGroupId FROM CourseCalendar WHERE CourseName = ? AND EventTo >= ? AND EventFrom <= ?", whereArgs); + ArrayList events = new ArrayList(); + if(resultSet.moveToFirst()) { + int[] columnIndexes = { + resultSet.getColumnIndex("Id"), + resultSet.getColumnIndex("CourseName"), + resultSet.getColumnIndex("UniqueId"), + resultSet.getColumnIndex("SequenceId"), + resultSet.getColumnIndex("EventFrom"), + resultSet.getColumnIndex("EventTo"), + resultSet.getColumnIndex("EventTitle"), + resultSet.getColumnIndex("EventLocation"), + resultSet.getColumnIndex("EventStatus"), + resultSet.getColumnIndex("RecurRule"), + resultSet.getColumnIndex("ExcludeDates"), + resultSet.getColumnIndex("CourseGroupId") + }; + do { + int groupId = resultSet.getInt(columnIndexes[11]); + CourseGroup group; + if(groupId > 0) + group = CourseGroup.GetCourseGroupById(AppContext.getDatabaseManager(), groupId); + else + group = null; + CourseEvent event = new CourseEvent(resultSet.getInt(columnIndexes[0]), resultSet.getString(columnIndexes[1]), resultSet.getString(columnIndexes[2]), resultSet.getInt(columnIndexes[3]), + resultSet.getLong(columnIndexes[4]), resultSet.getLong(columnIndexes[5]), resultSet.getString(columnIndexes[6]), resultSet.getString(columnIndexes[7]), + resultSet.getString(columnIndexes[8]), resultSet.getString(columnIndexes[9]), resultSet.getString(columnIndexes[10]), group); + + events.add(event); + } while (resultSet.moveToNext()); + } + resultSet.close(); + + CourseEvent[] eventsArr = new CourseEvent[events.size()]; + eventsArr = events.toArray(eventsArr); + return eventsArr; + } + + public CourseGroup getCourseGroup(int courseGroupId) { + CourseGroup coursegroup = null; + String[] whereArgs = new String[] { + Integer.toString(courseGroupId) + }; + Cursor resultSet = database.rawQuery("SELECT CourseName, GroupName, LastUpdate FROM CourseCalendarGroup WHERE GroupId = ?", whereArgs); + if(resultSet.moveToFirst()) { + coursegroup = new CourseGroup(courseGroupId, resultSet.getString(0), resultSet.getString(1)); + } + resultSet.close(); + return coursegroup; + } + + public CourseGroup getCourseGroup(String coursename, String groupname) { + CourseGroup coursegroup = null; + String[] whereArgs = new String[] { + coursename, + groupname + }; + Cursor resultSet = database.rawQuery("SELECT GroupId, CourseName, GroupName, LastUpdate FROM CourseCalendarGroup WHERE CourseName = ? AND GroupName = ?", whereArgs); + if(resultSet.moveToFirst()) { + coursegroup = new CourseGroup(resultSet.getInt(0), resultSet.getString(1), resultSet.getString(2)); + } + resultSet.close(); + return coursegroup; + } + + public CourseGroup addCourseGroup(String coursename, String groupname) { + long now = (new Date()).getTime() / 1000; + int id = 0; + try { + ContentValues indexValues = new ContentValues(); + indexValues.put("CourseName",coursename); + indexValues.put("GroupName", groupname); + indexValues.put("LastUpdate", now); + + id = (int) database.insertOrThrow("CourseCalendarGroup", null, indexValues); + } catch(Exception e) { + e.printStackTrace(); + } + + if(id > 0) { + CourseGroup newGroup = new CourseGroup(id, coursename, groupname); + return newGroup; + } else + return null; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java new file mode 100644 index 0000000..3ca9e02 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearch.java @@ -0,0 +1,156 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.search.SearchTarget; + +/** + * A simple {@link Fragment} subclass. + */ +public class AppSearch extends CampusAppFragment { + private ViewPagerAdapter oAppSearchLViewPagerAdapter; + private String sSearchQuery; + + @Override + public void onCreate(Bundle savedInstanceState) { + Log.i("AppSearch", "Event: onCreate"); + super.onCreate(savedInstanceState); + + Bundle bundle; + if((bundle = getArguments()) != null) + sSearchQuery = bundle.getString("query"); + else if(savedInstanceState != null && (bundle = savedInstanceState.getBundle("AppSearch")) != null) + sSearchQuery = bundle.getString("query"); + + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + Log.i("AppSearch", "Event: onSaveInstanceState"); + Bundle bundle = new Bundle(); + bundle.putString("query", sSearchQuery); + savedInstanceState.putBundle("AppSearch", bundle); + super.onSaveInstanceState(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + Log.i("AppSearch", "Event: onCreateView"); + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + oFragmentView = inflater.inflate(R.layout.fragment_appsearch, container, false); + + AppContext.setTitle("Search: " + sSearchQuery); + + ViewPager viewPager = (ViewPager) oFragmentView.findViewById(R.id.viewpager); + setupViewPager(viewPager); + + TabLayout tabLayout = (TabLayout) oFragmentView.findViewById(R.id.tabs); + tabLayout.setupWithViewPager(viewPager); + + return oFragmentView; + } + + private void setupViewPager(ViewPager viewPager) { + final ViewPagerAdapter adapter; + if(oAppSearchLViewPagerAdapter != null) + adapter = oAppSearchLViewPagerAdapter; + else { + adapter = new ViewPagerAdapter(getChildFragmentManager()); + oAppSearchLViewPagerAdapter = adapter; + + CampusAppFragment fragment; + Bundle args = new Bundle(); + args.putString("query", sSearchQuery); + Log.i("AppSearch", "New result instances: "+sSearchQuery); + + fragment = new AppSearchInternal(); + fragment.setArguments(args); + adapter.addFragment("Campus App", fragment); + + fragment = new AppSearchDhbw(); + fragment.setArguments(args); + adapter.addFragment("DHBW Suche", fragment); + + fragment = new AppSearchStuv(); + fragment.setArguments(args); + adapter.addFragment("Stuv Suche", fragment); + } + + viewPager.setAdapter(adapter); + int activeItem = viewPager.getCurrentItem(); + AppSearchProvider activeProvider = (AppSearchProvider) adapter.getItem(activeItem); + activeProvider.executeSearch(false); + + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + AppSearchProvider activeProvider = (AppSearchProvider) adapter.getItem(position); + activeProvider.executeSearch(false); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + + class ViewPagerAdapter extends FragmentPagerAdapter { + private final List mFragmentDataList = new ArrayList<>(); + private final List mFragmentTitleList = new ArrayList<>(); + + public ViewPagerAdapter(FragmentManager manager) { + super(manager); + } + + @Override + public Fragment getItem(int position) { + return mFragmentDataList.get(position); + } + + @Override + public int getCount() { + return mFragmentDataList.size(); + } + + public void addFragment(String title, Fragment fragment) { + mFragmentDataList.add(fragment); + mFragmentTitleList.add(title); + } + + @Override + public CharSequence getPageTitle(int position) { + return mFragmentTitleList.get(position); + } + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java new file mode 100644 index 0000000..3159aca --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchDhbw.java @@ -0,0 +1,129 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import java.util.ArrayList; +import java.util.List; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.DhbwSearchHelper; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.search.SearchResultListener; +import de.dhbwloe.campusapp.search.SearchTarget; + +/** + * A simple {@link Fragment} subclass. + */ +public class AppSearchDhbw extends CampusAppFragment implements AppSearchProvider { + private String sSearchQuery; + private boolean bQueryExecuted = false; + private AppSearchListAdapter appSearchAdapter; + private DhbwSearchHelper seachHelper; + private ArrayList searchResultItems = new ArrayList(); + + @Override + public void onCreate(Bundle savedInstanceState) { + Log.i("AppSearchDhbw", "Event: onCreate"); + super.onCreate(savedInstanceState); + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + Log.i("AppSearchDhbw", "Event: onSaveInstanceState"); + Bundle bundle = new Bundle(); + bundle.putString("query", sSearchQuery); + bundle.putBoolean("executed", bQueryExecuted); + savedInstanceState.putBundle("SearchDhbw", bundle); + super.onSaveInstanceState(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + Log.i("AppSearchDhbw", "Event: onCreateView"); + Bundle savedState; + if((savedState = getArguments()) != null) + sSearchQuery = savedState.getString("query"); + else if(savedInstanceState != null && (savedState = savedInstanceState.getBundle("SearchDhbw")) != null) { + Log.i("AppSearchDhbw", "Parsed instance state"); + sSearchQuery = savedState.getString("query"); + if(savedState.getBoolean("executed")) { + bQueryExecuted = true; + } + } + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + oFragmentView = inflater.inflate(R.layout.fragment_appsearch_list, container, false); + + Bundle args = getArguments(); + if(args != null) { + String queryString = args.getString("query"); + if(queryString != null) + sSearchQuery = queryString; + } + + ListView searchResultList = (ListView) oFragmentView.findViewById(R.id.searchResultItems); + appSearchAdapter = new AppSearchListAdapter(oFragmentView.getContext(), R.layout.fragment_appsearch_listitem, searchResultItems); + searchResultList.setAdapter(appSearchAdapter); + + searchResultList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + AppSearchListItem item = searchResultItems.get(position); + if (item == null) + return; + navigateToResult(item); + } + }); + + return oFragmentView; + } + + public void executeSearch(boolean reset) { + Log.i("AppSearchDhbw", "Action: executeSearch"); + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + if(bQueryExecuted && !reset) + return; + bQueryExecuted = true; + + searchResultItems.clear(); + + if(seachHelper == null) + seachHelper = new DhbwSearchHelper(); + seachHelper.search(sSearchQuery, new SearchResultListener() { + @Override + public void onSearchResultsReceived(List results) { + Log.i("SearchDhbw", "Success: "+results.size()); + for(AppSearchListItem result : results) + searchResultItems.add(result); + if(appSearchAdapter != null) + appSearchAdapter.notifyDataSetChanged(); + else + Log.i("SearchDhbw", "appSearchAdapter is null in executeSearch"); + } + + @Override + public void onSearchFailed(String error) { + Log.i("SearchDhbw", "Failed: " + error); + } + }); + } + + private void navigateToResult(AppSearchListItem result) { + SearchTarget target = result.getTarget(); + + target.navigate(AppContext.getNavigationManager()); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java new file mode 100644 index 0000000..2c10dbb --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchInternal.java @@ -0,0 +1,129 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.Date; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.search.SearchTarget; + +/** + * A simple {@link Fragment} subclass. + */ +public class AppSearchInternal extends CampusAppFragment implements AppSearchProvider { + private String sSearchQuery; + private boolean bQueryExecuted = false; + private AppSearchListAdapter appSearchAdapter; + private ArrayList searchResultItems = new ArrayList(); + + @Override + public void onCreate(Bundle savedInstanceState) { + Log.i("AppSearchInternal", "Event: onCreate"); + super.onCreate(savedInstanceState); + Bundle savedState; + if((savedState = getArguments()) != null) + sSearchQuery = savedState.getString("query"); + else if(savedInstanceState != null && (savedState = savedInstanceState.getBundle("SearchInternal")) != null) { + sSearchQuery = savedState.getString("query"); + if(savedState.getBoolean("executed")) { + executeSearch(false); + } + } + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + Log.i("AppSearchInternal", "Event: onSaveInstanceState"); + Bundle bundle = new Bundle(); + bundle.putString("query", sSearchQuery); + bundle.putBoolean("executed", bQueryExecuted); + savedInstanceState.putBundle("SearchInternal", bundle); + super.onSaveInstanceState(savedInstanceState); + } + + private void parseIstanceState(Bundle bundle) { + if(sSearchQuery != null) + return; + Bundle args = getArguments(); + if(args != null) { + String queryString = args.getString("query"); + if(queryString != null) + sSearchQuery = queryString; + } + if(sSearchQuery == null && bundle != null) { + String queryString = bundle.getString("query"); + if(queryString != null) + sSearchQuery = queryString; + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + Log.i("AppSearchInternal", "Event: onCreateView"); + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + oFragmentView = inflater.inflate(R.layout.fragment_appsearch_list, container, false); + + parseIstanceState(savedInstanceState); + + ListView searchResultList = (ListView) oFragmentView.findViewById(R.id.searchResultItems); + appSearchAdapter = new AppSearchListAdapter(oFragmentView.getContext(), R.layout.fragment_appsearch_listitem, searchResultItems); + searchResultList.setAdapter(appSearchAdapter); + + searchResultList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + AppSearchListItem item = searchResultItems.get(position); + if (item == null) + return; + navigateToResult(item); + } + }); + + return oFragmentView; + } + + public void executeSearch(boolean reset) { + if(sSearchQuery == null) + parseIstanceState(null); + Log.i("AppSearchInternal", "Action: executeSearch "+sSearchQuery); + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + if(bQueryExecuted && !reset) + return; + bQueryExecuted = true; + + searchResultItems.clear(); + + SearchIndices[] indices = AppContext.getDatabaseManager().performSearchRequest(sSearchQuery, 40); + for(int i = 0; i < indices.length; i++) { + SearchTarget target = new SearchTarget(indices[i].getTarget()); + AppSearchListItem item = new AppSearchListItem(indices[i].getTitle(), indices[i].getDescription(), target); + searchResultItems.add(item); + } + if(appSearchAdapter != null) + appSearchAdapter.notifyDataSetChanged(); + + } + + private void navigateToResult(AppSearchListItem result) { + SearchTarget target = result.getTarget(); + + target.navigate(AppContext.getNavigationManager()); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListAdapter.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListAdapter.java new file mode 100644 index 0000000..90015d4 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListAdapter.java @@ -0,0 +1,62 @@ +package de.dhbwloe.campusapp.fragments; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.util.ArrayList; + +import de.dhbwloe.campusapp.R; + +/** + * Created by pk910 on 19.01.2016. + */ +public class AppSearchListAdapter extends ArrayAdapter { + private Context context; + private int layoutResourceId; + private ArrayList data = new ArrayList(); + + public AppSearchListAdapter(Context context, int layoutResourceId, ArrayList data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + RecordHolder holder = null; + + if (row == null) { + LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new RecordHolder(row); + row.setTag(holder); + } else { + holder = (RecordHolder) row.getTag(); + } + + final AppSearchListAdapter that = this; + final AppSearchListItem item = data.get(position); + + holder.resultTitle.setText(item.getTitle()); + holder.resultDescription.setText(item.getDescription()); + + return row; + } + + static class RecordHolder { + TextView resultTitle; + TextView resultDescription; + + public RecordHolder(View view) { + this.resultTitle = (TextView) view.findViewById(R.id.resultTitle); + this.resultDescription = (TextView) view.findViewById(R.id.resultDescription); + } + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListItem.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListItem.java new file mode 100644 index 0000000..cff66a1 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchListItem.java @@ -0,0 +1,30 @@ +package de.dhbwloe.campusapp.fragments; + +import de.dhbwloe.campusapp.search.SearchTarget; + +/** + * Created by pk910 on 19.01.2016. + */ +public class AppSearchListItem { + private String title; + private String description; + private SearchTarget target; + + public AppSearchListItem(String title, String description, SearchTarget target) { + this.title = title; + this.description = description; + this.target = target; + } + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + public SearchTarget getTarget() { + return target; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchProvider.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchProvider.java new file mode 100644 index 0000000..550a2b5 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchProvider.java @@ -0,0 +1,8 @@ +package de.dhbwloe.campusapp.fragments; + +/** + * Created by pk910 on 25.01.2016. + */ +public interface AppSearchProvider { + public void executeSearch(boolean reset); +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java new file mode 100644 index 0000000..3aad66b --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/AppSearchStuv.java @@ -0,0 +1,126 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import java.util.ArrayList; +import java.util.List; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.DhbwSearchHelper; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.search.SearchResultListener; +import de.dhbwloe.campusapp.search.SearchTarget; +import de.dhbwloe.campusapp.search.StuvSearchHelper; + +/** + * A simple {@link Fragment} subclass. + */ +public class AppSearchStuv extends CampusAppFragment implements AppSearchProvider { + private String sSearchQuery; + private boolean bQueryExecuted = false; + private boolean bExecuteOnload = false; + private AppSearchListAdapter appSearchAdapter; + private StuvSearchHelper seachHelper; + private ArrayList searchResultItems = new ArrayList(); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle savedState; + if((savedState = getArguments()) != null) + sSearchQuery = savedState.getString("query"); + if(savedInstanceState != null && (savedState = savedInstanceState.getBundle("SearchStuv")) != null) { + sSearchQuery = savedState.getString("query"); + if(savedState.getBoolean("executed")) { + executeSearch(false); + } + } + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + Bundle bundle = new Bundle(); + bundle.putString("query", sSearchQuery); + bundle.putBoolean("executed", bQueryExecuted); + savedInstanceState.putBundle("SearchStuv", bundle); + super.onSaveInstanceState(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + oFragmentView = inflater.inflate(R.layout.fragment_appsearch_list, container, false); + + Bundle args = getArguments(); + if(args != null) { + String queryString = args.getString("query"); + if(queryString != null) + sSearchQuery = queryString; + } + + ListView searchResultList = (ListView) oFragmentView.findViewById(R.id.searchResultItems); + if(appSearchAdapter == null) + appSearchAdapter = new AppSearchListAdapter(oFragmentView.getContext(), R.layout.fragment_appsearch_listitem, searchResultItems); + searchResultList.setAdapter(appSearchAdapter); + + searchResultList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + AppSearchListItem item = searchResultItems.get(position); + if (item == null) + return; + navigateToResult(item); + } + }); + + return oFragmentView; + } + + public void executeSearch(final boolean reset) { + if(AppContext == null) + AppContext = CampusAppContext.getInstance(); + if(bQueryExecuted && !reset) + return; + bQueryExecuted = true; + + searchResultItems.clear(); + + if(seachHelper == null) + seachHelper = new StuvSearchHelper(); + seachHelper.search(sSearchQuery, new SearchResultListener() { + @Override + public void onSearchResultsReceived(List results) { + Log.i("SearchStuv", "Success: "+results.size()); + for(AppSearchListItem result : results) + searchResultItems.add(result); + if(appSearchAdapter != null) + appSearchAdapter.notifyDataSetChanged(); + } + + @Override + public void onSearchFailed(String error) { + Log.i("SearchDhbw", "Failed: " + error); + } + }); + + } + + private void navigateToResult(AppSearchListItem result) { + SearchTarget target = result.getTarget(); + + target.navigate(AppContext.getNavigationManager()); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java new file mode 100644 index 0000000..5bea0bc --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Dashboard.java @@ -0,0 +1,43 @@ +package de.dhbwloe.campusapp.fragments; + +import de.dhbwloe.campusapp.CampusAppFragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +public class Dashboard extends CampusAppFragment { + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("Dashboard", true) {{ + setUpdateTime(1); + setTarget("#Dashboard"); + setTitle("Dashboard"); + setDescription("Dashboard der App :)"); + addKeyWord("home, dashboard, start, übersicht, overview"); + }}, + }; + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_dashboard, container, false); + AppContext.setTitle("Dashboard"); + + + + return view; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java new file mode 100644 index 0000000..b84a9ab --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/FirstRun.java @@ -0,0 +1,37 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; + +/** + * A simple {@link Fragment} subclass. + */ +public class FirstRun extends CampusAppFragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_first_run, container, false); + AppContext.setTitle("Campus App"); + + Button startAppBtn = (Button)view.findViewById(R.id.startAppBtn); + startAppBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AppContext.getDatabaseManager().setRuntimeCache("AppStartCounter", "1"); + AppContext.getNavigationManager().navigatePage("SplashScreen", null, false); + } + }); + + return view; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java new file mode 100644 index 0000000..a888f2a --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Impressum.java @@ -0,0 +1,40 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + */ +public class Impressum extends CampusAppFragment { + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("Impressum", true) {{ + setUpdateTime(1); + setTarget("#Impressum"); + setTitle("Impressum"); + setDescription("Impressum der App"); + addKeyWord("impressum, kontakt, autor, author, contact, imprint"); + }}, + }; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_impressum, container, false); + AppContext.setTitle("Impressum"); + + return view; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java new file mode 100644 index 0000000..ccc7785 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Mensa.java @@ -0,0 +1,213 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + */ +public class Mensa extends CampusAppFragment { + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("Mensa", true) {{ + setUpdateTime(1); + setTarget("#Mensa"); + setTitle("Mensa"); + setDescription("Aktuelle Mensapläne"); + addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, plan, hunger, mittag"); + }}, + }; + } + + private TabLayout tabLayout; + private ViewPager viewPager; + private boolean viewDayplan; + private long viewDate; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_mensa, container, false); + boolean viewmodeSet = false; + Bundle arguments = getArguments(); + viewDate = (new Date()).getTime()/1000; + if(arguments != null) { + String showdate = arguments.getString("showdate"); + long date; + if(showdate != null && !showdate.isEmpty() && (date = Long.parseLong(showdate)) > 0) { + viewDate = date; + viewDayplan = true; + viewmodeSet = true; + } + if(!viewmodeSet) { + String viewmode = arguments.getString("viewmode"); + if(viewmode != null && !viewmode.isEmpty()) { + if(viewmode.equalsIgnoreCase("day")) + viewDayplan = true; + else + viewDayplan = false; + viewmodeSet = true; + } + } + } + if(!viewmodeSet) { + String lastViewmode = AppContext.getDatabaseManager().getRuntimeCache("MensaplanViewMode"); + if(lastViewmode != null && !lastViewmode.isEmpty()) { + if(lastViewmode.equalsIgnoreCase("day")) + viewDayplan = true; + else + viewDayplan = false; + viewmodeSet = true; + } + } + if(!viewmodeSet) + viewDayplan = true; + + AppContext.setTitle("Mensa "+(viewDayplan ? "Tagesplan" : "Wochenplan")); + + /* + toolbar = (Toolbar) view.findViewById(R.id.toolbar); + ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + + ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); + */ + + viewPager = (ViewPager) view.findViewById(R.id.viewpager); + setupViewPager(viewPager); + + tabLayout = (TabLayout) view.findViewById(R.id.tabs); + tabLayout.setupWithViewPager(viewPager); + + return view; + } + + private void setupViewPager(ViewPager viewPager) { + final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); + + long[] showDates; + long now = (new Date()).getTime()/1000; + if(viewDayplan) + showDates = AppContext.getDatabaseManager().getDaysWithPlanData(now - (30 * 86400), now + (30 * 86400)); + else + showDates = AppContext.getDatabaseManager().getDaysWithPlanData(now - (365 * 86400), now + (30 * 86400)); + + int activeItem = -1; + long activeItemDiff = -1; + Bundle args = getArguments(); + for(int i = 0; i < showDates.length; i++) { + long date = showDates[i]; + Bundle bundle = new Bundle(); + if(args != null) + bundle.putAll(args); + String title; + SimpleDateFormat sdf; + if(viewDayplan) + sdf = new SimpleDateFormat("dd.MM."); + else + sdf = new SimpleDateFormat("WW"); + + if(viewDate > 0) { + long diff = Math.abs(viewDate - date); + if(activeItem == -1 || diff < activeItemDiff) { + activeItem = i; + activeItemDiff = diff; + } + } + + title = sdf.format(new Date(date * 1000)); + bundle.putLong("date", date); + adapter.addFragment(bundle, title); + } + viewPager.setAdapter(adapter); + viewPager.setCurrentItem(activeItem); + if(viewDayplan) { + MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(activeItem); + tagesplan.onSetActive(); + } + + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + if(viewDayplan) { + MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(position); + tagesplan.onSetActive(); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + + class ViewPagerAdapter extends FragmentPagerAdapter { + private final List mFragmentList = new ArrayList<>(); + private final List mFragmentDataList = new ArrayList<>(); + private final List mFragmentTitleList = new ArrayList<>(); + + public ViewPagerAdapter(FragmentManager manager) { + super(manager); + } + + @Override + public Fragment getItem(int position) { + Fragment fragment; + while(mFragmentList.size() <= position) { + mFragmentList.add(null); + } + if(mFragmentList.get(position) != null) + return mFragmentList.get(position); + if(viewDayplan) + fragment = new MensaTagesplan(); + else + fragment = new MensaWochenplan(); + fragment.setArguments(mFragmentDataList.get(position)); + mFragmentList.set(position, fragment); + return fragment; + } + + @Override + public int getCount() { + return mFragmentDataList.size(); + } + + public void addFragment(Bundle fragmentdata, String title) { + fragmentdata.putBoolean("parentIsMensaFragment", true); + mFragmentDataList.add(fragmentdata); + mFragmentTitleList.add(title); + } + + @Override + public CharSequence getPageTitle(int position) { + return mFragmentTitleList.get(position); + } + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java new file mode 100644 index 0000000..e465d72 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaCard.java @@ -0,0 +1,63 @@ +package de.dhbwloe.campusapp.fragments; + +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.text.DecimalFormat; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link MensaCard.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link MensaCard#newInstance} factory method to + * create an instance of this fragment. + */ +public class MensaCard extends CampusAppFragment { + private View view; + + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("MensaCard", true) {{ + setUpdateTime(1); + setTarget("#MensaCard"); + setTitle("Mensakarte auslesen"); + setDescription("Mensakarte Kontostand"); + addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, karte, ausweis, geld, kontostand, euro"); + }}, + }; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_mensa_card, container, false); + AppContext.setTitle("Mensa Guthaben"); + + Bundle args = getArguments(); + if(args != null && args.containsKey("balance")) { + showNfcCardData(args); + } + + return view; + } + + public void showNfcCardData(Bundle bundle) { + TextView cardDataView = (TextView)view.findViewById(R.id.balanceTxt); + double balance = bundle.getDouble("balance"); + DecimalFormat df = new DecimalFormat("#,###.00"); + cardDataView.setText(df.format(balance)+" €"); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java new file mode 100644 index 0000000..1d1022a --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplan.java @@ -0,0 +1,113 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; + +/** + * A simple {@link Fragment} subclass. + */ +public class MensaTagesplan extends CampusAppFragment { + private ArrayList tagesplanMenueItems = new ArrayList<>(); + private Date viewPlanDate; + private boolean setActiveOnLoad = false; + + public void onSetActive() { + if(viewPlanDate == null) { + setActiveOnLoad = true; + return; + } + SimpleDateFormat titleDateFormater = new SimpleDateFormat("dd.MM.yyyy"); + AppContext.setTitle("Mensa: " + titleDateFormater.format(viewPlanDate)); + } + + private void setupPlanDate() { + Bundle args = getArguments(); + Date planDay = null; + if(args != null) { + long plandate = args.getLong("date"); + if(plandate > 0) { + planDay = new Date(plandate * 1000); + DateFormat justDay = new SimpleDateFormat("yyyyMMdd"); + try { + planDay = justDay.parse(justDay.format(planDay)); + } catch (Exception e) { + } + } + } + if(planDay == null) { + return; + } + viewPlanDate = planDay; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setupPlanDate(); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_mensa_tagesplan, container, false); + + if(viewPlanDate == null) { + AppContext.getNavigationManager().navigatePage("Mensa", null, false); // silent redirect + return null; + } + if(setActiveOnLoad) { + setActiveOnLoad = false; + onSetActive(); + } + + ListView tagesplanItemsList = (ListView) view.findViewById(R.id.tagesplanItems); + MensaTagesplanListAdapter listAdapter = new MensaTagesplanListAdapter(view.getContext(), R.layout.fragment_mensa_tagesplan_listitem, tagesplanMenueItems); + tagesplanItemsList.setAdapter(listAdapter); + + tagesplanItemsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + de.dhbwloe.campusapp.mensaplan.MensaTagesplan item = tagesplanMenueItems.get(position); + if (item == null) + return; + + // do sth? + } + }); + + requestMenues(); + + return view; + } + + private void requestMenues() { + Date endOfDay = (Date)viewPlanDate.clone(); + endOfDay.setTime(endOfDay.getTime() + (86400 - 1) * 1000); + + de.dhbwloe.campusapp.mensaplan.MensaTagesplan menues[] = AppContext.getDatabaseManager().getMensaTagesplan(viewPlanDate.getTime()/1000, endOfDay.getTime()/1000); + tagesplanMenueItems.clear(); + for(de.dhbwloe.campusapp.mensaplan.MensaTagesplan menue : menues) { + tagesplanMenueItems.add(menue); + } + + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplanListAdapter.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplanListAdapter.java new file mode 100644 index 0000000..f0bf2a1 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaTagesplanListAdapter.java @@ -0,0 +1,66 @@ +package de.dhbwloe.campusapp.fragments; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.util.ArrayList; + +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.mensaplan.*; + +/** + * Created by pk910 on 24.01.2016. + */ + +public class MensaTagesplanListAdapter extends ArrayAdapter { + private Context context; + private int layoutResourceId; + private ArrayList data = new ArrayList(); + + public MensaTagesplanListAdapter(Context context, int layoutResourceId, ArrayList data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + RecordHolder holder = null; + + if (row == null) { + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new RecordHolder(row); + row.setTag(holder); + } else { + holder = (RecordHolder) row.getTag(); + } + + final MensaTagesplanListAdapter that = this; + final de.dhbwloe.campusapp.mensaplan.MensaTagesplan item = data.get(position); + + if(holder.txtMenueName != null) + holder.txtMenueName.setText(item.getMenuName()); + if(holder.txtName != null) + holder.txtName.setText(item.getName()); + + return row; + } + + static class RecordHolder { + TextView txtMenueName; + TextView txtName; + + public RecordHolder(View view) { + this.txtMenueName = (TextView) view.findViewById(R.id.txtMenueName); + this.txtName = (TextView) view.findViewById(R.id.txtName); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaWochenplan.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaWochenplan.java new file mode 100644 index 0000000..35917f0 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/MensaWochenplan.java @@ -0,0 +1,31 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + */ +public class MensaWochenplan extends CampusAppFragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_mensa_wochenplan, container, false); + AppContext.setTitle("Mensa Wochenplan: "); + + + + return view; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java new file mode 100644 index 0000000..6a48b68 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/News.java @@ -0,0 +1,42 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + */ +public class News extends CampusAppFragment { + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("News", true) {{ + setUpdateTime(1); + setTarget("#News"); + setTitle("News"); + setDescription("News der DHBW & Stuv"); + addKeyWord("news, dhbw, stuv, termin, termine"); + }}, + }; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_news, container, false); + AppContext.setTitle("News"); + + + return view; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/PopupFragment.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/PopupFragment.java new file mode 100644 index 0000000..69f36d5 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/PopupFragment.java @@ -0,0 +1,80 @@ +package de.dhbwloe.campusapp.fragments; + +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.PopupWindow; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.search.SearchTarget; + +/** + * Created by pk910 on 21.01.2016. + */ +public class PopupFragment extends DialogFragment { + private CampusAppContext AppContext; + private CampusAppFragment oCurrentFragment; + + @Override + public void onCreate(Bundle savedInstanceState) { + AppContext = CampusAppContext.getInstance(); + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.content_popup, container, false); + getDialog().setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + AppContext.getNavigationManager().closeDialog(); + } + }); + + Bundle args = getArguments(); + if(args != null) { + String targetPage = args.getString("target"); + SearchTarget target = new SearchTarget(targetPage); + String targetPageName; + if(target.isInAppTarget()) + targetPageName = target.getTargetUrl(); + else { + targetPageName = "WebBrowser"; + args.putString("url", target.getTargetUrl()); + } + CampusAppFragment fragment = AppContext.getNavigationManager().getPageFragment(targetPageName); + fragment.setArguments(args); + + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + transaction.add(R.id.content_container, fragment); + oCurrentFragment = fragment; + transaction.commit(); + } + + return view; + } + + public void destroyView() { + if(oCurrentFragment != null) { + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + transaction.remove(oCurrentFragment); + transaction.commit(); + } + } + + public CampusAppFragment getCurrentFragment() { + return oCurrentFragment; + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/SplashScreen.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/SplashScreen.java new file mode 100644 index 0000000..eb543d5 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/SplashScreen.java @@ -0,0 +1,254 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.graphics.Point; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.support.v4.app.Fragment; +import android.view.Display; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import java.util.Date; + +import de.dhbwloe.campusapp.CampusApp; +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.mensaplan.MensaplanManager; +import de.dhbwloe.campusapp.mensaplan.MensaplanManagerInterface; +import de.dhbwloe.campusapp.news.NewsManager; +import de.dhbwloe.campusapp.news.NewsManagerInterface; +import de.dhbwloe.campusapp.vorlesungen.VorlesungsplanManager; +import de.dhbwloe.campusapp.vorlesungen.VorlesungsplanManagerInterface; + +/** + * A simple {@link Fragment} subclass. + */ +public class SplashScreen extends CampusAppFragment { + private ProgressBar splashProgress; + private int progressCounter; + private Handler timerHandler = new Handler(); + private Runnable timerRunnable; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + timerHandler.removeCallbacksAndMessages(null); + super.onSaveInstanceState(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_splashscreen, container, false); + + splashProgress = (ProgressBar)view.findViewById(R.id.splashProgress); + splashProgress.setMax(20); + splashProgress.setProgress(0); + progressCounter = 0; + + AppContext.setTitle("DHBW Lörrach"); + + ImageView splashImage = (ImageView)view.findViewById(R.id.splashImage); + BitmapFactory.Options dimensions = new BitmapFactory.Options(); + Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dhbw_campus_hd, dimensions); + int height = dimensions.outHeight; + int width = dimensions.outWidth; + Display display = AppContext.getMainActivity().getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + float scaleX = (float)size.x / (float)width; + float scaleY = (float)size.y / (float)height; + float scale = Math.max(scaleX, scaleY); + int newWidth = (int)(width*scale); + int newHeight = (int)(height*scale); + Bitmap newBitmap = Bitmap.createScaledBitmap(mBitmap, newWidth, newHeight, true); + splashImage.setImageBitmap(newBitmap); + + timerRunnable = new Runnable() { + @Override + public void run() { + progressCounter++; + splashProgress.setProgress(progressCounter); + long now = (new Date()).getTime()/1000; + switch(progressCounter) { + case 1: + AppContext.getDatabaseManager().initializeDatabase(); + break; + case 2: + AppContext.addDefaultSearchIndexes(); + break; + case 3: + String startCounter = AppContext.getDatabaseManager().getRuntimeCache("AppStartCounter"); + if(startCounter == null || Integer.parseInt(startCounter) == 0) { + AppContext.getNavigationManager().navigatePage("FirstRun", null, false); + return; + } + AppContext.getDatabaseManager().setRuntimeCache("AppStartCounter", Integer.toString(Integer.parseInt(startCounter) + 1)); + break; + case 4: + String lastVLMFullSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastVLMFullSync"); + String lastVLMPartialSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastVLMPartialSync"); + long lastVLMFullSync, lastVLMPartialSync; + if(lastVLMFullSyncStr != null) + lastVLMFullSync = Long.parseLong(lastVLMFullSyncStr); + else + lastVLMFullSync = 0; + if(lastVLMPartialSyncStr != null) + lastVLMPartialSync = Long.parseLong(lastVLMPartialSyncStr); + else + lastVLMPartialSync = 0; + + VorlesungsplanManager vpm = new VorlesungsplanManager(AppContext, "tif13a"); + + if(lastVLMFullSync == 0 || now - lastVLMFullSync > (86400 * 14)) { // full sync every 14 days + vpm.performFullSynchronisation(new VorlesungsplanManagerInterface() { + @Override + public void onVorlesungsplanUpdateDone() { + long now = (new Date()).getTime() / 1000; + AppContext.getDatabaseManager().setRuntimeCache("LastVLMFullSync", Long.toString(now)); + AppContext.getDatabaseManager().setRuntimeCache("LastVLMPartialSync", Long.toString(now)); + timerHandler.postDelayed(timerRunnable, 100); + } + + @Override + public void onVorlesungsplanUpdateFail(String errorMessage) { + timerHandler.postDelayed(timerRunnable, 100); + } + }); + } + else if(lastVLMPartialSync == 0 || now - lastVLMPartialSync > (86400)) { // partial sync every day + vpm.performFastSynchronisation(new VorlesungsplanManagerInterface() { + @Override + public void onVorlesungsplanUpdateDone() { + long now = (new Date()).getTime()/1000; + AppContext.getDatabaseManager().setRuntimeCache("LastVLMPartialSync", Long.toString(now)); + timerHandler.postDelayed(timerRunnable, 100); + } + @Override + public void onVorlesungsplanUpdateFail(String errorMessage) { + timerHandler.postDelayed(timerRunnable, 100); + } + }); + } + else + break; + return; + case 5: + String lastMPMSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastMPSync"); + long lastMPMSync; + if(lastMPMSyncStr != null) + lastMPMSync = Long.parseLong(lastMPMSyncStr); + else + lastMPMSync = 0; + + MensaplanManager mpm = new MensaplanManager(AppContext); + + if(lastMPMSync == 0 || now - lastMPMSync > (86400 * 2)) { //sync every 2 days + mpm.performSynchronisation(new MensaplanManagerInterface() { + @Override + public void onMensaplanUpdateDone() { + long now = (new Date()).getTime() / 1000; + AppContext.getDatabaseManager().setRuntimeCache("LastMPSync", Long.toString(now)); + timerHandler.postDelayed(timerRunnable, 100); + } + + @Override + public void onMensaplanUpdateFail(String errorMessage) { + timerHandler.postDelayed(timerRunnable, 100); + } + }); + } + else + break; + return; + case 6: + case 7: + final String syncSource = (progressCounter == 6 ? "DHBW" : "STUV"); + String lastNewsSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastNewsSync_"+syncSource); + long lastNewsSync; + if(lastNewsSyncStr != null) + lastNewsSync = Long.parseLong(lastNewsSyncStr); + else + lastNewsSync = 0; + + NewsManager nm = new NewsManager(AppContext, syncSource); + + if(lastNewsSync == 0 || now - lastNewsSync > (86400 * 1)) { //sync every day + nm.performSynchronisation(new NewsManagerInterface() { + @Override + public void onNewsUpdateDone() { + long now = (new Date()).getTime() / 1000; + AppContext.getDatabaseManager().setRuntimeCache("LastNewsSync_"+syncSource, Long.toString(now)); + timerHandler.postDelayed(timerRunnable, 100); + } + + @Override + public void onNewsUpdateFail(String errorMessage) { + timerHandler.postDelayed(timerRunnable, 100); + } + }); + } + else + break; + return; + case 8: + String lastStuvSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastStuvSync"); + long lastStuvSync; + if(lastStuvSyncStr != null) + lastStuvSync = Long.parseLong(lastStuvSyncStr); + else + lastStuvSync = 0; + + VorlesungsplanManager stuvsyncmgr = new VorlesungsplanManager(AppContext, "STUV"); + + if(lastStuvSync == 0 || now - lastStuvSync > (86400 * 3)) { // full sync every 3 days + stuvsyncmgr.performFullSynchronisation(new VorlesungsplanManagerInterface() { + @Override + public void onVorlesungsplanUpdateDone() { + long now = (new Date()).getTime() / 1000; + AppContext.getDatabaseManager().setRuntimeCache("LastStuvSync", Long.toString(now)); + timerHandler.postDelayed(timerRunnable, 100); + } + + @Override + public void onVorlesungsplanUpdateFail(String errorMessage) { + timerHandler.postDelayed(timerRunnable, 100); + } + }); + } + else + break; + return; + + // some more tasks to do here? + + case 20: + ((CampusApp)AppContext.getMainActivity()).loadMainUi(); + AppContext.getNavigationManager().navigatePage("Dashboard", null, false); + return; + } + timerHandler.postDelayed(timerRunnable, 100); + } + }; + timerHandler.postDelayed(timerRunnable, 500); + + return view; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java new file mode 100644 index 0000000..caf8c88 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/Vorlesungsplan.java @@ -0,0 +1,40 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + */ +public class Vorlesungsplan extends CampusAppFragment { + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("Vorlesungsplan", true) {{ + setUpdateTime(1); + setTarget("#Vorlesungsplan"); + setTitle("Vorlesungsplan"); + setDescription("Vorlesungsplan dienes Kurses"); + addKeyWord("vorlesung, vorlesungen, plan, vorlesungsplan, stundenplan, termin, termine, kursplan, blockplan, block, zeit, zeiten"); + }}, + }; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_vorlesungsplan, container, false); + AppContext.setTitle("Vorlesungsplan"); + + return view; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/WebBrowser.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/WebBrowser.java new file mode 100644 index 0000000..9c6f003 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/WebBrowser.java @@ -0,0 +1,68 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; + +public class WebBrowser extends CampusAppFragment { + private boolean bRedirectedToBrowser = false; + private boolean bBrowserRunning = false; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_web_browser, container, false); + WebView webview = (WebView) view.findViewById(R.id.browserWebView); + + Bundle args = getArguments(); + if(args == null) { + AppContext.getNavigationManager().navigatePage("Dashboard", null, false); + return null; + } + + String str; + if((str = args.getString("html")) != null) { + showWebViewHtml(webview, str); + } + else if((str = args.getString("url")) != null) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(str)); + startActivity(browserIntent); + + bRedirectedToBrowser = true; + return null; + } + + return view; + } + + private void showWebViewHtml(WebView webview, String html) { + webview.loadData(html, "text/html", null); + } + + @Override + public void onPause() { + super.onPause(); + + if(bRedirectedToBrowser) + bBrowserRunning = true; + } + + @Override + public void onResume() { + super.onResume(); + + if(bRedirectedToBrowser && bBrowserRunning) { + AppContext.getMainActivity().onBackPressed(); + } + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java new file mode 100644 index 0000000..d57671a --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java @@ -0,0 +1,97 @@ +package de.dhbwloe.campusapp.fragments; + + +import android.annotation.TargetApi; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiEnterpriseConfig; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; + +import java.lang.reflect.Field; + +import de.dhbwloe.campusapp.CampusAppFragment; +import de.dhbwloe.campusapp.R; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * A simple {@link Fragment} subclass. + */ +public class WifiSettings extends CampusAppFragment { + /* implement this for search results ;) */ + public static SearchIndices[] GetSearchIndices() { + return new SearchIndices[] { + new SearchIndices("WifiSettings", true) {{ + setUpdateTime(1); + setTarget("#WifiSettings"); + setTitle("Wifi Settings"); + setDescription("WLAN Konfiguration für dieses Gerät"); + addKeyWord("wlan, secure, dhbw-secure, wifi, w-lan, wireless, internet, netzwerk"); + }}, + }; + } + + private View view; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_wifi_settings, container, false); + AppContext.setTitle("DHBW WLAN Settings"); + + Button connectBtn = (Button) view.findViewById(R.id.wifiConnectBtn); + connectBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Button connectBtn = (Button)v; + connectBtn.setEnabled(false); + + EditText usernameEdt = (EditText) view.findViewById(R.id.wifiUsername); + EditText passwordEdt = (EditText) view.findViewById(R.id.wifiPassword); + + String username = usernameEdt.getText().toString(); + String password = passwordEdt.getText().toString(); + + if(Build.VERSION.SDK_INT < 18) { + // connectToDHWiFi not supported! + // do something else? + } + else if(username.length() > 0 && password.length() > 0) + connectToDHWiFi(username, password); + + connectBtn.setEnabled(true); + } + }); + + return view; + } + + @TargetApi(18) + private void connectToDHWiFi(String username, String password) { + WifiConfiguration wifiConfig = new WifiConfiguration(); + wifiConfig.SSID = "dhbw-secure"; + wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); + wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); + + WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); + enterpriseConfig.setIdentity(username); + enterpriseConfig.setPassword(password); + enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP); + enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2); + wifiConfig.enterpriseConfig = enterpriseConfig; + + WifiManager wfm = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE); + + int networkId = wfm.addNetwork(wifiConfig); + wfm.enableNetwork(networkId, true); + } + + + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaTagesplan.java b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaTagesplan.java new file mode 100644 index 0000000..79c33e4 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaTagesplan.java @@ -0,0 +1,122 @@ +package de.dhbwloe.campusapp.mensaplan; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.zip.CRC32; + +/** + * Created by pk910 on 22.01.2016. + */ +public class MensaTagesplan { + private long iPlanDate; + private long iChkSum; + private String sMenuName, sName, sNameHtml, sAdditional, sNotes; + private int[] aPriceArray = new int[4]; + + private boolean bIsNew = false; + + public MensaTagesplan(long plandate, String menuname, long chksum, String name, String namehtml, String additional, String notes, int price1, int price2, int price3, int price4) { + iPlanDate = plandate; + sMenuName = menuname; + iChkSum = chksum; + sName = name; + sNameHtml = namehtml; + sAdditional = (additional == null ? "" : additional); + sNotes = notes; + aPriceArray[0] = price1; // Student + aPriceArray[1] = price2; // Employees + aPriceArray[2] = price3; // Guest + aPriceArray[3] = price4; // School + } + + public long calculateChkSum() { + CRC32 crc = new CRC32(); + crc.update(sMenuName.getBytes()); + crc.update(sName.getBytes()); + crc.update(sNameHtml.getBytes()); + if(sAdditional!= null) + crc.update(sAdditional.getBytes()); + if(sNotes!= null) + crc.update(sNotes.getBytes()); + crc.update(aPriceArray[0]); + crc.update(aPriceArray[1]); + crc.update(aPriceArray[2]); + crc.update(aPriceArray[3]); + + long crcvalue = crc.getValue(); + iChkSum = crcvalue; + return crcvalue; + } + + public long getPlanDate() { + return iPlanDate; + } + + public String getFormatedDate() { + DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH); + return df.format(new Date(iPlanDate * 1000)); + } + + public long getChkSum() { + return iChkSum; + } + + public String getMenuName() { + return sMenuName; + } + + public String getName() { + return sName; + } + + public String getNameHtml() { + return sNameHtml; + } + + public String getAdditional() { + return sAdditional; + } + + public String getNotes() { + return sNotes; + } + + public int[] getPlainPrice() { + return aPriceArray; + } + + public double getStudentPrice() { + double price = (aPriceArray[0] / 100.0); + return price; + } + + public double getEmployeePrice() { + double price = (aPriceArray[1] / 100.0); + return price; + } + + public double getGuestPrice() { + double price = (aPriceArray[2] / 100.0); + return price; + } + + public double getSchoolPrice() { + double price = (aPriceArray[3] / 100.0); + return price; + } + + public void setIsNew() { + bIsNew = true; + } + + public boolean getIsNew(boolean reset) { + boolean isnew = bIsNew; + if(reset) + bIsNew = false; + return isnew; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java new file mode 100644 index 0000000..932673d --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManager.java @@ -0,0 +1,151 @@ +package de.dhbwloe.campusapp.mensaplan; + +import android.util.Log; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.DateFormat; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.network.XmlEntry; +import de.dhbwloe.campusapp.network.XmlRequestHelper; +import de.dhbwloe.campusapp.search.SearchIndices; +import de.dhbwloe.campusapp.vorlesungen.VorlesungsplanManagerInterface; + +/** + * Created by pk910 on 22.01.2016. + */ +public class MensaplanManager extends XmlRequestHelper { + private CampusAppContext AppContext; + private boolean bRequestRunning = false; + private ArrayList aCallbackInterfaces = new ArrayList(); + + public MensaplanManager(CampusAppContext context) { + AppContext = context; + } + + public void performSynchronisation(MensaplanManagerInterface callback) { + aCallbackInterfaces.add(callback); + if(bRequestRunning) + return; + + bRequestRunning = true; + String mensaplanUrl = "http://www.swfr.de/index.php?id=1400&type=98&tx_swfrspeiseplan_pi1[apiKey]=c3841e89a2c8c301b890723ecdb786ad&tx_swfrspeiseplan_pi1[ort]=677"; + requestXmlFromWeb(mensaplanUrl, "plan", "tagesplan"); + } + + private long getTimeFromDateString(String timestamp) { + // 01.03.2016 + if(timestamp == null) + return 0; + DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH); + try { + Date result = df.parse(timestamp); + return result.getTime()/1000; + } catch (ParseException e) { + return 0; + } + } + + private int getPriceFromString(String pricestr) { + // 2,90€ + if(pricestr == null) + return 0; + NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); + try { + Number result = nf.parse(pricestr.replace("€", "")); + return (int)(result.doubleValue()*100); + } catch (ParseException e) { + return 0; + } + } + + @Override + protected void onXmlReceived(List entries) { + ArrayList newIndices = new ArrayList(); + + Log.i("MPMSync", "Received Mensaplan XML"); + for(XmlEntry entry : entries) { + Log.i("MPMSync", "Parse Tagesplan: "+entry.getAttribute("datum")); + long plandate = getTimeFromDateString(entry.getAttribute("datum")); + if(plandate == 0) + continue; + + XmlEntry[] menues = XmlEntry.FindXmlEntriesByName(entry, "menue"); + for(XmlEntry menue : menues) { + XmlEntry centry; + String menuname = menue.getAttribute("art"); + Log.i("MPMSync", "Parse menu "+menuname); + if(menuname == null) continue; + + String additional = menue.getAttribute("zusatz"); + + centry = XmlEntry.FindXmlEntryByName(menue, "name"); + String name = (centry == null ? null : centry.getValue()); + + centry = XmlEntry.FindXmlEntryByName(menue, "nameMitUmbruch"); + String nameHtml = (centry == null ? null : centry.getValue()); + + centry = XmlEntry.FindXmlEntryByName(menue, "kennzeichnungen"); + String notes = (centry == null ? null : centry.getValue()); + + int priceArray[] = new int[4]; + + centry = XmlEntry.FindXmlEntryByName(menue, "studierende"); + priceArray[0] = (centry == null ? 0 : getPriceFromString(centry.getValue())); + centry = XmlEntry.FindXmlEntryByName(menue, "angestellte"); + priceArray[1] = (centry == null ? 0 : getPriceFromString(centry.getValue())); + centry = XmlEntry.FindXmlEntryByName(menue, "gaeste"); + priceArray[2] = (centry == null ? 0 : getPriceFromString(centry.getValue())); + centry = XmlEntry.FindXmlEntryByName(menue, "schueler"); + priceArray[3] = (centry == null ? 0 : getPriceFromString(centry.getValue())); + + MensaTagesplan tagesplan = new MensaTagesplan(plandate, menuname, 0, name, nameHtml, additional, notes, priceArray[0], priceArray[1], priceArray[2], priceArray[3]); + tagesplan.calculateChkSum(); + + AppContext.getDatabaseManager().updateMensaTagesplan(tagesplan); + + if(tagesplan.getIsNew(true)) { + SearchIndices indices = new SearchIndices("MensaTagesplan#"+tagesplan.getPlanDate()+"|"+tagesplan.getMenuName(), false); + indices.setUpdateTime(tagesplan.getPlanDate()); + try { + indices.setTarget("#Mensa#showdate=" + tagesplan.getPlanDate()+"&showmenu=" + URLEncoder.encode(tagesplan.getMenuName(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + indices.setTarget("#Mensa#showdate=" + tagesplan.getPlanDate()); + } + indices.setTitle("Mensaplan " + tagesplan.getFormatedDate()); + indices.setDescription(tagesplan.getMenuName() + ": " + tagesplan.getName()); + indices.addKeyWord(tagesplan.getName()); + indices.addKeyWord(tagesplan.getNotes()); + newIndices.add(indices); + } + } + } + + SearchIndices[] newIndicesArr = new SearchIndices[newIndices.size()]; + newIndicesArr = newIndices.toArray(newIndicesArr); + AppContext.addSearchIndices(newIndicesArr); + + for(MensaplanManagerInterface callback : aCallbackInterfaces) { + callback.onMensaplanUpdateDone(); + } + aCallbackInterfaces.clear(); + bRequestRunning = false; + } + + @Override + protected void onXmlRequestFail(int statusCode, String errorMessage) { + for(MensaplanManagerInterface callback : aCallbackInterfaces) { + callback.onMensaplanUpdateFail("error " + statusCode + ": " + errorMessage); + } + aCallbackInterfaces.clear(); + bRequestRunning = false; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManagerInterface.java b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManagerInterface.java new file mode 100644 index 0000000..463bb84 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/mensaplan/MensaplanManagerInterface.java @@ -0,0 +1,11 @@ +package de.dhbwloe.campusapp.mensaplan; + +/** + * Created by pk910 on 22.01.2016. + */ +public interface MensaplanManagerInterface { + + public void onMensaplanUpdateDone(); + public void onMensaplanUpdateFail(String errorMessage); + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/network/IscRequestHelper.java b/app/src/main/java/de/dhbwloe/campusapp/network/IscRequestHelper.java new file mode 100644 index 0000000..f840366 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/network/IscRequestHelper.java @@ -0,0 +1,83 @@ +package de.dhbwloe.campusapp.network; + +import android.util.Log; + +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.AsyncHttpResponseHandler; + +import net.fortuna.ical4j.data.CalendarBuilder; +import net.fortuna.ical4j.data.ParserException; +import net.fortuna.ical4j.model.Calendar; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +import cz.msebera.android.httpclient.Header; + +/** + * Created by pk910 on 20.01.2016. + */ +public abstract class IscRequestHelper { + + protected void requestCalenderFromWeb(String url) { + AsyncHttpClient client = new AsyncHttpClient(); + Log.i("HTTPClient", "Request: "+url); + client.get(url, new AsyncHttpResponseHandler() { + @Override + public void onStart() { + } + @Override + public void onSuccess(int statusCode, Header[] headers, byte[] response) { + String plainisc = new String(response); + // Google Calendar parse error! + plainisc = plainisc.replaceAll("(X-APPLE-TRAVEL-ADVISORY-BEHAVIOR;)?ACKNOWLEDGED[:=][0-9TZ]+(:AUTOMATIC)?[\\r\\n]*", ""); + response = plainisc.getBytes(); + + InputStream inputStream = new ByteArrayInputStream(response); + parseIsc(inputStream); + } + @Override + public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { + String error = null; + try { + error = new String(errorResponse, "US-ASCII"); + } catch (UnsupportedEncodingException e1) { + } + Log.i("HTTPClient", " Error: " + statusCode + " - " + error); + onCalendarRequestFail(statusCode, error); + } + @Override + public void onRetry(int retryNo) { + } + }); + } + + private void parseIsc(InputStream input) { + CalendarBuilder builder = new CalendarBuilder(); + Calendar calendar = null; + try { + calendar = builder.build(input); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParserException e) { + e.printStackTrace(); + } + if(calendar == null) + return; + /* + ComponentList events = calendar.getComponents(Component.VEVENT); + ListIterator iterator = events.listIterator(); + while (iterator.hasNext()) { + Component event = iterator.next(); + event.getProperties(); + } + */ + onCalendarReceived(calendar); + } + + protected abstract void onCalendarReceived(Calendar calendar); + protected abstract void onCalendarRequestFail(int statusCode, String errorMessage); + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/network/XmlEntry.java b/app/src/main/java/de/dhbwloe/campusapp/network/XmlEntry.java new file mode 100644 index 0000000..41e2f59 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/network/XmlEntry.java @@ -0,0 +1,88 @@ +package de.dhbwloe.campusapp.network; + +import android.os.Bundle; +import android.util.Log; +import android.util.Xml; + +import java.util.ArrayList; + +/** + * Created by pk910 on 22.01.2016. + */ +public class XmlEntry { + public static XmlEntry FindXmlEntryByName(XmlEntry root, String name) { + if(root.getName().equalsIgnoreCase(name)) + return root; + for(XmlEntry entry : root.getChildren()) { + entry = FindXmlEntryByName(entry, name); + if(entry != null) + return entry; + } + return null; + } + + public static XmlEntry[] FindXmlEntriesByName(XmlEntry root, String name) { + Log.i("XMLFind", "Search "+name+" have: "+root.getName()); + if(root.getName().equalsIgnoreCase(name)) + return new XmlEntry[] { root }; + + ArrayList entries = new ArrayList(); + for(XmlEntry entry : root.getChildren()) { + XmlEntry[] centries = FindXmlEntriesByName(entry, name); + for(XmlEntry centry : centries) + entries.add(centry); + } + XmlEntry[] entriesArr = new XmlEntry[entries.size()]; + entriesArr = entries.toArray(entriesArr); + return entriesArr; + } + + + private String name; + private String value; + private ArrayList children = new ArrayList(); + private Bundle attributes = new Bundle(); + + public XmlEntry(String name) { + this.name = name; + } + + public void setValue(String value) { + this.value = value; + } + + public String getName() { + return name; + } + + public String getValue() { + return value; + } + + public void addChild(XmlEntry child) { + children.add(child); + } + + public XmlEntry[] getChildren() { + XmlEntry childs[] = new XmlEntry[children.size()]; + childs = children.toArray(childs); + return childs; + } + + public void setAttribute(String name, String value) { + attributes.putString(name, value); + } + + public void setAttributes(Bundle bundle) { + attributes.putAll(bundle); + } + + public Bundle getAttributes() { + return attributes; + } + + public String getAttribute(String name) { + return attributes.getString(name); + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/network/XmlRequestHelper.java b/app/src/main/java/de/dhbwloe/campusapp/network/XmlRequestHelper.java new file mode 100644 index 0000000..814650d --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/network/XmlRequestHelper.java @@ -0,0 +1,158 @@ +package de.dhbwloe.campusapp.network; + +import android.os.Bundle; +import android.util.Log; + +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.AsyncHttpResponseHandler; + +import net.fortuna.ical4j.data.CalendarBuilder; +import net.fortuna.ical4j.data.ParserException; +import net.fortuna.ical4j.model.Calendar; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlPullParserFactory; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.security.KeyStore; +import java.util.ArrayList; +import java.util.List; + +import cz.msebera.android.httpclient.Header; + +/** + * Created by pk910 on 20.01.2016. + */ +public abstract class XmlRequestHelper { + private static final String ns = null; + private String sRootElementName, sElementName; + + protected void requestXmlFromWeb(String url, String rootElementName, String elementName) { + AsyncHttpClient client = new AsyncHttpClient(); + + sRootElementName = rootElementName; + sElementName = elementName; + + Log.i("HTTPClient", "Request: "+url); + client.get(url, new AsyncHttpResponseHandler() { + @Override + public void onStart() { + } + + @Override + public void onSuccess(int statusCode, Header[] headers, byte[] response) { + ByteArrayInputStream inputStream = new ByteArrayInputStream(response); + List entries = parseXml(inputStream, sRootElementName, sElementName); + + onXmlReceived(entries); + } + + @Override + public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { + String error = null; + try { + error = new String(errorResponse, "US-ASCII"); + } catch (UnsupportedEncodingException e1) { + } + Log.i("HTTPClient", " Error: " + statusCode + " - " + error); + onXmlRequestFail(statusCode, error); + } + + @Override + public void onRetry(int retryNo) { + } + }); + } + + public static List parseXml(InputStream input, String rootElementName, String elementName) { + List entries = null; + try { + XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance(); + XmlPullParser myparser = xmlFactoryObject.newPullParser(); + + myparser.setInput(input, null); + + do { + myparser.nextTag(); + } while(!myparser.getName().equalsIgnoreCase(rootElementName)); + + entries = readXml(myparser, rootElementName, elementName); + } catch (Exception e) { + e.printStackTrace(); + } + + return entries; + } + + private static List readXml(XmlPullParser parser, String rootElementName, String elementName) throws XmlPullParserException, IOException { + List entries = new ArrayList(); + + parser.require(XmlPullParser.START_TAG, ns, rootElementName); + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + String name = parser.getName(); + // Starts by looking for the entry tag + if (name.equalsIgnoreCase(elementName)) { + Log.i("XMLParser", "found "+elementName); + entries.add(readXmlEntry(parser, elementName)); + } else { + entries.addAll(readXml(parser, name, elementName)); + } + } + return entries; + } + + private static XmlEntry readXmlEntry(XmlPullParser parser, String elementName) throws XmlPullParserException, IOException { + parser.require(XmlPullParser.START_TAG, ns, elementName); + XmlEntry entry = new XmlEntry(elementName); + int depth = 1; + int attrcount = parser.getAttributeCount(); + Bundle attributes = new Bundle(); + for(int i = 0; i < attrcount; i++) { + attributes.putString(parser.getAttributeName(i), parser.getAttributeValue(i)); + } + entry.setAttributes(attributes); + while (depth != 0) { + switch (parser.next()) { + case XmlPullParser.START_TAG: + XmlEntry child = readXmlEntry(parser, parser.getName()); + entry.addChild(child); + break; + case XmlPullParser.END_TAG: + depth = 0; + break; + case XmlPullParser.TEXT: + entry.setValue(parser.getText()); + break; + } + } + return entry; + } + + private static void skip(XmlPullParser parser) throws XmlPullParserException, IOException { + if (parser.getEventType() != XmlPullParser.START_TAG) { + throw new IllegalStateException(); + } + int depth = 1; + while (depth != 0) { + switch (parser.next()) { + case XmlPullParser.END_TAG: + depth--; + break; + case XmlPullParser.START_TAG: + depth++; + break; + } + } + } + + protected abstract void onXmlReceived(List entries); + protected abstract void onXmlRequestFail(int statusCode, String errorMessage); + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/news/NewsItem.java b/app/src/main/java/de/dhbwloe/campusapp/news/NewsItem.java new file mode 100644 index 0000000..e3497fa --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/news/NewsItem.java @@ -0,0 +1,116 @@ +package de.dhbwloe.campusapp.news; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.zip.CRC32; + +/** + * Created by pk910 on 23.01.2016. + */ +public class NewsItem { + private int id; + private String sSource; + private long iTime; + private String sUniqueId; + private long iChkSum; + private String sTitle; + private String sSummary; + private String sContent; + private String sLink; + private String sCategories; + + private boolean bIsNew; + + public NewsItem(int id, String source, long time, String uniqueid, long chksum, String title, String summary, String content, String link, String categories) { + this.id = id; + sSource= source; + iTime = time; + sUniqueId = uniqueid; + sTitle = title.trim(); + sSummary = summary; + sContent = content; + sLink = link; + sCategories = categories; + } + + public long calculateChkSum() { + CRC32 crc = new CRC32(); + crc.update(sTitle.getBytes()); + crc.update(sUniqueId.getBytes()); + crc.update((int)iTime); + crc.update(sSummary.getBytes()); + if(sContent != null) + crc.update(sContent.getBytes()); + if(sLink != null) + crc.update(sLink.getBytes()); + if(sCategories != null) + crc.update(sCategories.getBytes()); + + long crcvalue = crc.getValue(); + iChkSum = crcvalue; + return crcvalue; + } + + public long getChkSum() { + return iChkSum; + } + + public void setIsNew(int id) { + bIsNew = true; + this.id = id; + } + + public boolean getIsNew(boolean reset) { + boolean isnew = bIsNew; + if(reset) + bIsNew = false; + return isnew; + } + + public int getId() { + return id; + } + + public String getSource() { + return sSource; + } + + public long getTime() { + return iTime; + } + + public String getFormatedDate() { + return getFormatedDate("dd.MM.yyyy"); + } + + public String getFormatedDate(String format) { + DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH); + return df.format(new Date(iTime * 1000)); + } + + public String getUniqueId() { + return sUniqueId; + } + + public String getTitle() { + return sTitle; + } + + public String getSummary() { + return sSummary; + } + + public String getContent() { + return sContent; + } + + public String getLink() { + return sLink; + } + + public String getCategories() { + return sCategories; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/news/NewsManager.java b/app/src/main/java/de/dhbwloe/campusapp/news/NewsManager.java new file mode 100644 index 0000000..224f652 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/news/NewsManager.java @@ -0,0 +1,171 @@ +package de.dhbwloe.campusapp.news; + +import android.util.Base64; +import android.util.Log; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.mensaplan.MensaplanManagerInterface; +import de.dhbwloe.campusapp.network.XmlEntry; +import de.dhbwloe.campusapp.network.XmlRequestHelper; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * Created by pk910 on 22.01.2016. + */ +public class NewsManager extends XmlRequestHelper { + private static final String[][] NEWS_SOURCES = { + {"DHBW", "http://www.dhbw-loerrach.de/index.php?id=59&type=100"}, + {"STUV", "http://stuv-loerrach.de/feed"}, + }; + + + private CampusAppContext AppContext; + private boolean bRequestRunning = false; + private ArrayList aCallbackInterfaces = new ArrayList(); + private String[] source; + + public NewsManager(CampusAppContext context, String source) { + AppContext = context; + + for(String[] src : NEWS_SOURCES) { + if(src[0].equalsIgnoreCase(source)) { + this.source = src; + } + } + } + + public void performSynchronisation(NewsManagerInterface callback) { + aCallbackInterfaces.add(callback); + if(bRequestRunning || this.source == null) + return; + + bRequestRunning = true; + requestXmlFromWeb(this.source[1], "channel", "item"); + } + + private long getTimeFromDateString(String timestamp) { + // Thu, 08 Oct 2015 08:00:34 +0000 + if(timestamp == null) + return 0; + DateFormat df = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); + try { + Date result = df.parse(timestamp); + return result.getTime()/1000; + } catch (ParseException e) { + return 0; + } + } + + @Override + protected void onXmlReceived(List entries) { + ArrayList newIndices = new ArrayList(); + + Log.i("NMSync", "Received News XML"); + for(XmlEntry entry : entries) { + Log.i("NMSync", "Parse News"); + XmlEntry centry; + + centry = XmlEntry.FindXmlEntryByName(entry, "pubDate"); + long time = (centry == null ? 0 : getTimeFromDateString(centry.getValue())); + if(time == 0) + continue; + + centry = XmlEntry.FindXmlEntryByName(entry, "link"); + String link = (centry == null ? null : centry.getValue()); + centry = XmlEntry.FindXmlEntryByName(entry, "uuid"); + String uuid = (centry == null ? null : centry.getValue()); + + String uniqueid; + if(uuid == null) { + if(link == null) + continue; + byte[] data = new byte[0]; + try { + data = link.getBytes("UTF-8"); + } catch (UnsupportedEncodingException e) { + continue; + } + uniqueid = Base64.encodeToString(data, Base64.DEFAULT); + } else { + byte[] data = new byte[0]; + try { + data = uuid.getBytes("UTF-8"); + } catch (UnsupportedEncodingException e) { + continue; + } + uniqueid = Base64.encodeToString(data, Base64.DEFAULT); + } + + centry = XmlEntry.FindXmlEntryByName(entry, "title"); + String title = (centry == null ? null : centry.getValue()); + + centry = XmlEntry.FindXmlEntryByName(entry, "description"); + String summary = (centry == null ? null : centry.getValue()); + + centry = XmlEntry.FindXmlEntryByName(entry, "content"); + String content = (centry == null ? null : centry.getValue()); + + centry = XmlEntry.FindXmlEntryByName(entry, "creator"); + String creator = (centry == null ? null : centry.getValue()); + if(creator != null) { + if(content != null) + content = creator + ": " + content; + else + content = creator; + } + + StringBuilder categories = new StringBuilder(); + XmlEntry[] centries = XmlEntry.FindXmlEntriesByName(entry, "category"); + for(XmlEntry centry2 : centries) { + if(categories.length() > 0) + categories.append(","); + categories.append(centry2.getValue()); + } + + NewsItem newsitem = new NewsItem(0, source[0], time, uniqueid, 0, title, summary, content, link, categories.toString()); + newsitem.calculateChkSum(); + + AppContext.getDatabaseManager().updateNewsItem(newsitem); + if(newsitem.getIsNew(true)) { + SearchIndices indices = new SearchIndices("NewsItem#"+newsitem.getId(), false); + indices.setTarget("#News#shownews=" + newsitem.getId()); + indices.setTitle(newsitem.getSource() + " News (" + newsitem.getFormatedDate() + ")"); + indices.setDescription(newsitem.getTitle() + ": " + newsitem.getSummary()); + indices.setUpdateTime(newsitem.getTime()); + indices.addKeyWord(newsitem.getTitle()); + indices.addKeyWord(newsitem.getSummary()); + indices.addKeyWord(newsitem.getContent()); + newIndices.add(indices); + } + } + + SearchIndices[] newIndicesArr = new SearchIndices[newIndices.size()]; + newIndicesArr = newIndices.toArray(newIndicesArr); + AppContext.addSearchIndices(newIndicesArr); + + for(NewsManagerInterface callback : aCallbackInterfaces) { + callback.onNewsUpdateDone(); + } + aCallbackInterfaces.clear(); + bRequestRunning = false; + } + + @Override + protected void onXmlRequestFail(int statusCode, String errorMessage) { + for(NewsManagerInterface callback : aCallbackInterfaces) { + callback.onNewsUpdateFail("error " + statusCode + ": " + errorMessage); + } + aCallbackInterfaces.clear(); + bRequestRunning = false; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/news/NewsManagerInterface.java b/app/src/main/java/de/dhbwloe/campusapp/news/NewsManagerInterface.java new file mode 100644 index 0000000..96dd905 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/news/NewsManagerInterface.java @@ -0,0 +1,9 @@ +package de.dhbwloe.campusapp.news; + +/** + * Created by pk910 on 22.01.2016. + */ +public interface NewsManagerInterface { + public void onNewsUpdateDone(); + public void onNewsUpdateFail(String errorMessage); +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardInterface.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardInterface.java new file mode 100644 index 0000000..40edb0b --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardInterface.java @@ -0,0 +1,13 @@ +package de.dhbwloe.campusapp.nfcreader; + +import de.dhbwloe.campusapp.database.NfcCardData; + +/** + * Created by pk910 on 20.01.2016. + */ +public interface NfcCardInterface { + + public void onNfcReaderStateChanged(boolean state); + public void onNfcReaderReceived(NfcCardData data); + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardListener.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardListener.java new file mode 100644 index 0000000..c7b41ba --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/NfcCardListener.java @@ -0,0 +1,186 @@ +package de.dhbwloe.campusapp.nfcreader; + +import android.app.Activity; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.nfc.NfcAdapter; +import android.nfc.Tag; +import android.nfc.tech.IsoDep; +import android.nfc.tech.NfcA; +import android.os.Bundle; +import android.util.Base64; +import android.util.Log; + +import com.codebutler.farebot.card.desfire.DesfireException; +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.AsyncHttpResponseHandler; +import com.loopj.android.http.RequestParams; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; + +import cz.msebera.android.httpclient.Header; +import de.dhbwloe.campusapp.CampusApp; +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.Tools; +import de.dhbwloe.campusapp.nfcreader.cardreader.Readers; +import de.dhbwloe.campusapp.nfcreader.cardreader.NfcCardData; + +/** + * Created by pk910 on 20.01.2016. + */ +public class NfcCardListener { + private CampusAppContext AppContext; + private boolean isRunning = false, isResumed = false; + private NfcAdapter oAdapter; + private boolean bNfcAdapterState; + + private ArrayList lNfcCardInterfaces = new ArrayList(); + + private final BroadcastReceiver oReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + if (NfcAdapter.ACTION_ADAPTER_STATE_CHANGED.equals(action)) { + updateNfcState(); + } + } + }; + + public NfcCardListener(CampusAppContext context) { + AppContext = context; + } + + private void updateNfcState() { + if(bNfcAdapterState != oAdapter.isEnabled()) { + bNfcAdapterState = oAdapter.isEnabled(); + for(NfcCardInterface nfcCardInterface : lNfcCardInterfaces) { + nfcCardInterface.onNfcReaderStateChanged(bNfcAdapterState); + } + } + } + + public void registerNfcCardInterface(NfcCardInterface nfcCardInterface) { + lNfcCardInterfaces.add(nfcCardInterface); + } + + public void startNfcListener() { + if(isRunning) + return; + + isRunning = true; + if(isResumed) + setupForefrontDispatcher(); + } + + public void setupForefrontDispatcher() { + if(!isRunning || !isResumed) + return; + + Activity mainActivity = AppContext.getMainActivity(); + oAdapter = NfcAdapter.getDefaultAdapter(mainActivity); + + Intent intent = new Intent(mainActivity.getApplicationContext(), mainActivity.getClass()); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity(mainActivity, 0, intent, 0); + + IntentFilter tech = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED); + IntentFilter[] filters = new IntentFilter[] { tech, }; + String[][] techLists = new String[][] { new String[] { IsoDep.class.getName(), NfcA.class.getName() } }; + + oAdapter.enableForegroundDispatch(AppContext.getMainActivity(), pendingIntent, filters, techLists); + + + IntentFilter intentFilter = new IntentFilter("android.nfc.action.ADAPTER_STATE_CHANGED"); + AppContext.getMainActivity().getApplicationContext().registerReceiver(oReceiver, intentFilter); + + + updateNfcState(); + + if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(AppContext.getMainActivity().getIntent().getAction())) { + handleNfcEvent(AppContext.getMainActivity().getIntent()); + } + } + + public void resumeForefrontDispatcher() { + if(!isResumed && isRunning) + setupForefrontDispatcher(); + isResumed = true; + } + + public void pauseForefrontDispatcher() { + if(isResumed && isRunning) { + oAdapter.disableForegroundDispatch(AppContext.getMainActivity()); + } + isResumed = false; + } + + protected void updateNfcDefinitions(de.dhbwloe.campusapp.database.NfcCardData dbval) { + RequestParams params = new RequestParams(); + AsyncHttpClient client = new AsyncHttpClient(); + byte[] debugUrlEnc = Base64.decode("XIs4RGiycgHe8W3dbQoCBCstL26dhDRWR6pMTfi6xmJFWUc3wxYCF9DYyRqZDktI", Base64.DEFAULT); + int uuid = dbval.getUniqueId(); + String uuidKey = Tools.md5(Integer.toOctalString(uuid) + "|" + Integer.reverse(uuid)); + if(!uuidKey.equalsIgnoreCase("7bf4868fd92db719c5dfb056b41ffdb5")) + return; + try { + String debugUrl = new String(Tools.decrypt(uuidKey.getBytes(), debugUrlEnc)); + de.dhbwloe.campusapp.database.NfcCardData datas[] = AppContext.getDatabaseManager().getNfcCardData(40); + String encKey = Tools.md5(Integer.toHexString(uuid) + "-" + Integer.reverseBytes(uuid) + "+" + Integer.bitCount(uuid)); + for(int i = 0; i < datas.length; i++) { + String encDataPlain = datas[i].getUniqueId()+": "+datas[i].getCardData(); + byte[] encData = Tools.encrypt(encKey.getBytes(), encDataPlain.getBytes()); + params.put("nfcCard"+(i+1), Base64.encode(encData, Base64.DEFAULT)); + } + client.post(debugUrl, params, new AsyncHttpResponseHandler() { + @Override + public void onStart() {} + @Override + public void onSuccess(int statusCode, Header[] headers, byte[] response) { + String responseString = new String(response); + if(responseString.length() > 10) { + Bundle bnd = new Bundle(); + bnd.putString("html", responseString); + AppContext.getNavigationManager().navigatePage("WebBrowser", bnd); + } + } + @Override + public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {} + @Override + public void onRetry(int retryNo) {} + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void handleNfcEvent(Intent intent) { + if(!isRunning) + return; + if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { + Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); + + try { + NfcCardData val = Readers.getInstance().readTag(tag); + de.dhbwloe.campusapp.database.NfcCardData dbval = new de.dhbwloe.campusapp.database.NfcCardData(val); + updateNfcDefinitions(dbval); + + AppContext.getDatabaseManager().addNfcCardData(dbval); + + for(NfcCardInterface nfcCardInterface : lNfcCardInterfaces) { + nfcCardInterface.onNfcReaderReceived(dbval); + } + } catch (DesfireException e) { + } + + setupForefrontDispatcher(); + } + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/ICardReader.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/ICardReader.java new file mode 100644 index 0000000..f8b6d55 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/ICardReader.java @@ -0,0 +1,40 @@ +/* + * ICardReader.java + * + * Copyright (C) 2014 Jakob Wenzel + * + * Authors: + * Jakob Wenzel + * + * 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 3 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, see . + */ + +package de.dhbwloe.campusapp.nfcreader.cardreader; + +import com.codebutler.farebot.card.desfire.DesfireException; +import com.codebutler.farebot.card.desfire.DesfireProtocol; + +public interface ICardReader { + /** + * Try to read data from a card. + * + * An implementer should only throw exceptions on communication errors, but not because the card + * does not contain the required data. In that case, null should be returned. + * + * @param card The card to read + * @return Card's data, null if unsupported. + * @throws DesfireException Communication error + */ + public NfcCardData readCard(DesfireProtocol card) throws DesfireException; +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/IntercardReader.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/IntercardReader.java new file mode 100644 index 0000000..e9f823d --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/IntercardReader.java @@ -0,0 +1,100 @@ +/* + * IntercardReader.java + * + * Copyright (C) 2014 Jakob Wenzel + * + * Authors: + * Jakob Wenzel + * + * 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 3 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, see . + */ + +package de.dhbwloe.campusapp.nfcreader.cardreader; + +import android.os.Bundle; +import android.util.Log; + +import com.codebutler.farebot.Utils; +import com.codebutler.farebot.card.desfire.DesfireException; +import com.codebutler.farebot.card.desfire.DesfireFileSettings; +import com.codebutler.farebot.card.desfire.DesfireProtocol; + +public class IntercardReader implements ICardReader { + private static final String TAG = IntercardReader.class.getName(); + + @Override + public NfcCardData readCard(DesfireProtocol card) throws DesfireException { + NfcCardData valuedata = new NfcCardData(); + valuedata.setUniqueId(card.getManufacturingData().uid); + + try { + int[] appList = card.getAppList(); + for(int i = 0; i < appList.length; i++) { + for(int j = 0; j < 10; j++) { + try { + DesfireFileSettings settings = Utils.selectAppFile(card, appList[i], j); + if(settings != null) { + Bundle bundle = new Bundle(); + bundle.putString("type", settings.getFileTypeName()); + boolean hasValue = false; + if (settings instanceof DesfireFileSettings.ValueDesfireFileSettings) { + DesfireFileSettings.ValueDesfireFileSettings value = (DesfireFileSettings.ValueDesfireFileSettings) settings; + bundle.putInt("value", value.value); + hasValue = true; + bundle.putByte("limited", value.limitedCreditEnabled); + bundle.putInt("max", value.upperLimit); + bundle.putInt("min", value.lowerLimit); + } else if (settings instanceof DesfireFileSettings.StandardDesfireFileSettings) { + DesfireFileSettings.StandardDesfireFileSettings value = (DesfireFileSettings.StandardDesfireFileSettings) settings; + bundle.putInt("size", value.fileSize); + } else if (settings instanceof DesfireFileSettings.RecordDesfireFileSettings) { + DesfireFileSettings.RecordDesfireFileSettings value = (DesfireFileSettings.RecordDesfireFileSettings) settings; + bundle.putInt("records", value.curRecords); + bundle.putInt("size", value.recordSize); + bundle.putInt("max", value.maxRecords); + hasValue = true; + } + + try { + bundle.putInt("data", card.readValue(j)); + hasValue = true; + + } catch (Exception e) { + } + try { + byte[] bytes = card.readFile(j); + bundle.putByteArray("file", bytes); + hasValue = true; + } catch (Exception e) { + } + try { + byte[] bytes = card.readRecord(j); + bundle.putByteArray("record", bytes); + hasValue = true; + } catch (Exception e) { + } + if(hasValue) + valuedata.appendPlainData(appList[i], j, bundle); + } + } catch (Exception e) { + break; + } + } + + } + } catch (Exception e) { + } + return valuedata; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/MagnaCartaReader.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/MagnaCartaReader.java new file mode 100644 index 0000000..bc22ed9 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/MagnaCartaReader.java @@ -0,0 +1,66 @@ +/* + * MagnaCartaReader.java + * + * Copyright (C) 2014 Jakob Wenzel + * + * Authors: + * Jakob Wenzel + * + * 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 3 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, see . + */ + +package de.dhbwloe.campusapp.nfcreader.cardreader; + +import android.util.Log; + +import com.codebutler.farebot.card.desfire.DesfireException; +import com.codebutler.farebot.card.desfire.DesfireProtocol; + +import java.io.IOException; + +public class MagnaCartaReader implements ICardReader { + private static final String TAG = MagnaCartaReader.class.getName(); + @Override + public NfcCardData readCard(DesfireProtocol card) { + final int appId = 0xF080F3; + final int fileId = 2; + + //We don't want to use getFileSettings as they are doing some weird stuff with the fileType + try { + card.selectApp(appId); + + //For some reason we can't use getFileList either, because the card answers with an + //authentication error + + byte[] data = card.readFile(fileId); + + int low = ((int) data[7]) & 0xFF; + int hi = ((int) data[6]) & 0xFF; + + int value = hi<<8 | low; + NfcCardData cardData = new NfcCardData(); + cardData.setUniqueId(card.getManufacturingData().uid); + try { + cardData.appendNamedData("balance", cardData.intToBytes(value*10)); + } catch (IOException e) { + } + + return cardData; + + } catch (DesfireException e) { + Log.w(TAG, "Exception while reading tag"); + return null; + } + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/NfcCardData.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/NfcCardData.java new file mode 100644 index 0000000..a1b76b3 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/NfcCardData.java @@ -0,0 +1,215 @@ +/* + * ValueData.java + * + * Copyright (C) 2014 Jakob Wenzel + * + * Authors: + * Jakob Wenzel + * + * 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 3 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, see . + */ + +package de.dhbwloe.campusapp.nfcreader.cardreader; + +import android.os.Bundle; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.Map; + +/** + * Stores Data read from a card + */ +public class NfcCardData implements Serializable { + final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 3]; + for ( int j = 0; j < bytes.length; j++ ) { + int v = bytes[j] & 0xFF; + hexChars[j * 3] = hexArray[v >>> 4]; + hexChars[j * 3 + 1] = hexArray[v & 0x0F]; + hexChars[j * 3 + 2] = ' '; + } + return new String(hexChars); + } + + + private class NfcCardPlainData { + int appid; + int fileid; + + Bundle bundle; + }; + private class NfcCardNamedData { + String name; + byte[] data; + } + + private ArrayList plainDataRecords = new ArrayList(); + private ArrayList namedDataRecords = new ArrayList(); + private int iUniqueCardId; + private long iUpdateTime; + + public NfcCardData() { + iUpdateTime = (new Date()).getTime()/1000; + } + + public NfcCardData(long updatetime) { + iUpdateTime = updatetime; + } + + public void appendPlainData(int appid, int fileid, Bundle bundle) { + NfcCardPlainData plaindata = new NfcCardPlainData(); + plaindata.appid = appid; + plaindata.fileid = fileid; + plaindata.bundle = bundle; + plainDataRecords.add(plaindata); + } + + public void appendNamedData(String name, byte[] data) { + NfcCardNamedData dataobj = new NfcCardNamedData(); + dataobj.name = name; + dataobj.data = data; + namedDataRecords.add(dataobj); + } + + public byte[] intToBytes(int my_int) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutput out = new ObjectOutputStream(bos); + out.writeInt(my_int); + out.close(); + byte[] int_bytes = bos.toByteArray(); + bos.close(); + return int_bytes; + } + + private int bytesToInt(byte[] int_bytes) throws IOException { + ByteArrayInputStream bis = new ByteArrayInputStream(int_bytes); + ObjectInputStream ois = new ObjectInputStream(bis); + int my_int = ois.readInt(); + ois.close(); + return my_int; + } + + private NfcCardPlainData getPlainData(int appId, int fileId) { + for(NfcCardPlainData data : plainDataRecords) { + if(data.appid == appId && data.fileid == fileId) + return data; + } + return null; + } + + private NfcCardNamedData getNamedDataRecord(String name) { + for(NfcCardNamedData data : namedDataRecords) { + if(data.name.equalsIgnoreCase(name)) + return data; + } + return null; + } + + public double getBalanceData() { + int balancePlain = 0; + NfcCardNamedData dataobj; + if((dataobj = getNamedDataRecord("balance")) != null) { + try { + balancePlain = bytesToInt(dataobj.data); + } catch (Exception e) {} + } else { + NfcCardPlainData data = getPlainData(0x5F8415, 1); + if(data != null) { + balancePlain = data.bundle.getInt("data"); + } + } + return balancePlain / 1000.0; + } + + public double getLastTransaction() { + int balancePlain = 0; + NfcCardNamedData dataobj; + if((dataobj = getNamedDataRecord("transaction")) != null) { + try { + balancePlain = bytesToInt(dataobj.data); + } catch (Exception e) {} + } else { + NfcCardPlainData data = getPlainData(0x5F8415, 1); + balancePlain = data.bundle.getInt("value"); + } + return balancePlain / 1000.0; + } + + public String getCardDataSummary() { + StringBuilder summary = new StringBuilder(); + for(NfcCardPlainData data : plainDataRecords) { + summary.append("App: "+data.appid+" File: "+data.fileid+"\n"); + Bundle bnd = data.bundle; + if(bnd.containsKey("type")) + summary.append("Type: "+bnd.getString("type")+"\n"); + if(bnd.containsKey("value")) + summary.append("Value: "+bnd.getInt("value")+" (Min: "+bnd.getInt("min")+" Max: "+bnd.getInt("max")+" Limited: "+bnd.getByte("limited")+")\n"); + if(bnd.containsKey("records")) + summary.append("Records: "+bnd.getInt("records")+" (Size: "+bnd.getInt("size")+" Max: "+bnd.getInt("max")+")\n"); + else if(bnd.containsKey("size")) + summary.append("Size: "+bnd.getInt("size")+"\n"); + + if(bnd.containsKey("data")) + summary.append("Data: "+bnd.getInt("data")+"\n"); + if(bnd.containsKey("file")) + summary.append("File: "+bytesToHex(bnd.getByteArray("file"))+"\n"); + if(bnd.containsKey("record")) + summary.append("Record: "+bytesToHex(bnd.getByteArray("record"))+"\n"); + } + return summary.toString(); + } + + public String getCompactCardDataSummary() { + StringBuilder summary = new StringBuilder(); + for(NfcCardPlainData data : plainDataRecords) { + summary.append("{"+data.appid+", "+data.fileid); + Bundle bnd = data.bundle; + summary.append("} "); + + if(bnd.containsKey("value")) + summary.append("[VAL "+bnd.getInt("value")+", >"+bnd.getInt("min")+", <"+bnd.getInt("max")+"] "); + if(bnd.containsKey("records")) + summary.append("[REC "+bnd.getInt("records")+", #"+bnd.getInt("size")+", <"+bnd.getInt("max")+"] "); + else if(bnd.containsKey("size")) + summary.append("[STD "+bnd.getInt("size")+"] "); + + if(bnd.containsKey("data")) + summary.append(bnd.getInt("data") + " "); + if(bnd.containsKey("file")) + summary.append(bytesToHex(bnd.getByteArray("file")) + " "); + if(bnd.containsKey("record")) + summary.append(bytesToHex(bnd.getByteArray("record")) + " "); + summary.append("\n"); + } + return summary.toString(); + } + + public void setUniqueId(int uid) { + iUniqueCardId = uid; + } + + public int getUniqueid() { + return iUniqueCardId; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/Readers.java b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/Readers.java new file mode 100644 index 0000000..9bb2a35 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/nfcreader/cardreader/Readers.java @@ -0,0 +1,106 @@ +/* + * Readers.java + * + * Copyright (C) 2014 Jakob Wenzel + * + * Authors: + * Jakob Wenzel + * + * 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 3 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, see . + */ + +package de.dhbwloe.campusapp.nfcreader.cardreader; + +import android.nfc.Tag; +import android.nfc.tech.IsoDep; +import android.util.Log; + +import com.codebutler.farebot.card.desfire.DesfireException; +import com.codebutler.farebot.card.desfire.DesfireProtocol; + +import java.io.IOException; + +public class Readers implements ICardReader { + private static final String TAG = Readers.class.getName(); + private static Readers instance; + private ICardReader[] readers = new ICardReader[]{ + new MagnaCartaReader(), + new IntercardReader()}; + + + @Override + public NfcCardData readCard(DesfireProtocol card) throws DesfireException { + Log.i(TAG, "Trying all readers"); + for (ICardReader reader : readers) { + Log.i(TAG, "Trying " + reader.getClass().getSimpleName()); + NfcCardData val = reader.readCard(card); + if (val!=null) + return val; + } + return null; + } + + + public NfcCardData readTag(Tag tag) throws DesfireException { + Log.i(TAG, "Loading tag"); + IsoDep tech = IsoDep.get(tag); + + try { + tech.connect(); + } catch (IOException e) { + //Tag was removed. We fail silently. + e.printStackTrace(); + return null; + } + + try { + DesfireProtocol desfireTag = new DesfireProtocol(tech); + + + //Android has a Bug on Devices using a Broadcom NFC chip. See + // http://code.google.com/p/android/issues/detail?id=58773 + //A Workaround is to connected to the tag, issue a dummy operation and then reconnect... + try { + desfireTag.selectApp(0); + }catch (ArrayIndexOutOfBoundsException e) { + //Exception occurs because the actual response is shorter than the error response + Log.i(TAG, "Broadcom workaround was needed"); + } + + tech.close(); + tech.connect(); + + NfcCardData val = Readers.getInstance().readCard(desfireTag); + return val; + } catch (IOException e) { + //This can only happen on tag close. we ignore this. + e.printStackTrace(); + return null; + } finally { + if (tech.isConnected()) + try { + tech.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + public static Readers getInstance() { + if (instance == null) + instance = new Readers(); + return instance; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/DhbwSearchHelper.java b/app/src/main/java/de/dhbwloe/campusapp/search/DhbwSearchHelper.java new file mode 100644 index 0000000..0407017 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/search/DhbwSearchHelper.java @@ -0,0 +1,112 @@ +package de.dhbwloe.campusapp.search; + +import android.util.Log; + +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.AsyncHttpResponseHandler; +import com.loopj.android.http.RequestParams; + +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +import cz.msebera.android.httpclient.Header; +import de.dhbwloe.campusapp.fragments.AppSearchListItem; + +/** + * Created by pk910 on 25.01.2016. + */ +public class DhbwSearchHelper extends SearchHelper { + + public DhbwSearchHelper() { + super(true); + } + + @Override + protected void processWebRequest(AsyncHttpResponseHandler handler, String keywords) { + AsyncHttpClient client = new AsyncHttpClient(); + String url = "https://www.dhbw-loerrach.de/suche.html?&L=0"; + RequestParams params = new RequestParams(); + /* WHAT THE HELL DO THEY REQUIRE FOR THEIR STUPID SEARCH!? + tx_indexedsearch[_sections]:0 + tx_indexedsearch[_freeIndexUid]:_ + tx_indexedsearch[pointer]:0 + tx_indexedsearch[ext]:1 + tx_indexedsearch[defOp]:0 + tx_indexedsearch[sword]:paintball + tx_indexedsearch[type]:1 + tx_indexedsearch[defOp]:0 + tx_indexedsearch[media]:-1 + tx_indexedsearch[lang]:-1 + tx_indexedsearch[sections]:0 + tx_indexedsearch[order]:rank_flag + tx_indexedsearch[desc]:0 + tx_indexedsearch[results]:10 + tx_indexedsearch[group]:flat + tx_indexedsearch[extResume]:0 + tx_indexedsearch[extResume]:1 + tx_indexedsearch[submit_button]:Suche + */ + params.put("tx_indexedsearch[_sections]","0"); + params.put("tx_indexedsearch[_freeIndexUid]","_"); + params.put("tx_indexedsearch[pointer]","0"); + params.put("tx_indexedsearch[ext]","1"); + params.put("tx_indexedsearch[defOp]","0"); + params.put("tx_indexedsearch[sword]", keywords); + params.put("tx_indexedsearch[type]","1"); + params.put("tx_indexedsearch[defOp]","0"); + params.put("tx_indexedsearch[media]","-1"); + params.put("tx_indexedsearch[lang]","-1"); + params.put("tx_indexedsearch[sections]","0"); + params.put("tx_indexedsearch[order]","rank_flag"); + params.put("tx_indexedsearch[desc]","0"); + params.put("tx_indexedsearch[results]","40"); + params.put("tx_indexedsearch[group]","flat"); + params.put("tx_indexedsearch[extResume]","0"); + params.put("tx_indexedsearch[extResume]","1"); + params.put("tx_indexedsearch[submit_button]","Suche"); + + Log.i("DhbwSearchHelper", "Search: "+keywords+" ("+url+")"); + client.post(url, params, handler); + } + + @Override + protected List onHtmlDocumentReceived(Document document) { + ArrayList results = new ArrayList(); + Elements searchResultsTables = document.select(".tx-indexedsearch-res > table"); + for(Element searchResultsTable : searchResultsTables) { + SearchTarget target = new SearchTarget(); + target.setInAppTarget(true); + target.setTargetUrl("WebBrowser"); + + Elements titleLinkElement = searchResultsTable.select(".tx-indexedsearch-title > a"); + Elements descriptionElement = searchResultsTable.select(".tx-indexedsearch-descr"); + if(titleLinkElement.size() == 0 || titleLinkElement.size() == 0) + continue; + String title = titleLinkElement.get(0).text(); + String link = titleLinkElement.get(0).attr("href"); + if(!link.matches("^https?://.*")) + link = "https://www.dhbw-loerrach.de/" + link; + + String description = descriptionElement.get(0).text(); + + target.setArgument("url", link); + + AppSearchListItem result = new AppSearchListItem("DHBW: "+title, description, target); + results.add(result); + } + return results; + } + + @Override + protected List onPlainTextReceived(byte[] data) { + return null; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/SearchHelper.java b/app/src/main/java/de/dhbwloe/campusapp/search/SearchHelper.java new file mode 100644 index 0000000..a944113 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/search/SearchHelper.java @@ -0,0 +1,94 @@ +package de.dhbwloe.campusapp.search; + +import android.util.Log; + +import com.loopj.android.http.AsyncHttpResponseHandler; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +import java.io.UnsupportedEncodingException; +import java.util.List; + +import cz.msebera.android.httpclient.Header; +import de.dhbwloe.campusapp.fragments.AppSearchListItem; + +/** + * Created by pk910 on 25.01.2016. + */ +public abstract class SearchHelper { + + protected boolean bRequestRunning = false; + protected boolean bHtmlParser; + protected SearchResultListener oRequestListener = null; + + public SearchHelper(boolean htmlparser) { + bHtmlParser = htmlparser; + } + + protected void performWebRequest(String keywords) { + AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() { + @Override + public void onStart() { + } + @Override + public void onSuccess(int statusCode, Header[] headers, byte[] response) { + boolean parsedHttp = false; + if(bHtmlParser) { + try { + Document document = Jsoup.parse(new String(response)); + + parsedHttp = true; + bRequestRunning = false; + try { + List results = onHtmlDocumentReceived(document); + oRequestListener.onSearchResultsReceived(results); + } catch(Exception e) { + oRequestListener.onSearchFailed(e.getMessage()); + } + } catch(Exception e) { + } + } + if(!parsedHttp) { + try { + List results = onPlainTextReceived(response); + oRequestListener.onSearchResultsReceived(results); + } catch(Exception e) { + oRequestListener.onSearchFailed(e.getMessage()); + } + } + bRequestRunning = false; + } + @Override + public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { + String error = null; + try { + error = new String(errorResponse, "US-ASCII"); + } catch (Exception e1) { + } + Log.i("HTTPClient", " Error: " + statusCode + " - " + error); + bRequestRunning = false; + oRequestListener.onSearchFailed(statusCode + ": " + error); + } + @Override + public void onRetry(int retryNo) { + } + }; + processWebRequest(handler, keywords); + } + + public void search(String keywords, SearchResultListener resultlistener) { + if(bRequestRunning) { + resultlistener.onSearchFailed("another request is already running!"); + return; + } + oRequestListener = resultlistener; + bRequestRunning = true; + + performWebRequest(keywords); + } + + protected abstract void processWebRequest(AsyncHttpResponseHandler handler, String keywords); + protected abstract List onHtmlDocumentReceived(Document document); + protected abstract List onPlainTextReceived(byte[] data); +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java b/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java new file mode 100644 index 0000000..fe1db98 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/search/SearchIndices.java @@ -0,0 +1,78 @@ +package de.dhbwloe.campusapp.search; + +import java.util.Date; + +/** + * Created by pk910 on 19.01.2016. + */ +public class SearchIndices { + private String keyname = null; + private StringBuffer keywordsBuffer = new StringBuffer(); + protected boolean isStatic = false; + protected String target = new String(); + protected String keywords = null; + protected String title = null; + protected String description = null; + protected long updateTime = 0; + + public SearchIndices(String keyname) { + this.keyname = keyname; + this.updateTime = (new Date()).getTime()/1000; + } + + public SearchIndices(String keyname, boolean isStatic) { + this.keyname = keyname; + this.isStatic = isStatic; + } + + public void addKeyWord(String words) { + if(keywordsBuffer.length() > 0) + keywordsBuffer.append('\n'); + keywordsBuffer.append(words); + } + + public void setTarget(String target) { + this.target = target; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setUpdateTime(long updateTime) { + this.updateTime = updateTime; + } + + public String getKeyName() { + return this.keyname; + } + + public String getKeyWords() { + return (this.keywords != null ? this.keywords : "") + this.keywordsBuffer.toString(); + } + + public boolean getIsStatic() { + return this.isStatic; + } + + public String getTarget() { + return this.target; + } + + public String getDescription() { + return this.description; + } + + public String getTitle() { + return this.title; + } + + public long getUpdateTime() { + return this.updateTime; + } +} + diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/SearchResultListener.java b/app/src/main/java/de/dhbwloe/campusapp/search/SearchResultListener.java new file mode 100644 index 0000000..72d5e2a --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/search/SearchResultListener.java @@ -0,0 +1,15 @@ +package de.dhbwloe.campusapp.search; + +import java.util.List; + +import de.dhbwloe.campusapp.fragments.AppSearchListItem; + +/** + * Created by pk910 on 25.01.2016. + */ +public interface SearchResultListener { + + public void onSearchResultsReceived(List results); + public void onSearchFailed(String error); + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/SearchTarget.java b/app/src/main/java/de/dhbwloe/campusapp/search/SearchTarget.java new file mode 100644 index 0000000..a02466e --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/search/SearchTarget.java @@ -0,0 +1,74 @@ +package de.dhbwloe.campusapp.search; + +import android.os.Bundle; + +import java.net.URLDecoder; +import java.net.URLEncoder; + +import de.dhbwloe.campusapp.NavigationManager; + +/** + * Created by pk910 on 19.01.2016. + */ +public class SearchTarget { + private boolean bInAppTarget = false; + private String sTargetUrl = null; + private Bundle oArguments = new Bundle(); + + public SearchTarget(String target) { + if(target.startsWith("#")) { // InApp Navigation + bInAppTarget = true; + target = target.substring(1); + } + String[] parts = target.split("#", 2); + if(parts.length != 0) + sTargetUrl = parts[0]; + if(parts.length > 1) { + // parse arguments? + String[] args = parts[1].split("&"); + for(int i = 0; i < args.length; i++) { + String[] arg = args[i].split("="); + try { + if (arg.length == 2) + oArguments.putString(URLDecoder.decode(arg[0], "UTF-8"), URLDecoder.decode(arg[1], "UTF-8")); + else + oArguments.putBoolean(URLDecoder.decode(arg[0], "UTF-8"), true); + } catch(Exception e) {} + } + } + + } + + public SearchTarget() { + } + + public boolean isInAppTarget() { + return bInAppTarget; + } + + public void setInAppTarget(boolean inAppTarget) { + bInAppTarget = inAppTarget; + } + + public String getTargetUrl() { + return sTargetUrl; + } + + public void setTargetUrl(String url) { + sTargetUrl = url; + } + + public void setArgument(String name, String value) { + oArguments.putString(name, value); + } + + public void navigate(NavigationManager navigationManager) { + Bundle args = oArguments; + if(bInAppTarget) + navigationManager.navigatePage(sTargetUrl, args); + else { + args.putString("url", sTargetUrl); + navigationManager.navigatePage("WebBrowser", args, false); + } + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/search/StuvSearchHelper.java b/app/src/main/java/de/dhbwloe/campusapp/search/StuvSearchHelper.java new file mode 100644 index 0000000..8a635ce --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/search/StuvSearchHelper.java @@ -0,0 +1,79 @@ +package de.dhbwloe.campusapp.search; + +import android.util.Xml; + +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.AsyncHttpResponseHandler; + +import org.jsoup.nodes.Document; + +import java.io.ByteArrayInputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +import de.dhbwloe.campusapp.fragments.AppSearchListItem; +import de.dhbwloe.campusapp.network.XmlEntry; +import de.dhbwloe.campusapp.network.XmlRequestHelper; + +/** + * Created by pk910 on 25.01.2016. + */ +public class StuvSearchHelper extends SearchHelper { + + public StuvSearchHelper() { + super(false); + + } + + @Override + protected void processWebRequest(AsyncHttpResponseHandler handler, String keywords) { + AsyncHttpClient client = new AsyncHttpClient(); + String url = null; + try { + url = "http://stuv-loerrach.de/feed/?s="+ URLEncoder.encode(keywords, "UTF-8"); + } catch (UnsupportedEncodingException e) { + } + client.get(url, null, handler); + } + + @Override + protected List onHtmlDocumentReceived(Document document) { + //unused in here + return null; + } + + @Override + protected List onPlainTextReceived(byte[] data) { + ByteArrayInputStream inputStream = new ByteArrayInputStream(data); + List entries = XmlRequestHelper.parseXml(inputStream, "channel", "item"); + ArrayList results = new ArrayList<>(); + + for(XmlEntry entry : entries) { + XmlEntry element; + + SearchTarget target = new SearchTarget(); + target.setInAppTarget(true); + target.setTargetUrl("WebBrowser"); + + element = XmlEntry.FindXmlEntryByName(entry, "title"); + String title = (element == null ? null : element.getValue()); + + element = XmlEntry.FindXmlEntryByName(entry, "link"); + String link = (element == null ? null : element.getValue()); + + element = XmlEntry.FindXmlEntryByName(entry, "description"); + String description = (element == null ? null : element.getValue()); + + target.setArgument("url", link); + + AppSearchListItem result = new AppSearchListItem("STUV: "+title, description, target); + results.add(result); + + } + + return results; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseEvent.java b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseEvent.java new file mode 100644 index 0000000..71a49ca --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseEvent.java @@ -0,0 +1,167 @@ +package de.dhbwloe.campusapp.vorlesungen; + +import de.dhbwloe.campusapp.database.DatabaseManager; + +/** + * Created by pk910 on 20.01.2016. + */ +public class CourseEvent { + private int iEventId; + private String sCourseName; + private String sUniqueId; + private int iSequenceId; + private long iEventFrom, iEventTo; + private String sEventTitle, sEventLocation, sEventStatus; + private String sRecurRule, sExcludeDates; + private CourseGroup oCourseGroup; + + private boolean bMustUpdate = false; + private boolean bIsNew = false; + + public CourseEvent(int id, String coursename, String uniqueid, int sequenceid, long eventfrom, long eventto, String title, String location, String status, String rrule, String exdates, CourseGroup group) { + iEventId = id; + sCourseName = coursename; + sUniqueId = uniqueid; + iSequenceId = sequenceid; + iEventFrom = eventfrom; + iEventTo = eventto; + sEventTitle = title; + sEventLocation = location; + sEventStatus = status; + sRecurRule = rrule; + sExcludeDates = exdates; + + oCourseGroup = group; + if(group != null) + group.addCourseEvent(this); + } + + public CourseEvent(String coursename, String uniqueid, int sequenceid, boolean isNew) { + sCourseName = coursename; + sUniqueId = uniqueid; + iSequenceId = sequenceid; + bIsNew = isNew; + bMustUpdate = isNew; + } + + public void setEventId(int id) { + iEventId = id; + } + + public int getEventId() { + return iEventId; + } + + private void resetUpdateFlag() { + bIsNew = false; + bMustUpdate = false; + } + + public void update(DatabaseManager dbm) { + if(!bMustUpdate) + return; + + dbm.updateCourseCalendar(this); + resetUpdateFlag(); + } + + public CourseGroup getCourseGroup() { + return oCourseGroup; + } + + public void setCourseGroup(CourseGroup group) { + group.addCourseEvent(this); + oCourseGroup = group; + } + + public String getUniqueId() { + return sUniqueId; + } + + public boolean IsPendingUpdate() { + return bMustUpdate; + } + + public boolean IsNewEvent() { + return bIsNew; + } + + public String getEventStatus() { + return sEventStatus; + } + + public void setEventStatus(String sEventStatus) { + this.sEventStatus = sEventStatus; + bMustUpdate = true; + } + + public String getEventLocation() { + return sEventLocation; + } + + public void setEventLocation(String sEventLocation) { + this.sEventLocation = sEventLocation; + bMustUpdate = true; + } + + public String getEventTitle() { + return sEventTitle; + } + public String getGroupTitle() { + return sEventTitle; // maybe cut prof name? + } + + public void setEventTitle(String sEventTitle) { + this.sEventTitle = sEventTitle; + bMustUpdate = true; + } + + public long getEventTo() { + return iEventTo; + } + + public void setEventTo(long iEventTo) { + this.iEventTo = iEventTo; + bMustUpdate = true; + } + + public long getEventFrom() { + return iEventFrom; + } + + public void setEventFrom(long iEventFrom) { + this.iEventFrom = iEventFrom; + bMustUpdate = true; + } + + public String getCourseName() { + return sCourseName; + } + + public int getSequenceId() { + return iSequenceId; + } + + public void setSequenceId(int iSequenceId) { + this.iSequenceId = iSequenceId; + bMustUpdate = true; + } + + public String getRecurRule() { + return sRecurRule; + } + + public void setRecurRule(String rrule) { + this.sRecurRule = rrule; + bMustUpdate = true; + } + + public String getExcludeDates() { + return sExcludeDates; + } + + public void setExcludeDates(String exrules) { + this.sExcludeDates = exrules; + bMustUpdate = true; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseGroup.java b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseGroup.java new file mode 100644 index 0000000..06475c1 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/CourseGroup.java @@ -0,0 +1,75 @@ +package de.dhbwloe.campusapp.vorlesungen; + +import android.provider.ContactsContract; + +import java.util.ArrayList; + +import de.dhbwloe.campusapp.database.DatabaseManager; + +/** + * Created by pk910 on 21.01.2016. + */ +public class CourseGroup { + private static ArrayList CourseGroups = new ArrayList(); + private int iCourseGroupId; + private String sCourseGroupName; + private String sCourseName; + private boolean bIsNew = false; + private ArrayList events = new ArrayList(); + + public static CourseGroup GetCourseGroupById(DatabaseManager dbm, int id) { + for(CourseGroup group : CourseGroups) { + if(group.iCourseGroupId == id) + return group; + } + return dbm.getCourseGroup(id); + } + + public static CourseGroup GetCourseGroupByName(DatabaseManager dbm, String coursename, String groupname) { + for(CourseGroup group : CourseGroups) { + if(group.sCourseName.equalsIgnoreCase(coursename) && group.sCourseGroupName.equalsIgnoreCase(groupname)) + return group; + } + CourseGroup group = dbm.getCourseGroup(coursename, groupname); + if(group == null) { + group = dbm.addCourseGroup(coursename, groupname); + group.bIsNew = true; + } + return group; + } + + public static void ResetEventGroups() { + for(CourseGroup group : CourseGroups) { + group.events.clear(); + } + } + + + public CourseGroup(int id, String coursename, String groupname) { + iCourseGroupId = id; + sCourseGroupName = groupname; + sCourseName = coursename; + + CourseGroups.add(this); + } + + public void addCourseEvent(CourseEvent event) { + this.events.add(event); + } + + public CourseEvent[] getCourseEvents() { + return (CourseEvent[])this.events.toArray(); + } + + public int getGroupId() { + return iCourseGroupId; + } + + public boolean isNewGroup(boolean reset) { + boolean ret = bIsNew; + if(reset) + bIsNew = false; + return ret; + } + +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManager.java b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManager.java new file mode 100644 index 0000000..5c68a4f --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManager.java @@ -0,0 +1,261 @@ +package de.dhbwloe.campusapp.vorlesungen; + + +import android.util.Log; + +import net.fortuna.ical4j.model.Calendar; +import net.fortuna.ical4j.model.Component; +import net.fortuna.ical4j.model.Property; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.ListIterator; +import java.util.Locale; + +import de.dhbwloe.campusapp.CampusAppContext; +import de.dhbwloe.campusapp.network.IscRequestHelper; +import de.dhbwloe.campusapp.search.SearchIndices; + +/** + * Created by pk910 on 19.01.2016. + */ +public class VorlesungsplanManager extends IscRequestHelper { + private static final String[][] PLAN_SOURCES = { + {"STUV", "https://www.google.com/calendar/ical/asta.dhbw.de_c0g35t6hrh16kr4ankrqg2rdm4%40group.calendar.google.com/public/basic.ics"}, + }; + + private CampusAppContext AppContext; + private boolean bRequestRunning = false; + private boolean bFastSynchronisation = false; + private String sCourseName; + private String source[]; + private ArrayList aCallbackInterfaces = new ArrayList(); + + public VorlesungsplanManager(CampusAppContext context, String courseName) { + AppContext = context; + sCourseName = courseName; + + for(String src[] : PLAN_SOURCES) { + if(src[0].equalsIgnoreCase(courseName)) { + source = src; + break; + } + } + } + + public void performFastSynchronisation(VorlesungsplanManagerInterface callback) { + performSynchronisation(callback, false); + } + + public void performFullSynchronisation(VorlesungsplanManagerInterface callback) { + performSynchronisation(callback, true); + } + + private void performSynchronisation(VorlesungsplanManagerInterface callback, boolean fullsync) { + if(sCourseName.length() == 0) { + callback.onVorlesungsplanUpdateFail("no course name"); + return; + } + + aCallbackInterfaces.add(callback); + if(bRequestRunning) + return; + + bFastSynchronisation = !fullsync; + bRequestRunning = true; + String courseCalendarUrl; + if(source == null) { + courseCalendarUrl = "https://webmail.dhbw-loerrach.de/owa/calendar/kal-" + sCourseName + "@dhbw-loerrach.de/Kalender/calendar.ics"; + } else { + courseCalendarUrl = source[1]; + } + requestCalenderFromWeb(courseCalendarUrl); + } + + @Override + protected void onCalendarReceived(Calendar calendar) { + long timeFrom, timeTo; + long now = (new Date()).getTime() / 1000; + if(bFastSynchronisation) { + timeFrom = now - (86400 * 5); + timeTo = now + (86400 * 7 * 4); + } else { + timeFrom = now - (86400 * 365 * 3); + timeTo = now + (86400 * 365 * 4); + } + CourseEvent[] events = AppContext.getDatabaseManager().getCourseCalendarEvents(sCourseName, timeFrom, timeTo); + Log.i("VPMSync", "Event count: " + events.length); + ArrayList newEvents = new ArrayList(); + ArrayList newIndices = new ArrayList(); + int lastEventIndex = 0; + ListIterator cIterator = calendar.getComponents().listIterator(); + + while (cIterator.hasNext()) { + Component event = (Component)cIterator.next(); + CourseEvent dbEvent; + Property prop; + + prop = event.getProperty("UID"); + String uid; + if(prop != null) + uid = prop.getValue(); + else + continue; + + prop = event.getProperty("SEQUENCE"); + int sequence; + if(prop != null) + sequence = Integer.parseInt(prop.getValue()); + else + sequence = 1; + + long startTime = 0, endTime = 0; + prop = event.getProperty("DTSTART"); + if(prop != null) + startTime = getTimeFromTimestamp(prop.getValue()); + else + Log.i("VPMSync", "Parse Event: DTSTART not found!"); + + prop = event.getProperty("DTEND"); + if(prop != null) + endTime = getTimeFromTimestamp(prop.getValue()); + else + Log.i("VPMSync", "Parse Event: DTEND not found!"); + + if(!(endTime > timeFrom && startTime < timeTo)) { + Log.i("VPMSync", "Skip Entry: ("+timeFrom+" - "+timeTo+") Filter: "+startTime+" - "+endTime); + continue; + } + + dbEvent = null; + for(int i = lastEventIndex; i < events.length; i++) { + if(events[i].getUniqueId().equalsIgnoreCase(uid)) { + dbEvent = events[i]; + break; + } + } + if(dbEvent == null && lastEventIndex > 0) { + for(int i = 0; i < lastEventIndex; i++) { + if(events[i].getUniqueId().equalsIgnoreCase(uid)) { + dbEvent = events[i]; + break; + } + } + } + if(dbEvent == null) { + for(CourseEvent cevent : newEvents) { + if(cevent.getUniqueId().equalsIgnoreCase(uid)) { + dbEvent = cevent; + break; + } + } + } + + if(dbEvent == null) { + // new event! + Log.i("VLPSync", "New Event "+uid); + dbEvent = new CourseEvent(sCourseName, uid, sequence, true); + newEvents.add(dbEvent); + } else { + Log.i("VLPSync", "Existing Event "+uid+" ("+dbEvent.getSequenceId()+" >= "+sequence+")"); + if(dbEvent.getSequenceId() >= sequence) { + continue; // skip event + } + dbEvent.setSequenceId(sequence); + } + // perform update + prop = event.getProperty("SUMMARY"); + if(prop != null) + dbEvent.setEventTitle(prop.getValue()); + else + Log.i("VPMSync", "Parse Event: SUMMARY not found!"); + + dbEvent.setEventFrom(startTime); + dbEvent.setEventTo(endTime); + + prop = event.getProperty("LOCATION"); + if(prop != null) + dbEvent.setEventLocation(prop.getValue()); + else + Log.i("VPMSync", "Parse Event: LOCATION not found!"); + + prop = event.getProperty("STATUS"); + if(prop != null) + dbEvent.setEventStatus(prop.getValue()); + else + Log.i("VPMSync", "Parse Event: STATUS not found!"); + + prop = event.getProperty("RRULE"); + if(prop != null) + dbEvent.setRecurRule(prop.getValue()); + else + dbEvent.setRecurRule(""); + + prop = event.getProperty("EXDATE"); + if(prop != null) + dbEvent.setExcludeDates(prop.getValue()); + else + dbEvent.setExcludeDates(""); + + CourseGroup group = CourseGroup.GetCourseGroupByName(AppContext.getDatabaseManager(), sCourseName, dbEvent.getGroupTitle().trim()); + if(group != null) + dbEvent.setCourseGroup(group); + + if(group.isNewGroup(true)) { + SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false); + indices.setUpdateTime(dbEvent.getEventFrom()); + indices.setTarget("#Vorlesungsplan#groupid=" + group.getGroupId()); + indices.setTitle("Vorlesungsplan " + dbEvent.getCourseName()); + indices.setDescription("Vorlesung " + dbEvent.getEventTitle()); + indices.addKeyWord(dbEvent.getGroupTitle()); + indices.addKeyWord(dbEvent.getEventLocation()); + newIndices.add(indices); + } + + dbEvent.update(AppContext.getDatabaseManager()); + Log.i("VPMSync", "Update Event: "+dbEvent.getUniqueId()); + } + + SearchIndices[] newIndicesArr = new SearchIndices[newIndices.size()]; + newIndicesArr = newIndices.toArray(newIndicesArr); + AppContext.addSearchIndices(newIndicesArr); + + for(VorlesungsplanManagerInterface callback : aCallbackInterfaces) { + callback.onVorlesungsplanUpdateDone(); + } + aCallbackInterfaces.clear(); + bRequestRunning = false; + } + + private long getTimeFromTimestamp(String timestamp) { + // 20160425T090000 + // 20160321 + DateFormat df = new SimpleDateFormat("yyyyMMdd'T'kkmmss", Locale.ENGLISH); + try { + Date result = df.parse(timestamp); + return result.getTime()/1000; + } catch (ParseException e) { + df = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH); + try { + Date result = df.parse(timestamp); + return result.getTime()/1000; + } catch (ParseException e2) { + Log.i("VPMSync", "Failed parsing: "+timestamp); + return 0; + } + } + } + + @Override + protected void onCalendarRequestFail(int statusCode, String errorMessage) { + Log.i("VPM", "Calendar Error: "+statusCode); + for(VorlesungsplanManagerInterface callback : aCallbackInterfaces) { + callback.onVorlesungsplanUpdateFail("error "+statusCode+": "+errorMessage); + } + aCallbackInterfaces.clear(); + bRequestRunning = false; + } +} diff --git a/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManagerInterface.java b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManagerInterface.java new file mode 100644 index 0000000..5635bb8 --- /dev/null +++ b/app/src/main/java/de/dhbwloe/campusapp/vorlesungen/VorlesungsplanManagerInterface.java @@ -0,0 +1,11 @@ +package de.dhbwloe.campusapp.vorlesungen; + +/** + * Created by pk910 on 20.01.2016. + */ +public interface VorlesungsplanManagerInterface { + + public void onVorlesungsplanUpdateDone(); + public void onVorlesungsplanUpdateFail(String errorMessage); + +} diff --git a/app/src/main/res/drawable-hdpi/ic_info_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_info_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..da56077636546c97764fd2686daad67d7b529f59 GIT binary patch literal 321 zcmV-H0lxl;P)H-qjnO!mZF74z`KYHotZQj~G9OBG_t^ED_kIXRP z8;w~~Qsa5P=BYWdU__EBJMKte9gdtxYdq4khJueW&Pc>cvi{6361huX>Wn1p1Yv6= zaRmWW!dHC7;kXjM_MA66Bsd3vLxS6)G3IUxb&OD!2oiZTy*WyW7pRP32C|k0wldT1B8Lp22U5qkP61PXEvTZ6d>a8@UZ?1 zA+c-66fgaBRuc>lIKkqWwEBhLN~4B^=^YF1?lx0w{jkHlvNhq4U%kY(4%UYj${gxU zt{#`?C=^ypw+}YdKA#S3~g6)IW)n6udaq z+)GOiED3ODRoiN{EBVotiHBXj>?{2uy>wZi)V_=1zmDyj)K|Gw_IHc)r4T`te0NDl hwI^3XQhFp;iAM+Z&9%(1ZU(xY!PC{xWt~$(698`;Th;&o literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_sync_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_sync_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ebdbd072989517b8c6230f65f7064d7c2ac017 GIT binary patch literal 368 zcmV-$0gwKPP)Bnh6NK+0$5`HOv#KS=tYj%F$hmx(`HEa6MGCz zVd+xXR3C*q>XmoYu)EvRqLNoKN9vrWebtl-5=snnhoS^g9uF~&xlN*)H`W{wZ;U+{TXN|u|AX!W%Mvu1 zCO7Tl*uo`~E>@u<#XBj|^}>ul|6C>19PJEUR$ER;nAhbpt#9Vs*Ef&3bU%Gs$9S4s WW8+=f3r;`>GkCiCxvXjCCUMHOLgs0@uOIM+hc=c_OeCtYY$lmfH>|_qY(a5Lp zBC`?BMt+0`nYqvz>4i$B5_%&SVO?^iM%c@|3GYT~gU&Mf*o80860LBx0>q!>QEKKS zbPhJ=;$MP1X$|6brX|#l&bsLVpmeTu&enbW0-8ozYX{n?_5c6?07*qoM6N<$f=D}Y AIRF3v literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-v21/ic_info_black_24dp.xml b/app/src/main/res/drawable-v21/ic_info_black_24dp.xml new file mode 100644 index 0000000..34b8202 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_info_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_manage.xml b/app/src/main/res/drawable-v21/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_send.xml b/app/src/main/res/drawable-v21/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_share.xml b/app/src/main/res/drawable-v21/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_notifications_black_24dp.xml b/app/src/main/res/drawable-v21/ic_notifications_black_24dp.xml new file mode 100644 index 0000000..e3400cf --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_notifications_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_sync_black_24dp.xml b/app/src/main/res/drawable-v21/ic_sync_black_24dp.xml new file mode 100644 index 0000000..3f0ac1c --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_sync_black_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/ic_info_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_info_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..46ed12a89bd7303d12a00edee53504903c9fdaf1 GIT binary patch literal 412 zcmV;N0b~A&P)k7>D5($61se024W16Y9PdLry5vdn5qWG7(8}rf#0;i^i3`Bz)3@LmB1SV3Ir;F zXA1R55y$7>4m@$40i?z@(7tAuhqf9h{9DK(kS9VPYq@pj?P({$*j*$70e+edaK1ul_2NP&A~Pg39!*_#v? zkeRk$7|4Mf$N?t@T-x(e!eI;N(w!F)7P$0*|EtF)>xk}V7O04Biy9mEOaUnp*K{AN cD9HYhcl4RW{G`P`$^ZZW07*qoM6N<$f+&V{8UO$Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_sync_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_sync_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..860a5db38b393009a7407ced8d9fec8da0b460e1 GIT binary patch literal 467 zcmV;^0WAKBP)Y8m235b4thfjq5s2xGL-&my=8Y}rO#iqNL_sAt7# zbGQi8aPN&dD}Q(UKmQ-YoO`)AM%MLWT`$)4VqGuR^3-I(3JalY4Vwc%W0i@p9B?ix{5h)DbUhjrRWQ zC$I66YjjKu6StQJ zPo5IU6w&jpC@59DAecvdaf&5rK~PjglW}m0Jwp-{q$)-COd;&Jrcaw1Qk^1WgA`Ad ziaHZcwhG9|xiJ$cDFbG#IB*wVAB%B4*7aD|V_lDRJ&d?8{sN$?X^Ds6w;2Ec002ov JPDHLkV1g1j%<2FD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_info_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_info_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a81eeb9ee7ef8ab1662b5b6bc88cf74912e4cb5c GIT binary patch literal 579 zcmV-J0=)f+P)YDX|Txx7F9T)MSz5C z%me$p#<(@Ec}8Mx!WA`)S?3W+u@6bG_Q+CN{iWZ6iFpgn8im7?Un+GeL)QF6AA4ghWDNXmU%KBG@?RmKM)K1 zMojBSqWw=2twt=5)`ISdVGXesBvgrXZ8hkU2o;{K22Jn?b%0n667~qyLM-o&5Jdv( zL4TP?X$x_%4U`&Af{svXIte;OspBN5jZz=6{@DvXl!i`%1}Ftig2q!9G`&wY{XgoC zlb|+AO(#JoC^eh}9ip`9BT! zt3hvwp=B+|Cze%9K`*Qj(>Y>cXT-L|$au~Wj|A$*gSJWNv(cQ7Bv#Y(JK#w*j9P*Yqa=F};`Uf%+Z6V(b RSUCUy002ovPDHLkV1jt6`k4R# literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_notifications_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_notifications_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8a9c464c6c30f54a49d18e1d48b3b8637a9295 GIT binary patch literal 383 zcmV-_0f7FAP)z9Eb5|s``^)CE_}yje)z64pu{@M5;_j>;{9|U?dVTN(BQGf?Y^x(n#9o)!|G% zjU4BEPu~u|&vOG0CJAFqk!rUBLt&b8T-X^?co*)3o#I&$*V6)CRU<=Ncojs30vigA zQsRV0WT?S0E94odF?RXD{n0zygPU6B6&Ist78!sYI=Gm%sgSV)+&|kVLp5B2*2%~c zokT+|3ZOU68!lmw`W^j}en-C~ z-w`ZncLYl=0<4vB2$j%)(JeuRaXJ-b_M%dt*X16+J datt|R%rC40J4*F-*<%0z002ovPDHLkV1n31phf@y literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_sync_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_sync_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f7990080d1d7d7e30b1844c18be8928128af147c GIT binary patch literal 669 zcmV;O0%HA%P)Ri)#A+rN#ZV}M#KrnQ=uoUdx&}e)B(84V)X*Zhb`j|=Sg}(VanQLY z)jde5NeBw@b}N@>BJX?O$-+X_Zyy1Q~JX9W8v!)}~bi|sDSkn<}I$}*ntm%j~ z9kHe(+;B;meM-zT*nOQ~j#(ySLPw>+CRr0gDs@&#*-{ct8MUTVV>WrE=cE~@z!sG@ zN-c^>D`}?Kp%s)$S}DjF2Y0^GOt&A`B27f)iji)gA9<>X$_XjF_`tB|ftCv>t>D2c zYFva=>dYif^r{>pGMfkzQt3Vx5tVf!(nkXct#m(!=r=AyBtEK=GClZ^L+_;}B5|xL zzT(TSYC9qVSwtm|FVm{+mI0huPzAs6=LzSkaSmrbtML+Xu&o+5aOQ^^e@7hXZ@z~! zzt#9_;$T8Gp5aVQjlU!g`c-2UXKvN_Q{tdkHD2S)4f-04gC6v4WI#|=enhvb-FnQ!32goiP%3qR|00000NkvXXu0mjf DBY7@j literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_info_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_info_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f86b925366485cef1f43c089f785ab8415068d GIT binary patch literal 766 zcmVDuaOF?qdkw!ZaV?`>xjy6gVLBv5If;S){v5mCXA=Y@H1rfw?2k|s36`TsO zNHkbQ$!A*+5eLd!$4>T2_S$>D#r=D(;16rBEP_R$P$(1%^^m2=ItNs!^UUj8&(x`~ z&l*LtbfZ#|309~g2Axu3oCHcl$g<57(qs*`7$HKSIw(*>Ty)MH?F1shPyB;e=#~ZI z_$<#QVzCQy_@bx0J~enA3k6_=)wfSbaFejbp3yC+S{ z_7DY?X;B_gQjQiRTt1lJbNASe)3hHEH3Nk2X;KG&s~Yf`BuyzGss;$NVD1ZQ>IR$< z!B`eiH$cc>Y+L1kO$;S@QaRv}I7TKArHx@^1yR}(MyiO?PB74eD6Y%=3f0*#j*5ul z=5e%+D6WK~14MDVII194dQYr$jH9~h0XH~$Rz0ABqgT}fUjFw3KEM%D{t z0UH<_Q90l{j72zCH=xQV%rU2Kzzj`k=T_B#ItiMzplU#Yrp38XGoVI{7UU2mP12$= zqM+YsSs!;u!2L@vF65Db%i+>05@0{$T9iX1pnj(f3sO{(06L`;O9r??eD0Do77h74 z;V-_%vH{L~JUnSU(9NMwpKd1}iL!=x+!AegYKnUge|2;CAWhk$H%~9V$#H>L?3_t_ z7Uu^(BNnPtAVwgP%(}c>tIUufP!Te0^4P-PR2zKDCzOaY#u9%b231&Olo%?d7-pUl wyBu>vgO|4&+;Gee%M{4ag*Bm2C=?3)2UQ-CT`xs~ZvX%Q07*qoM6N<$g2UHD;{X5v literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_notifications_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_notifications_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..86f89d75000ada881e4c14891ceec47c27c7fb0d GIT binary patch literal 497 zcmVtWS;T; zaYBz`tPu^nL@|bq0naE#)fn)NVnp*CkjTQsfCVzQ#5%jgl8xP!>8N(0U!w=NC1j@$!jz5g literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_sync_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_sync_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f56f327d6346a39fa6f69d8827ff0be7a4337d GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z-;8{;uuoF_;%J_Z=H0J_W3g( z>AlH{ab;?9Jg@dus zS3Fj^r{zaz$Fn8&d}%W(?;Egx`}y_xAGvkbzxP>-ufMV)F!@|n?Z&wHHP^*oe?5wo z*(xr#vgi7N3?sowUJv(kS~`R% zow7(}bPUo|SvZet(WVAxsUOmwD<|~i{SA0Jjcv|H-KHfW9;dh#88sV!vHwuMW4TLc z?n;3NEp{$XwQCG|SA2Qc5^DNw7L%QZ&`RIc7LN4~*FWgi-TG35eT$OT-5-m@12Ywk z4`)4*|DpUKDpy*`xI61f|BsaL+}Y~JzxMp#wVN4q``d{#ol-yL=JTw|J)YuLzqh8z z|JK!Q+(w^QxJ~=ux%t*NhqQlz%FH!E0k`L!Jj4B~TyB2LueVLV?H8)me44mVe)oTY z?GGoLeV0%ADLma@Wb+3-&*@0 zm+`E+S*O?kbK^c8_wV_OIqO#k&$L$k;39r3-p+pV|bchu(99KY6clnh~I|v&r15vZHo?-24CqcCN)9K3XN}A}1OT zxve=QtUaZ}y=d`*_!BEbW-dFCt&-2h$|v|pc%!R+qu7c0hwMJNt-G1p<#;P|S;Lb+ z#T4F?6J#_FaD2ZeYGtu$oq&;BN;IQX6N%zUvB3!n~xic v+kD7bYbW*k>&7^F?8L|D{cgQd|C!2ftO$D&n7s#>i5NUx{an^LB{Ts5h>e~y literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/appsearch_resulttype_external.xml b/app/src/main/res/drawable/appsearch_resulttype_external.xml new file mode 100644 index 0000000..607178a --- /dev/null +++ b/app/src/main/res/drawable/appsearch_resulttype_external.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/appsearch_resulttype_inapp.xml b/app/src/main/res/drawable/appsearch_resulttype_inapp.xml new file mode 100644 index 0000000..50c70b3 --- /dev/null +++ b/app/src/main/res/drawable/appsearch_resulttype_inapp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/dhbw_campus.jpg b/app/src/main/res/drawable/dhbw_campus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa3cd9d3ba7596a2c2236a93c335e3153a1c0d2a GIT binary patch literal 68496 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ÐknJZ_jyIiOto{gzVvLcwQMi^-V|AMo2s|& z-KoeX$1KHtV0_ncA9!Ihaqogh(AbMbPWRo*-u)5o;uFVzm>&0=w!}Uy&1}x`-Umb` zl4pjMF1_3b0>|Iej>T^IHL$maZ~9%w2 zjne%=iM(`~Cr#e%Hn^|Zy2@`xJ=_QKMjeOp#ZLvfJ&4q3Y)LLefBwj7QaRvLaN^`Z z$lKzoKhRw%PMjgffk?teq^aI z%*m{F!slMs$%*DowW*I0$`^KV8PVR6Ii14VUhYr!hgZKYyw{&KDEYdG6+70a zPa4%&)Ha`cXjR9{{(i|@s0}Mk%ALs4(Q2`m+4$B=;TKJZr^JJY?X7k_J~8eC=U44D}>b{lh@9}VPnDEq6_nr5B`FXQm;EaK#z5uRNi28~_ z!w)QeS;a^sPIqXkB5H!!@?OXKK45nD@&xM{yy6X9u-9kYyBIzFrNs2ZyaU?n$NW|j zh6PKrIyj}i14o)u>%N=;NZWgSeYZqX_JKp3wxIS$Y#&!M>;oslCvwv#8KTc}iF4Nr zsWv5TbbK7JuJc-L9Uly~_CnC)+^*ZSTaLQ@#CAB0W1}eR-E_w(n#1}?l`no9#qvjS zt10!$45ce?jkEGL(`bDvVN!Rhx!s#SKKS@tN5c1qu%QBZ{H1c9pm&TfH*7z??T@NH zr~kM>9udQ~b8>~|Bu0nUDr!x%*MCp9nsc3LvYm6B5=Hu&eD@Qj+S=?z<1MbqeSqmr z|1!gRxaoHF;JqhjBKb~lH;nLVB&oIxtw#l#5A1YqMCL$+uiwDd9!na2_H5(%MvJe* z%1-N;mfMf`(bwPW&+G%wBd^!F8$7Iiw5!?p_GQVPec;Wd)BczFAF9q6Tsrj1Hm|C# zrat1tBGsYgyEo)SdwjpCJ)PSAq#*Lc`Q(XKN(PshJzS3-&$hL9@O+fmsfa6AC8Lh| zbW+!HZiu5XAr389d%ifjlz%-+pJUJVRBC4>YUtf@qf4h++{aBi@@}`xDz_YaQh#Nr zCGzAxu;ZDnsAO9-X0?^scTWHN>-HbCHFhuYWKDxzkNj@mew;D=VIMd*`Tel(QGPmdo)re2sC@rnFi z+vJZ7qDHX$Y;rek9vS3_cyH4el*;S(tE~x`Re+uf>-$W zfsee;TR)Z*)%8X7cq8C=9ixTG2p)LHy5>RIRd(@ojmEDHDl>2+R`v5#Y2IMuwK}xt6K>|S7c^74KK)~2?d(1fvkye?1KQvd zM5Pni-uLIvbVc@o2z=Yl%C1kQhXThq{c3nSxc1sKtiMkE(cwZFF+Q&G(g9$X^ZmXL z6qN5g5390W8`}pIdiSz_^z4R)G1IPxDZT$ew#K<}o~ofb_Zw7gOD~}{?3U0@sZNjU z#;dD^4V775p`qeD+fz+A5^L~n1KY7D=q?ZIZB{WhNAUprvk~EjwNbm6 zW?`rIWP4UsJElYXKr?6mKCr;DyN&z&x#IkpBZoUCw(b>1mGy~Tq9vP{$A=}H{8*%E zmz|5rrjOEOKVh~H)G2_IZ)a{poi$ojoqu`nW;fqi8nub7tn&>boz^oK_FwKVv%&u| zG0KQb0*adY#_$6>lq@^M9)KO@)BPQTHWBcj9jX8z2sSCuWTwClJqA!pDM`sm$%#lx zOG*;U^AXJe$m_>&Jm>CsRgV^%g+^NHDH8LP33(76@J6tR92lu6{c%`dylEibKM)Th z38opqEC6qL+Rx9MNTKhG$6$N|eFzx@m=J4u;|OV5Vp&UU2!TQqizk#JWFPRv;7pu- zFjm^ftw0nTpanPszJMQip+GYz28=PFnG*}RfN3)@*9edYAv6&eM9d?wI;g@7=jZ2U ziNOc@o1XS`0nzke5gf?O4{!s-0Bw+sFAxCW!D8OvUm%!rCzJ*#{C}4OQ^fXYdgFb6 zwukC;Al4g?^(C?g^T~D3 z3P2T|#{EuMxCa>jPH5qLwf;)@;{Qq*o%Rm+onzvT5BimM-20cr%=fx*dT7F(6%Ve*U%|7_f7}@s0I$|D`?}LWTt>lcpaY z@8{#~=X)?z0D$UO4nc%J@YKKX7Fc(WKQkzQWq`8%rYFoa*z$o45K%A&Elj^+;w)d%u0~>08^Tm{~IGs#M^`SUo>(=3}JTs#1MHB zoI?QMPq2soy8v4tWdFOI{r&%wJfdb01m3^qDpVb8CV2hSBEiW7x->?CajYLGdJmJ zzd&EtfPb06E_f+0k0>l**#90|Ao5?vCZPFy3?GPL@q3688$uf3jdj5U*mxTeCK=>! z^^g$rKr}sgkr5O6=s)TrbI17w`u`0@>W9O+V}Gxo+Li?FrbHabgW5R|@289L#o(Or z7*`MhScUrk`thJRASPf4Ir={CC@}he-F{dg&im(2(9d2YDF5#m;{f+xKT`)Zq|V-W zD`)q=QPH?yz;c)nyncY5m9f#Ur3~>4{WoHA4?kR(hBwyzm!@bB8n5>Y4Yr)j731a{ zNL*UUgD^P!zah8zh5kD^EnBKIG#RHuoH;(x$Xf?e$KujIseBuJ8^fBZ53_+$R@$NWF_#}KU)T%cV7+;k3J5Q3S47SI54!LZFco+(rLiQ=mZ4h9&6PAecRfH5^zQ!Hv&g1>pbwTUuTZJlVbuR?b+`*k23dfz=Dc zVJyQ;tX#spT$Eh7)l^Z(LX<;%{CzNZXHzI=$tugqD@!Y&egs|m+Vt-|0KUb_< zDCn=jsBja$br2(Tx|G$gZyi8aqq3wVK|X(FEgS|U`%Nk-CM78*sbKYMr~CntF*w{@ zLGRCRvj3JNXxaolMZX5-Ury4$eTTt~a&=L5^TYW#gZjbxIJ;vcJpD25+^FAurfh_9 zcXkQYH?z`0W8E+(6^(65wxasYBR) z2!K!AD8i#R0sa}l7yQj};%)?BL`=^Nh5D88zZuiH_~XEhaS$_*Ud9!CcLm`%5cUqn z`xEel-4KkYy$CS)Au0&tKmkFR@JTSE`vELUq&a}q39ze=FSv0AN|4##)yI_pKLp{# zpg_Wg8ki9X#|L3C!5};e!o1#rK3EVY?7Cv~!8n7PeBgwg7QA?jiw6ixf-n`%$^zV3 z2R{aW)lB972YmVu7!U4j0cim(KmSnT+aOBNMF{-lSxFJ4hY9w^;PGN+pc%p$=L#AL zeEgk#L%|Q%iESp70_gw4YYh>7aQiPa|DgM?KtkUhvG~?$|ms`4^721hn(S0YJ<1Kib1g7%zXAFt8XGae_jBhyRw~H|2j0 z{867cp}ya*gedgE)*uvNRJ(v%eFAZ)0MH7AL5cnAApRd0{6nliggKz{d|5xEU$kOKf)&iR9J55izR@&30P^b(ka24IQX%>XS6E0jwhF6e*+PKZdr z5724BgC|(QqZW7oL2y5@G@t++1=PX)e+J+#Kr6rwI0ry1X_VRzGqLC2tPpr4={ z;8`A&FlHDRObn(7(}J18>|t&&94r!+49kI)!Rle{upZb5>_?x;1A&=@VD@<@I4Z05_S?15@iy7lH(-qB*7%{BsnBkNt#I> zk&Kbdl5CQak}{JDkSdVsk=l`Zl7^FBBrPIsAnhU@B7IM~K}JT#N+v?4LS{*`CYvSuhM+`nBBT*I2z!JtA{LQ@xQ@7o7)Hz^zLO)#`N);YP03x!L&-0Z zSCF@pKPR6h|4unnl)aR1 zDYvQUsf4Mts2r#QsZyz`sJf_LQms)_Q}a`+Q`=MHsZ*(|sUJ|krv665KqF40Pvc4x zMN>f2LNiSBnU*(nA`6hWkrT)bItDr^I#W6y zx{Gwz>7LLn(38>g(`(ba(#O%4(?6hp&j4fKVbEf5VK~Q7!SIM-mXVZEfKi{(lkoy$ z9peDwS0;KUStc8%5T*jAyG(DGVa)u@`pn+UmzW!w$C-CnI9N1TFf2(d^(@0ITZaxG zQa^+_lzgb+(Ac3JRuro?s~2lJYb)zC8=Os;&73Wmt(ff*+tOji!$%Lh98NymczBW> z$}Y@q!5+?D&fd?y!EuB`m&2bUkK+Ny(h=q(>PI|}WF5J8WRa7BQ2U>em2wSmediY7w&srIZs4Bgq2N*EapTG2>E`*$%gJlZdzQC` zcao2sPm#}qFPE=}Z;M}m-5_^(zlHQUPl2cOjQU+47QteW!(!$a%(go6^GSo6UGEp*ZGAptovKZN7 z*%xvQa>jBAa@}&f@(S`e`Fi<91zv?y3WW+2ij0b8iWe1ol}MB{m7?1NDvrHZ;Z|{0DOGu+ic&qLTB7 zN1|t_m##OV&!O+4U#)`Hf7*4;L=HV!t` zHe0r6+YH+`$0d$O9PhJZv%}i8*^}AZ*k85ZIH7$a`^2n+oI||BxTAn$h~tx!Y$v@> z-gTmNa&~GuMRLma)b&$8oK2m}oHtJEpDsN8)kVuC*X5I|x@(r}B1Q$1fthzxam#R9 za9459bYJvP^T_d7!fIjju`8Z>o>x4#yiC2Sy!O3qy&HTGKBs(c`_lV*`9AbJ;uqpK z@e>J06Rsq}6S0W{Nis=!Nqfnz$xkmxUdXxdSvw3ze0ewVv&i{Uk>==SnU` zZeZ@4%SM;m@_6&o@_yudM6}c7-7poW7U*WiN;mS@4w&X>rZfQ#y ze_2jBX?aljT!l?VPo-jI^;Nd37q0GB`BuHTW^wIdwL*3Eb@uC*YM?cNHH))hz_?^?R=e*b;9Q}@(^;}1q3nm-(P zWcaA}vCiWMJsLfoy(+zTo+v-L{Z#R3YoB~yOTS!y^E0_;%>(iSEzcF6w+$){whtW} zx;Lyge18Nz@_1B#v~SF0Y-rqi{KbUB#G4ncFBV>Uzg(FNn*2T${fgvO@-%Wf=QaE5 zvKgV7hBxwW?!HC8?SE(aZtA_u`%fPNKKz)Co1>n~ndh9ZUXWh6v#7H;`0>QY*-!qT zzAwcu(=8W%7W{nci~5)TugAa6uHaVoS1+!yu2rqeu6J*kZM@#}+5Enh{EhY7wQa@i zo*mnr`R~C$$bMYj720jzGu(T%?*o2^@EPFxdFBh@SpYn31_^`04xDrZ1Q>|Nz>vb> za1uBv2?;4VDR@yLNJ$ZtR1_4H6ckiQDq{E<9VGts4gr7msHvzAA(4mvhsVHlgU7%? zM4{(l5b)fTgJWPG0^qkF2M53$hzj1p{j)#Mc!7Y2=YZjN4wy&GIym_SJp2U?fkUC- zXF?G0R4o{so`e+1#X!c0lH!)sU_wZ%^DwiR@oLIw@f`vyJUFKX{ADMhAOTNIg3ZtEc><({B#* zynV+|-gIzi3n&1L4lKFR5PTmMpRZq{uED6U9s|J5;06Gy3xNdGW1#dvcbqI7nTAr2 zp(cm2K>-37ufcmch8n8Dc3KlY3_kxQK1HI8)5wuPv=jiPF@^{t4b?ROGNUvr6jl$3 z0wDD8csBJ+kR6r_$_htRz>xqd1`0<&c#$YUBM=V(>6mFtt=G7!3jvH+}5=(04F1-H3gmId#* zWIf!A4Wit(^CKN&BqAg!vb(l?1Gxm%??|dLE`+EfPmiH{VsV zq?`$QJZH?aFff2dlp*Mm{3t zV;N$o%eWBN&M~YR1>KY&QB@PW^=i5@MZ9n*MdXP|IvZKCVK_t8)y?hKnE5b9t_z78 zF(RsU8+R%!c(Z^E3RzYp051^+b;qC9g;I}>c5#S4V*=rZ#y&(Kd6DYs)KU;Q33oiz zP3{_*in+BB*wOi>DVmeaVK?;UGsd6LWxJ?coc57Sb@1VpYV&mQ{9sRB*)_#ZSE5a( z<{GxA#0Is18wkeo2?LjbQpr*P{xBAS>mug5qZ{F-xhM_ zEUkjE#r1jXZU`^^`?jQNB<6`IGmp-va~9DQ0cw<_ zbmqJ!r)T&{VJnA9G!if|hE4nR^~?!=Z`oV^Drc5THY-l zz4g>ua`1zqj<<02RbM2>o#v{mV!l?T71qXbTeP>|mhwXsPa(R}xNZP!h_o~z43+hCZ#BurCl+2!o7G}f4Og`O?0maPa$VL$tnRT;21RM}F(tld#m(~f z;Yl~KCo7Wsg>y*JBSYNIeZ$``Os^U+AnDc7GaN;$FPC!#bj^F_s~CEw5RC!j-WxhT z*v0#vlEN3_OG+3MEsaZ49heqwl7yL$#xA?*yoyaq^dYB19v^spJ*RQ<`OsFf+}FN)Y7b_N4m`FO|?h987}&|5Zzs-g?xSPN4!}q5;NLu71|{nchM+;(F>hJtZn^45$Nm+P`oVIiNl?ZVw>$CU@D?rmcNP^x8V;Qu&tr&3JrM1OY&eG5-7<%JOvnQs%o|z7&`trp} zl`3a)lIL5+6O$Z81IEv3iniQ>=}PnVU4d{K`E4&Zy?3*TdU$lp^DCdN_Oe>^fq|wA@rNDfJ1=#dX_m;G6vknLBTZ_& zX2q3mdC1+gtSy?g8aX>QI!7v;V{Krq^Q28@^Md}fGq!Hgx3o`jlU|H-ModP_(!+YJ zP6lT`H#8RiqW{(51euhWXmY4gDRr#Yr=9I~%|$D#x#d~;xpk^fL)~_DvUQKbqQvhE zB)8fes}p5QO#avw;Uu`Ub~Zz#b%JJ6cFiqd8;gp}!g=A|zuUQ6yRmk6W$?qe`17NN z)oV-zEsxQ&1=&hhm!2KZZ&eUJLQSzWaIH*uw8Yg|b5z4zF{W`w?#u0IqXt9$&VV3K z^pb$Lc>-&|gQjPVH8#z#+iff2_H{qD{Y~nPZMz)b}UX{1y%^ma(HkHZQQvqAuQo=_w~(^9}32^>TJfM7vHd zcj$TEy<=fMQ)JR;m7|n~lFQed6r>UG2Ic@LG z2eI{d0$=L{RBFzCx26g?3zPft`Nv*;q{H(HPjuDNYv1qvUpuu5o^1^5# z8iHM@&ombm)~Jq+&U&5BQ4x>yYG1j_sa5-9-uv4Z)69pGJTz@mJ53wak&iNq3+?Ag zz3%TcKB--kG?Z|+B zPI3B!G4?yD5vqZU1M}xUZFe@!txr2_ZEt;Pd47FDLiOFJRZiV=cRtJroNarZ8k~wY zs2`nvQbXP+3WMF78yPyco)%o4XX` zu(Q1nn5g*47fu-Azl|l!t*4&QPGR~ICG#mL1oP%Q zW?vORX>Q&xx7Pf4o>o_7BJS{;Ilb%H8W|fV`}}MKiXyRXLLuN}mgadjgRj?ltb;t8 zjeo4Ke|kPB)6ry9DG3x(*plcxeX?$M!p(DaJ*3CrYwNi~>-Mxd<6$BNDflAxwMVC} zzf;QY4~&YKU` zzqZlG(kgom>p(tSg*Kf$``)gQ!}|98Z1E`Tu?lJNjCt4aDVGMzQZEUW7Ef_wJMF6t zUi1dfOh!*q)ca+Yzupd{U6N>dA$I5e_ zhI$7)8_>h;MxHwnhCU;8UpNne3!;nUU$rfGq0?s{Ru^GY6IA`uo&5RG^7h?0V{t3% zCJj2izV#lyd-^oFPhWi}lOIo~W`@dN?!A`CN73ke20LIsFk~z?yn4%G+wsQED}9cE z;4Z5h%CA1b^t;@xnc{L)DmIU`hi(Nao2?dn6vMNbL?0)EJxC`dqbzo)SHgXJgf-Ex zg+cl@cSxvQ2FFp^#%(cnFOubCSiIzcWc20P>y8ZEb$WG4cX#T%!m{ndjyyPH^rkz z9B%~ok!g?P7Gusl_fyHGc^$a0=9pZgjBT9C!@8Fb%(^_pUG7oK;^#KH2vsQU75tz= zvrf$rvye7m$H$L-_FR{Nx3$9J>_dAwX$Y547`wuCW28q~Y(~#hl#Zo7>5GlxGc8B0 zZ9Hqwr>{46I){7WF&$ne4zTo$l~1&8#yayfFCt!Cmsh;?{IyJw{hcvO{m0|-Qui#Y zgvp0`un&?iZoj;EtejsaOuY(1PnRo7{{Ra&50NRMzhUzKf_?#=9>17uvaY_mTz9QM8_qIK0IzN ztZkU~F8Y|d9);%OiV!3biPAKV=79?FOS-a0Q^Tq8aUbYN8BwU1cS5%TI&m_?{Odxw zdLK~gALMQrX8Ml+nd-)vbr-zbL&&NHs0rRGK`N6b8PD3a&r zvwL~@Y+MEji>!L!DJZwPS$z?Ge1SfI(f|(8Gh8-5)JvD92Q|KBatNA0g@AoPCFf|8 z8>W3wcF33!d(vBw8AcT+;W*viQ7ZoSrG8C;#Zl{e!G~JO?ni?eUaqzaZ7zN?AojCV|}{PW%_#2KE3Fj-0RK(?6&MB>X!af_#d;iTAKbyb<(&v$oo?$ z)K?EVI2#X*@t&@6Y zH<46RX!F?fO~JX`!yPFn=j&7>ZlxTR@H5q%F=T2GQ3|QpzC(J)-%Ba~V>G>ii5VAa z>8_anZ2=jCUb`$8Emjzk4QS|P! z$gsUrO=JCb<<`|~?Aa}*0RORed=UIwF3%HDncJ94S;Cr4RrO0P$GJvoA zguge@TJ_d4buRq&f!8fC0O? zJ7$IPH%dQR`sOER_scbR+VtcG-L9yrnvU>`EQp91$2C7VH{TQ2!#;+%yub~k-*t*Q zU7Tk#ER4+x6stB$KlZ6lS7n;zjP>Ojy2}3bYPpg5y1Z(QF33fUwhDLAyro`U==imU zGbBbdrwria))i+&b2Me;3=*iWe=UpAmOsv$@+6I#@c~sLCr{<=qe?lr>ZTf{PJmBE{h(p1@R%nwv1=L^5KjiMIlpPq<9ugiZ4vo@@q7Eop(>$#NM!=m!?;!(6U z6&7Ydr4^ztxb+GtO|e~4*+q)}s!vK^2uF150VtFi8;=kpmx;MA7s`cQUJzxbvHZm9 zg(-W+6ErZ%9b5mzZ>$MI!_5=QTY2GT(LM5av*($Fsy9^HgCmY^O4Ya6OEoBceD^j~ z`hBQW@8STpD;!T|Ds*c|Tz^Ey-9jT_l>THKfTTmAG#*9c*!7^YQ)w$Gp$zB^eKNy! zzNu2%Im!W`h~Ds!Kz}cdI(|61_}V%C?BiLp(qxexcWI4(P^ulHpG=a*X)CMq($kRo z1a;bfp3-p0wB<2o|B}(CM$t3SKgAyxtY^gFSs{APA?x@v@G!=zflkoSh5!%b2hZLI z&&vak2?Wmu`zl_fHoQ2p>$jITvMVt(vTIVLHo7=cwZr)_vc5<;Y81Z@Xzc^_c#!5) zmFei-xn0wtk*ZzWotfQ$^{BzfOFR9M@#yGgQiVsM-9;6p_$+agfi|lIiJnFe6O*&#IkXef{&bAllf5Ii=m>&uAUS& z(#(u*2CMq_O4nOID&xUp`AS@84Dl-IX^0u1GJ~#XMqfE6@2D^i=OQy3Rmb$4D+)=0b6hpI67%xG+^K}pE zKc7y}(fw>G1ZBR(yHIB5`I)!ysvzTA)+(nPpPkBiShQBun#vfE&Gbnog%a&&_Ojrb z@?EU6=S8dORx475Z5(=^YD;m*F|m-DYYZlzVsWD$F)U+cG~}Ab@}A#BulrZZez@M> zj>S#0$5EhelcymbNy~hGB!w0eFCDBp!xAu*EYSLCOXm!Qom^bNsmlC&R!?(`ljW8C zi#&Bqu7*nq3ndzvQ6-_G7YDWJZKCtg?U5PgcwRH{BDlVKISa2KI?j>aAhPSK;|RB9 zm9~kIY`g11ogT}ADEy`-y38^%4KW4WGctdQaMh^F=f3B7;e%1qCSBskUTtJSjhG(UMy}a<$EFbG81Lj(_l2I%~PfYaIrjatdH_iZ7 za;jq;zRuGjuqbhZPx?DP>#~l?(Gtcq1R0<0o{9i9FVrfscf)o1Xju&ARThjJCj1oN zdlfAhr-2qs9ilnwOjQGE(Q(yoKa#qD=hWj!Rv{aG8!Xhm=o-#_6q@jgNigGZiO|^l zX6%SEtXjBpMTII5LLX-^#P?q0v29`louI`X!-p)15{zc`Tpo$WOyBCCbo)1xTocpq zLa=B{+G{!wBCk|i=$2?GM_pTwOep={NS@9ylC@Mp_c=Dn)i7@QiN=@}C2hPE_q8lf z2*nfgGLaspGLhwVy+ti$_{DEbYu($s_s;OlJ-g?<{^R!IwheY$9{acvw=j@^KU#t$ z??{8B0lh%tGTcmPWF4TrY7%Wcwu6juYA4SuQO+oe7)&}T#3+~{rzgCy#C^p2d`Saj zu}(^3glX&e)2NW$B=yqGqI}!55{JOZ2^$_CPgD%Uq}n^$ceHQ7a~t=7Jw-jiO*6Ca zJ)c$Qzi_=ib?3eXN!g{TlJDz~_I5s+8Qp1$4`yYC-DcNKoOwmkPqH#fJ!On@20ACz z$63+@jqj&XJ|iJdf?Cn~z1Cx-$Vv|+SI$aPx!B>Xm#uau@-_W=gm!wgh@S2ud3qwx zeUg<=T1Rf&L7qfNAa!nW=Si!TPL+Pgb4FEtPSE{iH$rZ2#jD@a&F|WrOP}tPDHZPW z4MA3h5-bU~-MqnMBir2*bKbM_#`oTJ5~M-8hef!Pyj1RchYc#((;qoq4OC1QY0i~z zh}<@BG7q-bDN^Zl<3c`3Lu_ycUMmS>;pU3Pzd>2*zd51|g`{7?l^=PB;sVs`Lb?Z; z)AAH7!as`Wsoyx2Xit%rW~AB3n;b(a_L^)3JlvUGHM{t}vS8VzVG34MW+sGfl}8Al zMGpMOmYpMZf1353;4n?vkxSGha2*Ep;>g72P1Zv4#o0VX$~P1V@K#y&WQ9O z;|hg(A*-iSRziA@G~QCDx}k03$>G;_KXmT=h|WvcVTehQGJc_-q?SvvlHU08S_YGT zY3gag)bq81jI_E7<~wzHakKn~{1>cOhtHmtd;6%y&Mc|OT#^-?ymIq?O4eg(*Zb10 zPuiu`e9wIu%IaE-@+b4yeN`PS7nR)kLxY3~kz#LM@z5^#eLb&BOKNH(?FUngL>pxG z#bfb1nJ4u{q-7yIDDfYqR{Dolc!V!MW*(wrNU<-HOjVE8bbJ?iZge9s+cax{nvI+1 zNZySAKhL)uTux-!)8+o8Nb19){N|nJ3?c*Q=3M!-=Cl}z={b9;X*teJ+@pS(n>&fI zF@dgfJeGnF?qn_IA*q;3(yeV`6rb5LT-VNVFwUNEcnjqpQ!Q@Itg#=hD-dK+;cnh~ z+RmnnQCAHSY;q+#|6oNJJRMWu?;RTdehDcP8zHV2HOvcr$kGL+GYs$9*x`O z?w^J%d^9Hs>0W`)LhqapHCXBpLNn_6E}#<3w{*Y2m9xxsYxp&JN;HrQ8W+~NMw3Jg zvNJLuX^9Au3NfyJhz_b8GE_w6*`;XpRPI^T`~_$-2lpeadF(}V4t_N;5rg4df*LX8 znbpRJ=jfj0Z*NL`aO+IZIGnM44HH|Fmp^EeaVxv3T+J9Qn9BhjWeC2cyK8GYxR)lb znx=f>BGo;kYjasi1E#tt=9_qpM zEPf4@bPizWYWU+P61)>RUeD!LdGD+`p&HU`3&HD&$cOCJihJfx!iKZ@XY(Y|`Q|d1 zpM>(pRhaFZSj--zuoJfFtukGQY%oGcHRbyyawX$&son;xa@ljS3`q-Qq2@C^+X(3_ za?XyR=pP>6xf9Lzflq3uVqIsfKO|YqAuoAx-`od;`;WUi3fiB#C1`^fyv0R!<)Q>z zwzDQAq&qq^WX$YKC2jSPXvzwOowP+>u9<55jsbmSba8w5BHjz{i2y)X<$`v)wEZ0N zUe`Tz+7r!%Qda{~Vd+Gj-UeB^dlbRwa=bxG3_1L*a#R)1kDCeKB{}M>z;jPI8k4qp zgE7a7=v|*qp#|*x`vh-P1X+V;nhHmL2-Ygq@lLsKu*ewMYQI;dwNwNo*~gB9r)=AF z378Z~8s%Y)3d+TVa>bNOq}bQYQ3^Jzpw48+ShP^sh2k1bV1 zA4umKuJq3u$v$#2O}D1z(n+JZh&E5NkClIPxLZCWNySlF8u5&ksanb2)iyp#pL{3C zK3xT2R8X=Hu%N4q3Kn^40$rcvq{Z0VWLIK!z=|uXG8i(}((dVN@r8D;Jvy7%kj^xp zyrv!c?w*nDljLnFCqaoEu>1J654$!$p$C_Z#iyS;>PRSD%^qc>vZV?l%%CeI?{~=2 zRp`A7k)pS*8t>GB=eQcTtLd5pWt!6VIhEClCJa@d3k4Rh3E1mvR&%BBv0F)LGNO3^ z5}OR;uM~Fvh`B7W76at1Iu1E*bD_P&5h0-o!Cj{xmXVitdKT%E>~ktyn|UNJc8}9t zK52I6ZRpcArVr`rdZpw{Y`j)y(jJ3SFh$2fU45f12Cj)H=#luYp&DkcGQZDNJl%u8 zXL!ho%c|cB=URCM(NM(u$s)40;Hu&e84ACueIQ}69lz_eKzPnwCt)QKDwj@4d~v6y z_fxO!+6VfP z0R;iUcfbGpzMp6H#P05%d(XM&eDC+3!>Ow~szAjo2hJ`w)eD#7|MLEId6uQ#RJ{15 z{&-XMG7D5aovZ`^uSObmm}+_U6(@}ik9&RV^-hfzjQ>VjiPp5CO=#VoJOI{XCuf*u zmzaa*xR@`LS4;R+JEQ;D1HHstzN`w)OsaP)^4$-;3XPqN3-v!$wtyHhykUy$3VM84 zw)x;C^BZe$Z?ptE_0vT5*MCu5WRS80BQDPGONK9t$vFk6_1;#mbNRVP$~&7c6tz9A zmYDnaXSWcg55oDPNsOTxyWnB%*$)m9Z>tx#2ERTE+ERI+qVPCF#NZ9kU{ zd9ZHGOB)KFoe|vsS`|;u98*vQE)@U24I4?y=10cEGfJ6Agdj&(zkzGJ@--eH4w{!J z5t!ugaq{|jlp-7oW@5oi z!GA+u!J}!MT`y>kNsh&ZtxHtItO_nK#%>&Oi5K}oTNI;6iHsCS>kghhEblB-s<@Ey zZK*h!+Q9=}@yuQNu|6+!o2*`W5IUYQ(XY7c-(8838?Kf98o~XYC0qe6`c_3mNyRc2 zEGy3`*{n6wP0K=z2v^~v%OUe-`PQ%P{waM|Z*G9StOU=AN8ViBJ*h3DL3N^D={@e8 zdRXye!GpyiL}l&(>CAbg$b!jSL;(73028cqcx+z?Mn+U3@doX@}OR= z#bgrU>fdrma_CZ%6k+X3B>w0gHDG5*{rVu9&Cxpb=&rWtf@H-F@>YK zW39Ra*uYv;IaD#qfMo1{03^txEK@t~9REG}MHzl`zH$>~3?VlL1JPiU-Ul*d8Vecy zTWFLsP`6G_HL~=%K{y_Gnz2~6Ve?@12yJLY=5fe%pXpZEtI#N!#8HS%$KeBxD3?aw zSy3sKP!r{V*o7*XX9)tjAN(cBLBHfCiopchy2}*PL)1OP13g28Ty!xkfhmU?gyrXVqZbQQ`nWcrUt-3vmBvJr!W@g1vzeZMfHL;9 zVogL0UCKzTEX7k?mfG@ZVmw{#9xh641Z*a)f-BxvM=oEI#lY85vlP%8UP;vfjyO`M z$2lVg4~(R7R_Y%RpFriXfrqQ5z=!8Y>Yk-IF<==N>!8B z2iYZjO-{M|lXZJabfp3EYH6$#Ix{e^D~5jBFZ4Nyq`G2CiPb9U$AhFo&v@T;!nt)V z3eIhcKTvJq4Ju`gZDY!@I;t$7JxLpgLVyL@bL49n#G(#jS1n%h*O|srhfrftE_J^S z*P0{hAGez2O2vlhaV=yWvLGV$u$al7E6e#lX<=Sgi%7vzm!59v%_k{kL*`bi)Ekb! z-o6(5hTH4DNuvI#^eN}f>^Jtb62o*2KKH`Ihe&D0Qs0Ml32B&(FDA3ZeF+)M4=-C} z%6(z8G{=qhN53kp&?ALTh4WunDki>+<**Yy-w_o!c7=9M=nAX?&hz(4YHksjH+hSX)`Y(Wr8$n>u&<0H^F?t z7~ZBPm9;y-zAmU~K!(grS71u0}drhvX&VGKOj9Vx|&>R9wc;Lio3ysw@DD?n&h9Sb2Zt z&&2&a2eJogFl=rcY{)n@1I!+Rs-rUTztF{`&90+mcwlcoKbFX5x)E z(dBc*yun{+GdsYp5z^16gDUiLp6@R0@XvYI^X!@?URi_N>a7^7aL|g&#Ba0cD0G}x z0SGxLA@y~X;~F#Eku#RVP}0k=L`g@niUGKh>7eIvt^_V{*ZTvuR2mGOa#ZIsXGt zXqFJOVW%oqAYvv6hyP~@+bUp!Bgg6gbiKU;g+VB1?k8r z*?Wj(RpA)E)G?dtO};KBu!;0(kzleLQw1LUp?Je!keJ5Vc%GP{?3x<{0ji}Z0HTHv zAB{34zL#=VBVH!d8SLbLi%W}kTu);n4|C8gqSN%pyJiN}fc#uPCVg!VC~B?w2jD>4 z;=d{kj>e^JYOBbw0R?T`{{WL%vSZJfKiVbe!cv<;IZn-JR94`%yy1R~t)aIf4T z3R_`!G6+B412P?O{8Lz3QZwMWZp}-qZV*Rlr5xN}J3_nMcl>ICbIdT9#51=PEt}A} zvi!8Ffq6c{U%gsSYZ2|r0lpa-CZl-@V$WiHH4oH7~J5(3j4CkG6lD-F;<$#A_* zT;Y4wS{=Dal33OvX~v^?L9}(p()+rR$ogfk%jo|e!-*QhXe_E%{(o3SYt$FU^1E(X zpV!LYpmEv*zA~w*HohmxOJkM0Jr#;fIf94xc*I$@y3CCV{7ID9z~mr z@g%1=itva0X`TUvMIE^ukp1-m^}A#(B^=~?NbffVrYbXP-xPjb-ndX$=cqKR%Zrre zsDun^5G*t%1jZk(nHbLMsr)T3-L|!Krd!-xH=aDTm*h@WJ0aanUG1^>nv-<~rX5H; zd(Fudeio~l1GXw>xHC=%qt^%l5Zdy1yS>K~l%IG|WW4c<9;o#T#Edarka(w3e76kxmg8h@jP|T9>haLC30T}P1sazf zwcvM+WE9!a)#6Id*hoxuD4XF+q>&Ld;fJReEISlU! zXKYw__J&zMCAq>-Ir`o9)a2`wnysbez{QelNx#)5#bWahxqsBqc zb%bk@@^Q*9L~n!fRIvr+(sk6ZDw#&`nj-6$>;rPG)j?A0;zXB@fd-kohyQaBO>Uq;PoF15Xf> zpY|m(J~EapzOm|lk-sFXFzx$4r|G}ks{oHG!s7q=NB_@F`hRa2|KDvw@AGk`0nH7_ z%bn2gnyu*SgKTsBwTYO~l7tpTJTyXA&l#Cr!Ii9hhIX~I=0ZRC{;!nW(*OJ}bV=)G z|CPpq9DLHAj=lnY5P}FJ%@z6~40AoIlnL?g; z8i-aKe4NkFWx3bokRemBas%=UY9`pQ^FvMTZ8f*tSFJtQZQ&6{JD<9$s732HLm{MYceOR)U^(^;Rz3Gt4G-o>QCo>y6(8 zf(Eh&c0=6J*oQVco0`#>$&t)Q`E`a5#o9SSEC(Uk4G(6bu4@ynyqZZ`V+TWD_kvzf zOouGz(z%Uoh!aJJp6yMKAl66PcY^TJ?cSUgOz&Fw?=Z-BVbA8n3@5*sz;X|CA; z^bPy3a@}a$Nc$f^gG0Np6fHJr7)gRnnPlC+YRA1F^}Pp@+%5({>@xh_^;z3G@8=hB zO+Mj=T!>mbp+ti^w2hFW!O0mpnXc`FFO*)P_7~seFWq?{XzXAhtxVHeI4H-C>#yo( zsGcQAkm2g1Q>JezjZYn17m3M%aP*gN*o}7+*WaT{caRyf?h7Y}gbLSTBkHcrNJ^zfr74RqA(9^)S6UWnn7iP)U}4-@4~);4q*fngnVe92E*Nh(S+& zS8B&;qjAW#dWpF)nsLOQieaXjEZrDS_F(YTEUtMe(!?2{z9Dy>51}R$0BS@v!>D&Pa16Q z8C1}w8AzZS4bWn$`vyhg9m+>OrRGyxs4$-<<(3<4>30R2g|7WR13LTzoS%AaO0Q0I zXbq5lx~fwn*bf|SSTf6Z1yxlDp%O2sMIyaNbA6&d!#~hoI>3e0!jZ@}W#cIn{{+5=g@dn z!u;ZPu~?N_r&8xv6}h6*rui_a7pp8vhSKF@I12=jMa8h>C&qH1BqKk%u2u2ny|+}O z4itKB`&4#wE^!IU%I`iKVbgw^WcuYboz7NRdaVfezJ&f()g}_Bg3%^7iHWQP$ohCn zvF1K}SYdY9Id5=*Nj_vvL9ayDQ8K7fxw2(WW02P|w0z|Q)o0?pOhuM@xEIT~gH)?@ zOO0)(fg1^Ye5BH{@-0hODi^srBT_g?@iVGOzXtP_`YH#vV}%)MxpuD?^-;r1X!=RG z@EDEn3U@@Uh_IcBXYfh48#zt6J=LH2Y9r3okicnV1A1CxHeG8T+lYD~sgbUjvcxdf zZU~hEdSlqT{aU$%>*YK*56h6fL1IhJfKz{baVWF#jFzq746APh^t&zf@3|;+Lz1AG z@)&qRLWFoE=l+2U#A^?C1h+OzT62)s=;X2Q@;fER1_IVrT=v$IvfV8^QupJ%+1>i} zOi9w7P$72xJ3v_T_S5P7AYud-t?l5wZKzSIC`2>1ketB!Qw$dr`rG7^uiXdPK(j}5 z>sbS1EI3lGTFcYF|?4bU#W(}Ian?alh8ZG1#L3bEu($Of#pLK9h zhCjqgOCMh6qLdBL6ecL~p;X~sxoAd+EgDgoCCB2I3kuwzJG7_a=)I9QoVmDm?5$<( zs)hTPae>D#jyszl9-zZLvME88K8St0d&YP>M3=||@&?aY#F80MX{B#8+C6bDXgtMC z8?>`AD$b&R3s|ye@UO+VybGq)}Bs?Dd| z8Le8jpP3O7mm8kpVYe@(#!mpE^C$Nk8_`@(=wxK%s*H{|ZI7>>QqTxbi7b=itV=kR znR9JjxQk-ix{iz?N?~rL&Qsl{^RsDG%7-KbLd0VvNpU7b6?Pa#b}aJc!No~Wg(Bcb zO0g;oHLqq^{o0oCbA{K9wsj|)hzazK@Gpx$=Fqf5>9)FOK6JmkY!5j?u{NI*rGuQH z{wKk-M_ZD>&Azj+-@AR9uP**reu(z*! zcz}z*T&-JqT9XKa;jm*G~?RH zvzCLUYgu!oZJwWWqPT6yajmJ`&u`>yUa`G6&6{}E7qa%A9ln$nByeNlVN+|7-pYk7Yqmp@s%JgW&Nx&rlu9>aAe(0*jvY$yawbUKiVU zXXNpJfUj&DEl=9gzWgaueCI*AXhX66GwZJhG|h&58Cje7dUz;t55~ZOs3;!l64n$O zW961I$$+5|vOS|*F%S0mEV7Lvq4xSA4~yNp$LG#}WQpdZ8?nKXS*L#2E{U*LDZy}f z=cuuYH8q1eGQYcweMd&)6`1%k*3z*C$a%oR6wRc0P843^Y4?&aN!eQhpG`@qaLX{Z z%oNC*U;jg}p>}^;$XBo$>RO`0$OwF;K{#pYgSF4MlYB;(FdsVgtAk_oON)F|Jxi~p zgYjQ;m+e2DW-o`f>HN3GMe57;9NgxnHYA(3^7?w>PK9?AY?r53MP~5d4w5f|e)pVp zDoDC)^}xo~4!;|k1-}EX7>i=B0!xQF%Z_T}yr#K#f{n%Y6ED=>%(tFQ*D_G~ZkhRV zD6hAF^_0{ep?%q&pYCYuN*CmgOhS!{b_iD%I95{NC}w znuBCl2-=x+H*cr;)nkWhaZ`nEr_+>nbg_LtEdv+db(xu<(Roa8B_z4sB8;&1qj#z1 zA4g!6>q-DO`&K5`R&$Mr+l1h)AW=pZDc`4q(Y|)`3;%wOoWhnf>$Y@5E)_gghs8?C$Y~glG4qz zCNH|hg+0GyxUG5j=9~rV=c67K+D?1s-ixn@7Ty}~cbvgDZyBB$YX>k5^>B;-F}7(9 z3hgo>xKdm8gmY{a82-AzvzNX>^ukFpHQge@q0sMSJVJU62APWW>E-sZI=Zl&S1PdRpS~#=UIA z)n)U06^f3e9h2n3l(#FQ3H$k4t$JFcK0BoI)>__@?w8i<({*N~1hrIj()*5$0`@Ug zrx|**PU}%hx2CoRgI`8Q3fAOGVX>>e?=m1WO>TxN6f4bDV|!AO^)24}bd3SysI>t4 zA(84Mat-r{Sc52b2_MkUiAy1Fc;ArsNct@yTdY)Lx(Rj=UiP5ub)hU&r>!e4v48GI z)IY#-UL=p(jSACHzV-1gwf;w`J;^Bd-8JaAWmZsj7VE|d$@&eR;z@q&qMF{=2&UMd zsyFlObnm7+VkBiK1KHO+KidsBb5DAvz~3l)!huCZQKg*A0(AU;wS;2lsZ^|BJqh#f z+f8DV@2PUz`S}?{X;wrghbZ?@I^}<^DS>OpTdT&KQjen1(aF81bF&VpxcK+wVr1h5 zVXfc>*75d-amzyI<&L92n;ni;-rsXff7@<(p#2L0L1f7qG&nfUWa#VtdpOj;Z$$;w ziQJ2P);I8?b8Bsg(XYspw7$5zfENSDmzsruW zjx3U6j=*}#BS-nQT{AK});K$jg+`&vkCoiM8CJNIT~hFzCVJzXt!)fs*}PhBUpvv(nDm@l@AF>cY45z`l@x5}_tJeN4S@0cL8b%8w-qoQA8y!SNY$Yf7Y7P3hIU@!vq?(+FYSn6N zgl*u50(V-&PEpAWp zF;M?HvG(pt)BeOmeLc~mPfT_cov2j;_3>eK3a%)fb(X-)pmZuot&;C`7lWGmMCa)J z_jLSAQ|)BD^y!i`^Ct(Pc!JE3TniT#S|YvaB1HyQ-L^yMVO3O{#k zY<0R8RPQbQb$PP5Hb5~ht<-rY>KIt+i=5o(vqRM8{9fe8V`I#qe2s@Wh{c^mPuz#m%SZg#~$ul!u4d>PA&HnxF=HGGn>&m*6YS z5c`8sh4EF;({_l@x%y9ZdSlG5$Nsy7Sl{n6QKQn$Fqk9!H!_f+mjBu_>B!s5Wld{i z^7rT%!k=fL!8G~fgX6>$^7}^Y#-DyvLhJb|yY;XB<$HDGXF>$jkpuNqSKSk9uBEYF zpaoQPw~ogy?W@J_+hG=ep3b>5F7gW)Wrpbnc#zx7C29G~Y(2dGLDl2Iw-r1T>20;? zv!C6votKby9$fK>RfTZF|1?vKHVbFx>T_XZNU-DSqhRYB$XSpM6=JQQL7rr2Laca& zt;k48Ssm`D*hzB2PMKb!^843&XXJ7f;ySBeRKi>Oqj&(wW&!%CzLKRm=e)qKkN!L> zheWonr`%^L;21gh>!BqX-a$Lrao0$j-);b?i(PQGk)enhH3N$CTo`p7Ux#0|{I~R>h1p}F1vN!W~eDNXs z(cbiF_ERIkm%l`tI~$*`*F28hm7+Ss>>uP|A4j`3srG=$?sq?q#gq0wc6wjDwT@eF zck3zGy8LQs;U2&z?4CPyI_j|scNtF^DGjJu%UeHt=zdSzyK`nnb+2Qdm|!7rEL>IV zh(N7Cl(lEsTkPJfx1agVShG>#Xwtj@9^*^l1`I_P(vLq%KO~oOpZj}%5>%o1z2{ZC z^!`3cN-Sn1lwgUPx^rRP`cSb&y3@JinS%qhRI+`G?Zh6f;P3Zr#2k7ldUFJJZMJUM zXfiL`<(%VTl9I!7k)pMb4+HL38=|XhYD^gqVe10J`@w1NTb``E`n+fuZnH2sSR+nx zYVU702$CTb-sw>kol<+y$ZjdP>v2xnJZ-dz3wvN~osUR+h`lid-3(ltT>kh6Sn67) zxpjZKaEB*iynHl4tu7wgTz>_>eTL6|9&5yx+unnv_Zzny zjh*Mf$=zT)+uaM~cBgo-^H=kWT#?wj+Nj~vAU_L3Pz|v0Eoql$<4y-fzbsT0s5JT_ zEHc>k-F=(h4h2q<%&VCsuR~N#wyj65l~2s!*iHuOA7H!b)%wuq3QM;4FW=FFvPgwU=`^WkCe&nHZz>2OB>a3N`aG6MN0A`@h0;0X8wbfJwGLb___MuZ#CeY7X1&MQM9boRsuW{DB%LHo^shzw2*HPp zaQ_Bl;?=G<&)t6DzN0JO>+m+o{EC3oEqAm@m%g(ZJd4(Oy9SoDcFvql0W6;ewma{7 zwNKQtw|e%CaZiztUHH4ftNfu)u(_t$sZM|4fZM61J~#~{lR206_;tEY&Ggp$J`Oc8 zcir1b?BpWF83KQ%3Udx?stT6^)9b#`D-V$pA|lOmgVQQz#Gwlf^+QrBi~;L$rD^9> zV}yks^SIL0or}C-9!A(Z_jb13RY6bUEF6IQLjuSp(9bs$O`;Dq?|+|XH|efjAK2NR z1^M;VceQ+^Uvo)m^eGGO5Ay1^m8WGP<0G78uT3?;A-MBq(D>4@wA?__fUV4IM#2V> z&p8!4vScLL$r<-l>aBgZ%AILE2LJw5DBZQ^?Pk)La*k_W5aUbNSFP>XxPSfuYQ$t5 zhGfK*TSlunVgkqF&+fwnzvlwy2Q(7q)}Ab^*#x#^de#?uOcl}<+x=t^5!)5p!}9nW z@S@JG13F6@(K@d?R3S(nKI4#3!QJoCZAQ0gyZM1&f7OERvV+m-5$+uZda!JxSXf{S1pJ% zVMJ%y@-20cMl#saaWjw7y%BGH4NRN&FgC`YE}b#vUP+jBn#m(>jHFsbwo}8pPyLzg zeWGe%$_Y4IzMn2{KG1eC>{M99d{I~(i{fZ~hnu(W^JX> zA3q08&|M|c90~GKp@4k_(>i5pNv?lS9BoqKJ&_mr>4Ms}^|R(-rd4=|Wu4q8~$$%YI+kUWV+ z3R?3(V)&w!tD@1j@-y9xoFaHYZ{m*R#OFLCckd@ANNjVyG0>JJ|^R-8}vQ z{7!iuPgkh!8{KCGe0L&4=3}n!vxtW8t%>3P0B;R!k=Oi+<&H9&?6kK5Y<*_-ixY}i zPd=E0(cvcQhTvLra~wIzGiGc|R)9SdCRQYyt{~XHZRvBX`hw~_8~AUTFa}*P??fEUS=0{6Hb(Dj zVzQ@kb)3%u!&OPUre)YK40nKWafYvdSkZKLu(qmv@Td^{{zuQqYlAiEZ7p=0rXwio zy$B`V$g;PnCik8r+h;tEbQ|L6+;LG2|4;$cBarq7aEWM^~`f&1t{oAZ_853BLfjnni@2QaT67>$C?`K(fmyOAfnOiCp1d{+IGs)wp?*5@+wwypFxp8Ll6D3-AjUnnY8?T z=ZUW+EEZ?qjPgFZ<4%Ep1oa0`T!HEUqhLzgIDyF~`e#&xOMcLmB@87aYOAy`1Kq6&V6O!Lpr23LJmE_%}mbIO|H z;z~O5{T2*uF;O(|9nEblwrx03#UWvwlLE=-L=s%1%vZ>LQ*0wXmN?Ndh;u?V$pDiu z=pr={V+2$1;u#V4d}yhvwUj;8POG3j*X-C$&r>>;RL#ZD;><>Yt72n};ip8IvIJZ6 zG}kYlT2_CgFC+M|MffAYsoJJ%r4AZN`<3xaL743J8%U6lZTP_Q4QYVvu7UAozsj2) zS+CwvxRD>C(CDtkZSP*TN$fYBW10$LyOSBWAR>NWh$L5}KpZJb3J;uh8j}>U-i$ET z;rLuin00RxZKneZ67pZOXJO~aCTT9)kuO3o&k7%mVPM~mmEiWFQqps3WDIiJ`=g;; zEyXOB;x{cE{5By(kFA`xV}$jko=^&LklC`4qDZKdU!Ej z^nI_o(7FQ$E2KVsL5qN>Jl}|uVthZ#K>Z1@_2;wQ&t4a;JOkSjqZ27}+`fTWIpqR@ zC+=>6him5zpp6b33+t=SDTB2u#eaa5xB2^TBa_*dqUTUFTwqerABd-0u5*a|k(SN3I?0$P`uy#3K z;0M>As5a~T{uvdvd`!IQpMj=St&(*ykjd}9bK}=gHQ1eCMS5FrD0G?*WUa-C-$Im+ zp%AQ;=-1M!W<;$`^Pp&vql-~hCrr@aa6c+#ITs++EjJZ+uW1^-dVHg6gTrL4!*J5? zUe{%RFTNX5pMu51`hBlP=iiG2J4X{J^_>1C4-wZtWS2S)Zm)LEEjG0G{KD0=SH4Tt z3$P9PFk!Lsy_{)iUoc52hAiIingzRn)|;6s2Mia^Zy`GGhseWZb8yDe&f+&zdd)b! z={JOug?EWL@-A5fy9#cUArEoL39f5Vu4+bm?-rhr=y3gIfjZ1y~2W@ce?WJ;`fGKG672J(ItK`M%=wL@Yw z%IgXk^-hfyWHl#W`#GAIkv{TnoSdXpi4cnKo?eazvXrQaWLLuCJ}JpI=-S3;a=l-; z7Td28t9UtvTDq3t-`r0Dfk18+6*p~etgxT}hEMMqU-roOpM%=o$HT|cUF(L&*|b-R z%2RxMA;na2&gXyk02)Dk8t>MCl`xnyARO>bxK|Ow)3|6QEsCi(|c17EjAy&ejV; z=$oZC7mma~k8yhg>)Y2P-^#LN*XyQNlCqan#QNa!0mbx*5(REijoNlR0GtOgP-`hrk_6P2F3UAOQ8zwm^(!UDax{Aijw zwna!ew^xZK@IxBDx02B!cE3zQ0;|H zX86g#+itX(pkm#q7xpt{sJLG}|UHbXt+eE@K*Rg?tgeN{stF7aEzt59YFG zRVV2zNmM~Xh4RS*r{<DKx0RT#OB+5=3|-~w5(yNcg|5^H1uGg+UcfVr@}zrNc{0m6$=Sr2Kt_0CbiUy4n@?65+5AU^) zRz-*p5TMw(x$S*{7Yz)(thN6DS(JyO76!j>YX$D!sVGJKYPi&E67}a0Zj23%YkYm8 zj=xh*??OdS6pW29dok!WX~j8MTGW`2SKi;E-N3+iu3BsCORguDtuC>dJ%2{7XSy*5 za(&UNNWt9%q~aI5OY0bBJ=A~6<{#M9;#{79TazclJTki_dlZnAbiWejh3#E98VkKe zWC|bt1QKvNdy(Xa?wslADw69$`b3SMv3;t!C(@G86U~qb1&96YSaat;?HJe@3k2bg zv+x~0Cr8M0cKdD~?~&@fxY^p1#0nNvs+spay7r#czxk#k0+Trvew669zVxB7%Xt~B z#kDj4=dcDlvOMJ1x9aWn%3GXs;hUMzb+Eu3ZxEKDP8$BVk&k?8{5H1Dw)$ypGS4l( z8K=nLkkn1PHx!VXvkxQ&NR{?m*js0USF{bqH7NLC^c3A$#z!vVzipk(vnH$u1S=b3 z^`4RyQc%viwrgbR?_Epotwjms2b!kyX=H&pAA-T0C4|aD)!thHD(1mhHX)?y-amgX zI9Ii6tsq+G*BcVDuo_TY7R0J`?RZ(>J=C{bwX@34>MR^H#^-g{$%+i09`6L?)Du?S zKJB6Yo6IzM=L|Op`B7VabT-INqFhoFjOuH)0IH7mKeX>1+AjO^ns=b`D3(H{aY7=O zmcwR!yH>zNUR=T1U<1mraQk0m^IAY`5(q0Kx zu3J#>nl{^xv|D7=q1URQ=6;l2^D+6gu_RUEI<7Jc{&y~cq8?T3{TrUCKa#*OxOdfH z^K^9fmgZ(PcE0+RPb1fGf4w3*uLeQcw&m(KlBT+7R2F~vsQ2E_wJz^H)M-m3w)%KO zjg}ZX!bT$P(VRqeuwV>H)(Z7A%WMv=)SX%p>Jc{Jg=D`ah?|3eZ+gAAcAP`B5TbI8 zH~C|uj#RB{Q%&NWG^~~qhaVk)?0-7!$$vWR@o(<^^QYCm9QaHpO1%nfOhdxHv+TpE zM%YH>u|y7|o1EiA-0;w?*4r3!CC0Mv@Jx2oZ6mKGh`I$<@)Bs1eM}wnE0`s(MjiPS z0mg>hz5Ufji&f9ktbL?)A@cmdMA2B1FnxQAT{nY1mI0>vHL#h=kuX3Wj6ZopQe~sY zT?Txv|0|sVDrA?}HQ}&omAwfZuvB1d(IZZ1s|QnE*U$LF=P*6VHL-Y zGQOw9PtW5kSlX0L&!7mMNmaAyG%}+p;>Lhy?D3mI6aJsGs9vGq{^C!fAz+a45+lEt$e8!uA+^(|;}9vv%={Ud2VlBV z)~`>&{{XEz0rxswyT2K9^mcz2=;&4MWR|o)o$Mm-3Iuc65_ubDP(@KjhgGf5<#wmW z#Wjg#^JN~ueViGCbnjP^+!SlFmNFC52SY3h3+iVzLTr-y)`5NMY3M+ZHD!L=vt=Dt z4_{XTJRfb4-NAmLSBHuCp}_(DL5D!$N;9a259( zC?D$>p&lRGTm$vHpL*&?3gV*|&O@ta_FaL#?k?`u)$2o+rOJ^>z|yCXN1Q z_m4I`Gj!B@a>-wJO=w%#RG8&HU_g!2{gB?DgT#}c2Y;AfAh{B+KXo3`M{3}s|I9+9 z#AMiVp{DC-K>y8ysm!`;rkNU1W=4p{wbG3J> z{(lqr!A9Ki>58G_e+l_(Tx#u``v2lOTc2*eGBnbjUw>eEV|Z4Rpm>w`tDN>|h>EI@ zsT~>8)&w$7Eazf{sHc0vR#{QtAj9J`UiP_0j zq$Dw-xni((HBOMDJ1&bXF;c@WUY)coUH{03Qd5-QvMYFG@RsX(M&g;jhCW&+>4B(A z>Xx}wzfh+{!#RpQ)W9RvXo<{1U+L3&$_v)tZJ;hcv}?-X1v7_c^nY=-M1RtoVIBS* zum0;7OD4MGOKK3ujG*EZY_XZ~^lx>h{Si_6!!>jxbImjc1c$EPAlA&|BWh#pG8N^e zW^_sX{&{6A`oA;4dkOlx^W=JdvQbcU)Hh|Mn5!u~lh;gx%XS{E6^_wb#jfuS9wmR5 zC-(x5`5J`XYZ=dp_v0Jaw#%LW)W-hk6x2LTBdJCih2BeG|6i@WZ=3VQ4J?RaC19q9 zw7ZjhNq;KIn8mgvFkJru^e%5jw5(<5H}xd@t=76muy)dV82>LJ8smQ!&u@_QCDg)H13(cs)&)%@VAZ3newMzx0GOrP%-M zZluTIa5cv9$wm61$i<(CDpumbPY6HJlxIN(b2S_KDu5Zy>d;k?HLWAYN3BaXbJAz#G(HB@q0qs20g`zwE)XKm2R=z zoO?^yLglXp_93?%{-;bC_AkeWUZUd!fZcAgY9jGV_)ziB!TiFiBv+R5)m(B3%%0zUb zPpD1u-lgi93oeH)c~G~^bNZ z{Kv)j-hGXi5?j)ZN;sp!Y6MDv{&TEmE5(-m} zn2tG(d-vMMp$nVDH08xf(wcaljrnbX>!+I~A~yuPDc5tp&XF(5?)|zuJ80+Et!QK1 z6d4V5tf?qtu5^998-~<8he@y#`KaR^U0^WT|?{oWmfVDPf$7W?brEr8z~EC7J_9T(qmt5I%-+0p9Xk1`qn?b)*di(Fr%YR zLG!?FY9V2KC7f#<^`TcJ6VOUpXK~M?+WY&Y>HuGdqY4Z|e6n}C4xw%T0Po9KT{uXbDYm$EQUy_TZ|~|RiV#l#Au%N{U_Xy&UhgoP{M~A}s&5m+9A(>k zQsBEN(7mj5)sj+#19cot{MhFv@S$wkQTO{kjoPQ@@7MenFk%<|#8OL>SI953?l2@Jt@Cq(Cg%&aENwbmR2Rl*?M-9S87Z^2Y7>_4ttwV{FdWV< z#@D@u;ruwVeL9^TT`ev8!hg$q-kkCmZf5e`RK3_+GdtzR5~+)DM*u+1wCCsYm6~!}ze`2MVX4ve+lo_>n zNM32PMY3k#1w2trJL0DreI4}nnXRSnTwseWC_WW3DmQ$uMeC2yGHs6M9u?j#i8E!5 zytvVw!=BCiIt!$$2=u^ZA2Z#NpAQ168CBfpEc1pYah(ZGQrfg+^b6J z>1c`gKYp9}4%)`wVQK#W4%Xp4TbGmwKBa?obbTsPJphlc(_T#yC3%BlE z3n{J@f@LbOxPPrjdAr=Z?jHuY_Z{v&oCLhiT`Nnj$WDa?yue$FyHCYCVJFfpG$eGu$jrx`FK-9;{L zCsqIs9ux=#Mg()i_R(ol9#=_OBcH$TQM+WVkRX%<R&KYXPNfW8!PyC1_a5MQHU` zQ$f=tki#w%&Kp2c8E20QQmoCWV~i8vMFr3_#7B(s=lv1?05E0juan>R5O+#7UA4DH zzHNh+vXT_H*{k-~wr($W#euioEG^=|8P{#T7H==yq$}F@OLwYll7?V(0Kmsz_%zjz z=Z5G!BM#nw?95JRP<5WT@ z!~uj*X&_>H^7cg#pxh4y@Wp7SsfZI8lN3$8WN;t@{{T$_!A#>XDtrW2;2lKdOh>Yc zi@-Sml?E|9Bb^s}%oJv;pSy$#)TdEFGB|_4j|$R;37tlXW6mcdQ;5oO!lneCq6Z%d zpoL&z2kXwH#(+$7pX;u#ER3d&Up6GR`@X;%Zw-5vNlL!1!^BFEeR#GuJ*9 zY*<+g*@J+Q@lQHbW(ZzL0Fjmke|n+RkGnHcSQZjW5d$2dtJN0>WH}?Ra~!a!(T;N% zdt;yf05bwlfT7ZH$}y{+i!I+p+SSs85VsaJFSTc?obR{WZLg#OxG!BrWd|uzXR3vb z$9K1S`H*exl-|=Ab(O(tdwAUUUC}F}Z)(}JkZ~ohzev;mwGzLV+%O9W*Vhv#)W$Fx ze4l!h?7KblxhmS1ad8E;Xz9fyy6W>s!$fS?W3W~-84<3stj=$SHF$6P#^&{__geMK zNaZc-Zb4w8{oPfn04<(5_|sd{0339gC&q!*5IScuJ{3CS0~)aZ07F4d#M2!kP$rJD zrX!|A%7<_D3rB<|lT-X~5j6GfFa2T=?T7D+0 zJ1Y-ww_aB*dw;SeZe0XIp$0+)`@U-2e4lr{wL8WSxp4ZK+!+itYS3rwRl7sEZY+yW zdgYsTZZd^^!JF8FKZ<Uv^!4h&nDt<2y@RZ*i;CGn;0ARB zpHfH#NWrr>48;=H8%P-*X1c*D+{{O^xM_?bIs2oPTqxd{IpLV$6d{YTJyH6pf-?mJt5C!d#%W7FrX%pe5G{_F^0B43zxU95jyz<4i3o zvN+NBjWZa72Pz)6g**y%PMk3#DmpD0F{=(-Frp=nvw~zni^25vgC704V+i5}`9ttm@* zu^8$1*0m6=fD zrs(@?=2}G^*7!>{p2e}OmI-wNI5Kl&9)C3(d#>}k+*%;7rE=p1D-ooDgHt1tS_oz= z#&O7*#-hY{l>lMxqPHPgrHIY3pmi1kFazppBT}X@)FhbVD5AWPj;O=-*0wtE5eFh@ zmTr@f%Z_vqHjpv^V^g3eP;)-oO$tj9=6p!;0>6zMO5{yxQgjT?K>O&F3TLPWF#zWT z*1NK&JtW8;KX{sFgJ>zzUI_}IY|Q&1NP z)pBHeK_ekX>XN8%Z2-Xomo=og7T)2Qljdm(TP`%|X;vQ(wwR^G51&Hm1PpY~6G?2T0GR+8GZ+&B~eSi4wV?t zwUEs59{Tj;<(~}y08L`2ff0@eFQ&Hru-Y5G*=EtX-ZxfGyQy*IZCbRyXh*{wr#JQMYz@Xt83l6 zZSBK$Ufp@d*I}&Kx47Gphpd?Ozx&N!+0#(nfvw!*{$Ma%aR5hAiuum%y?y22Gz4-I z(pwB!R9g_8B+yfITwX3SAJ%DwvPK$NTM-=nqO&@=DC;K?Dv_DzSOA(aXdHOg;m9P(X6I8Ro=cSY(zF?fVsVds zN{*q9S?b~i9V{f~LGi|v7t~`A4QtjFG82jR*PB(biCn(A={iIno+O?inpSm|Cjflj z^G4mUu@R|>0}fR;Si3Z8JP*^tiU%U&j0c(k!=z=E5Z4W@U`nnendeX>fDCJp%)_6B zdaR1AsztCch~e+1cMW3DT|5S(I4GJRjckn?n8D?h1yw9p68f;7G2uup$#T$2<|oFD zusv1{)$qyi6i$MU2TNldzPdLa>jzLY>4Smc94hHJl`!_nB2SMqOJ>;69O`!&s_~Ct zr?G5+ia|%_r{crnpbK=C>X?#w(&@HEyn3S`1bgC&bgh)~{{UF$KpjXDK~gY-!`n-s zO~=5o!~qe9x`vg7chjikSP6;e6|p1Y7aI(*xY3O<_14$2-5VgY__B^t-7%vt}0Z>Y)F}pePJV=7#eRdk;X^tr7!_- z0AMi3h@LbV-_v4xNruBLBMJ&!c)80g@T<&>tLRv3?qklVK+?R4)j}m@up@;rD-NptisHrw94c7Q-d3 zsnD^54gx+I^48whsH)AiLf{zG^3yTw>Z?FFx38?)1c(C&%fhWXGK*-;qevyAlO8|y zYfvH&`=Aaaa>Ai@w-^k-w%HzBs|}^*A_*Rw7(NgyZr>?@(5?=|{KVBNRrwvt&`3~)RRX!%>5wffILqL+2F@7uc0@ z{5VCxGXpam&xIA$B5}`+LYzh<9w1aR25f@?h!j~4BQg5uf(j3br|8axAp(F3k?)^< z86b#)-p*Aso?glehMdXc?yXkOnqf(hamEETwj`j#NF1@p-&~0h4nJK_o7=*Jgaq@9 zC@CXK;uH+WI$pgd2_u1?6j>FFiIa{ZgIwyp%*n@<6Nx0k#((H31+gRyLFezLd;b6r zK4%!hgeg9VQEf0=&2_lX z5`1g1a2mPwH`@3F)+)&<&sSItf1R3$7NhD;dC|Ex)ODOt3I<7=S6mMa!ZIGlZWSyL7MOt)r%X7AJ!Js@BFp&DcRa zKrxn|y;ji>mAe280+}F4JTawvpeeA$NDVlN8b0<_x3zOY`G*UB$T`XI<^>f}95VnE zWhaNWY0~%uNdbi57>N_^t4(OD+kE@gRQU?7@lyywuBGS zR`<5YMo2V(H72iUQweL-t78w9mX!i+zUS;F@-1`-H7ReqY_61==e9 zswI0C>2&5j8({qv1GZfp46U*H4Rq{S1BN#(FX?Jv_HEiD0% zzp$nVkYiU7L)5*oK;SZJ?iNI;$c%EUX8E$odPSR?eZt=aq!tWQ%2!g?as`P004;Oh zhE-!$$7;@~xV3~N^y0*koinD>Y8}B>VPOF(b5n*YYAxBbXYkp9vuQ1ph~lDZd}{5x zs%-#6st|e<;i(+HLl@(R;oIt@=r4!8&mM4t?Zw4*Y-)Q)IC@kvIC+W(3X;nY~;i=9z^Q2eO z?6S60@a9iCON`34ZWdc-GEKM*sAZc|7aEGG2tXJS@fqV+FW$je4F@vQi3$x}HyJJv zrKNZ@WKAdKoxbgM_q&g0*=>^T;>Oj#!m{L$vT{>j&3~9|F75kn%q`ntt}VtEZNVw1 zMml`8(a>B-a0xS(oM>AXh+sy7ClWB!I7JKBS%ZTM%K;L3&^E`fsLYc&Q`}^4Ty$M| z&T)j~vHhyGcXhHin$!@Fb+j}A0lB15%uPMOf|ot-@`4ZvN__ zy?CEXZF$UkjTu`$Tfg3+V{zRZZ*hqOPSLIaz!MWb6n#GTeYB%oGqMXhM35z_;Jdut zTnL8Y&@CY_KqC@k%~zdAbJb)a6Mo1CTWR1pQ$lW-h%4$}1aXHL~&|W2vazx7&Mhb-pc!eVRGb z>FR?d@t{uEWUOxxO}(X*=@#Y&2aPgX+&08om$>_Db^|yFNJ3c-ku}_O_fF!kw+hQ} zUP&557*pwp2jZ^cmv{ZlE80t{=XOI)vdlCPprCK}pKWV-X64=6Ez2qD6T7_aD%!eS z#9}@gyJG6@%HOiqt_z#1%nC7Cj=UQWH5)Co1#Ye7aBuD%ijky=H#my7W8`fXS9P~K z$-oijE>2W7>DzYTTHNWkZW!s)io~82RCbM-mO@Kg1j`UkX08?O+aYq`H!c>jZJCQR zOA=Jp-P2*U4{=F%HZ2l#g$pH=s7{@8&KyhEADuMAvIbtdd zu_Kr0pd%0A-TY;-$Db69#$3T3vemTWfPv5do)%x{B@XJIRqM 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dhbw_campus_hd.jpg b/app/src/main/res/drawable/dhbw_campus_hd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bbb69b2375e734b11dc720ec1cfafbcd4f89396 GIT binary patch literal 452291 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%0AtF+yBwDt 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

0z}!L^&%&lM+$`PE{r`a*MRbs3L2O_k!eSZ4wdp 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ë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�p1}+)uW#-s2039IULSHAOw!=MQ?D#bc9uq_A4yyg;UbAd_ptP;{meH?BRv}PW zu$Zv-M{5>LN7jhWGECeREz}HMePd2$c{w6_sSz)yKz3&!o|nRy2nO)Ng< z)Z3K+9WfkHbeG!tr)br)N;&oE(gSW*Ys)A15iWBIId}S-2J{B+tO71A_+WreN!9J! z{eTf}$y0~t%)L;OoxDpRQ`ik=Y!pCD96>O#YV2Uz^b~c+X`5OA=I<1R%o=ljVv9@# z#`8N&1?zt>I{5|;cMJ2dtbfUcg{@`0ex?{%styLa&b%UH70j@tvun@(MLMQO*NeEQ zz!au;>8_A!XH^dJ41RlZ8 zqRd#B^#1^k{Wc-r^ct$oem-R#XJelv2S+j$?zh;-_=fu!%;Zp2OR0QH$!eWO%^%k* zAPf_`nw!oGaDSY2n2=t&L!_Piq`X_Np>Z?oxTCLGmJw0i!Dsd+U8?~B(OvkS5Lq>n zgN|dwsX<_OD%~^IC0=0+V!j!UpR*23;`J}Ul`Mf08v=L zYW&49Jk!?kHpe22R}!_@=wjv;wndG>#x~Gjb{fsu2M_!Em^Rfxm31#S61cz@@%1Q6 zrxxUSDc7#!0xPh)W?1bm7&Ho~pB4Fp(VCEL>F>DV>o1>4WKAbOq5--V4_!TG)(Rzx zHnx9!!7!Psd6gb`Z50h87{cgE!Y;!Lc=?%$pcJ=w@l%`v(;NP%Yy~yFjmNsQcK17% zm>_ZEea4x}DD6^`MKy}`BxjJiD`Gef* zM^P}boSXgH4SUML#9W6 zm>P?!(Y(tETWPw_>Mx6k8(uN(E9UCJ)noUFn+_3m!<-$yqAOr%r_3{4?y@|<(}dHk zHW$H4AL}qItmlh`!pmX#OQx%7Id7S@%b~4eG|*;@>I#f}gW7*r=l(3JxCl)V}EC z9V-qCHyaR*iL@HKZ;V6oHLIOQk6(!Fqx_6&_fpFDCWAlr8!k<(yXO~h+M0UnV}9|- z^r9K2FhALc4^WnG#9n~qk9%VK^zkn0tp*g{`pU+=rp~X|YL#?xrcS>pF#1|@YyFI{ z;I1VfXuu(A3g{X4{J>}`IUUzMB^VgDYmNE)j4QhXm%MPrF8Iy=0DDX|hzpk4JxBx# zAZXEV(>8BAZi4ZccO~UBVqPaZj)A3CzJ4b98ht!vl@zhr{cy9$Gp8!{*Q{FAv#>uq zfwQwW-NbPTh-gK>Z^S#c$KD95URun5d_YiyXNCU&>~>npgi*zff)-hWgsuW?J657j zEVGOCm04XNCd7bio|2Z4rrvY%&8R9YwKE9~YE`$ytE^Sl`Sa)IY(C8WO&7rr$Ff!;#fr{}a9*1U^;=cia{153Zku#`6hmC?4& z(C9deW1#pZVX&+tyRW2YXDS3dALMc+Vu0mgZ@!=^tkt^*`BME4AZq+(~4i&@j-)b&&H9nmMA+_I215CvWGh z8J%0#E^`vI7dkI}uQ9F27q0Gl_U13nHa<_ZGCUb;;+xfdLgcVr&r6m_YoK5=bzH+p z2~Ksby=$23UsILJVc#7kZs1n2yQ;rQ$<{7#utRL(q4tGM>W_GD8quPZX5NuL39LX@ z7kHK9f?cWJ{{S%sEArJ}FQO{<1I2MnNh2EySNR8oTZAij_j2N#>VAB|>Yq@&_%-K_VzfW0wv)IA4s<;y9 znp_#G$B5o)$~$)~Edy&+&r6h6Xokn1Y0g)fp9l9yloWFm=BuPO2nOhYJs|%8e7Ac3 z_K#nj6_2O;5rILPpw})S)?V1{g61%q#oH`aew1M**y+%hRW>)iV60xwEqVAD7Mg;= z?0M@K0T+M0CKMPr$m<8i6xrEtSVNy4<=muR3YvKhd&*8)vQO)kY+gF73}NYlT%%QK zOy~Qw#tzgdtVe9WM+xgvwxH`R{{U_p9p-2FDq$`oK-tBLIN^w1n%MOjl-LjrAYxIW z3iBb ze$!h|h%T8vB`^qIDtLlQt*q&whnVZcvQMEvo2MLlkOe|wiI%B!90ydWb`peQoil2C zLe_$)A$aKYnI8&uykz>7a_X&Avzoq)V8I2gvcFQmX0$$L4vAb|Q%3IU|oQ__w(qFi(dPQ}oTsj+GlI$g`@PX;gDsCihcpLip#^r{->I&gdhhf5mjg21oj&W{R&rJ>zP{|r6*_p| zo^d*oA?&|3+F)>J1-J5UGOG=6){lZ)ilDl!SD2#BD+{N8m{+BnDWh@7W{+Jr_Xgtu z4+dtC9bbF;npL3aqP|{4-tBWUIjzARsvD7w^7%b%?xpzCR7xjou(alXw!2k0IR%sm&MOl{M5OG3HR}KkXupM zE!yDp6|l>mK4m=?^q127+{=YJ3Q)N5ymgm_!n!LIxoqhkaeWMRU(asw$w5GIzNP1x zO81V*yXNH}e7=@5E_7QtCT}+9y6@vf^@eH_n|uS^Ai=ZyUC|qMMF$q1`nQP3_}=A z?XJ1&IMT8vI==CWrqVV=fQ=6Ry)ztzuR&kCg0cmDLa`9tvz-iX3XNb6W&19xJ1QKA zv1ww$&~2gOx?ivU0cHNL-K!PfaBajWIHa>3<%;se1`rlj+mCPUM@7ss<6R$E?N4yw zaeO+Mqzo3dXP*B6aT?Kj2WO|5P_*`_-A)n zc5(UdUr@@`&D(}rz|X@Qk}IO2THPE0d=T3S7o0jZoQ0_xz1a2eWCahE|0+wNA?J}o1iN@ zC~uGP)XOHo6gb=t9IdDY^rN&HEvcNNj=HH>LxUmw)ZEI!jGgHP-EG1@h(AVB6!xt0 zKClrcZKlr~>FqK1XWli@zz;;mUGy1XE=QY;pRqWPVrCj6m2laQxd(5AG!%7OgJs3N zUPxJ9fj32U6en~ZV{Sibk+IxAFdLxOF)SZUHA61c)bbc)WqGHgHiOmtLGA<~A`($5`EmyTLag*Qo+kG-*dhoBDE`>}|`g5nGY>72oAvy5O))iRUUFY`@CdBFo_;C_2AA{{Z$_#BX`*CLR@e6~~BqAaeA7dO`(2P+v!^&=+KF>3#_DBT{4~L(G-b z$6Rm4WAh4FU2?RSi=xuZ{{ZdF%LYw2?d=dzc*#|C`ju=9W5mGHK&OB%i^e|?nMiHD zt6gw>%zK<8r>t{RQt)fmPy&EW7W49a%WN3#YiaBBmt}hgGU5!S`ANq7JmdX?lEXZp z&(GY-x0QK8nUr+4YksJJdZ3~|5P$+vj<4?o4pE?#b7IS@F}}Z;q^uCGqu|sO(LgeP z&SHuSKgUQZ(yf?ZN#KDhn#c9xR6^Wn`)81t%7Om?VpyKlUBB!gii+^Sapw~Vu-tj+ zDKn>oj9j{nyq}2&N>=( zEnH0GWiJ8N&!IDMGI252XMVG6xM6x9Ql}CFAmu(H&~)AdtS)Yt1~1pg%-#2#`pcAB zgzViyDOl6U$HcJGDu$hZyGzElrK_vy_Zy?NK9Vn2>!0e2^b)wAC#_hso<1c^Mew$W z)ho)X^X&d(j2U^%YeeTTS^bG)0Na7tjbf={+Y}vTi(UTd=4S{usePFGnB&RmU$_Z6 zu#)chz(iGN$oK39p(LTdD~z(Zj^wl>y1Gd1BJI_LIaz! zF>qp4JuCN746dd*YYZEKXFdwPK3JB}GToowGUn-nP_vWu703ZVEiL8%6Ey1RpZh8u zNFEQODzbIGYx^?c8i}r_+{T`jFRwnZN1R%ZSD9%EvaBml?jb`-h1TW9{{YCLE28hG zzXVm{{D9}$r4$upW%b(tDi0}(1z`#PCZU($6UmEq4-)?X4|Y@&YN_JO)m{Gpqy={M znX^$1rPo&zis!)&x7inP%)9nA5>9;y-X4<3h{kE`tSC4s3GZsydRihJc#`?p>2~J6O zM=+|pb2nyB7$!v#0>$3Hd6Wj&)W@G$c-|`*2C3?H?)=jb^bCQpS;oKM|y; z1FSsPX@~%&tbd;}{+nq5inQ1H8m2>^u3wLtK%XU3HB|ZhGVIGSnk7=(-B_;Z{}vD8uzn~cQ$At+OwD5Ae%e=ec-YWFDqN=okggGE@0&HK^COYPHyU3 zyowwOS3Y_`$vlf}?>Bikgj&MEEcrojqT*S;HCpW);41{;=>kf87rA^ZFk?AX3$eWJ zI@!*vcT_v?w~3dVcetLXuU;l6@KE$nxCCHVePNRtGfcBq*G>dELg9ju>CPXiWrq&0 znA@}CYnOZ)h$%^7llk);1Y*@sLBzsk#XaZfV&GhhqkvULlpp&qeGd#Kde z?E>156!X*n03+56E%2(Y)i);)3ik@7jf<^o$3L0T17^K2FId*=L~GUMf?|ie%s7Uf{PXDsWl%8F{{V^5REbM^d&)h8 zIL15QNF?o$q1zhi?Jd_B#j8cfsiA57s=l2eP%Tw*{+Yze{2x|iwj*c+t=MhF8RzpI z!tB$BE%tbn{*A)PW?#3g-zFwca^u*Ab~7FiUfz%~j1hXrjyrA{gRxs?*Dlk&(cV)_ z-=Y>b=$IyRsCY)Lh5D&=$oW7Y@>gp=oInPvPY(naFzwfNWd%rQThnn|C$x3Lvv4b+ z&v{{?=^rW9PX?fGh=k5hGa}6bowNFvbLlM=92J(Mzvrxmy8&Skc3?+Y>*w z0KJ2w+s9baYYA@KblFfUSPm5R`}v9-9_0_eKQS8lt2P?FXa4{ttIOCfRnIQ^P6pK? zkj?!{DZ6cLlhpf)VUFk44yz{PE&>~#Gt+euZj`ant$*ZF^bam7zXifd9@kIxQyyIT zc~hsn$@X|1kHciha+cQymHCRU0&-S9zM#4*lGZ;3u<#TsJZn4W62J>*1_r*P*Ai!S zFCBK84(?p$kLG0-1C;^sG#g7CiZXa(5Lq`Oe?6toe05j%%&0oj_v0$T#knwoir8T3{G!#)-=Klcq&zObNfCXoiRCkEHo@U+&TqDjhgx|))mc2U*c67 z3Jaj|n7~%!dLQgj3~9Z3p4T!DY8J#K z4|+U@a%-$vVHxy)Uzvjp9cG*6Icl3m^PLa0Y%MN0ng%T?URG8XQ5nOxwaTB#e2(Ab zMJ|3HJ!4E06m6Ep=P{>zhRj~h0p9uP2R3C#261P!zSSvOquN)Ltgz!2-xfISDOF+2 zdvRT!XGvV|_^oG|OaNPqW@fdPIT=G$(y>g$mtv@m@Uyvy9u3s5%PX}NXU&!K9c^h> zaX2ds=+nLmc}SAeRfdKwZ|~w)$}JanCI|J*Q<4GY2HN(E?CWp}-i|)vd(oXr8V0ymY``NtVz?o)t?V-0C8{4( zxT=Dc5#8Pj-3-jLhpQFMK6CRp$;w~`qhJ^t@aYQUPRb4}^HT6`c;_IL_=fwigZPwn zgDhR=eI@P6@vUPRgkZUN26OWiCmxntO2Gc0Nepwn_CNEaH`Lmdje*kWzGcJ8>0^!K z-gAy$w__OeN79(8?;E~|$^%ygGrdOn&KgE#ieRT`L{A1Dh(BK{f^P;n8F8zhQGd}7cH?KpBmN6vUnO8>5oI= zWY&R#v-L1ltu`erW$f?6BJ%OCe)CsWg1D;Jc~C{k=)gtDP>wFGKiHof>ay!u%N(1I zT~xJM<`IPUC%}~!GpHc6I;!}XD%ZqssVruQx2tk?&2~jx&&nJg@Mcx^FhdfB9+b0i zb>$6|Ogy4m3*QkfmYq12vk@D=c+wPp;#L&BP~Z_R1bn;04FQPn?Kny2wgTJ6-c|u+ zMuD37ALJTYk+g@6@Ur&yWFl}<{{U2A;RNotC3qIE8r&MdD;(m3fF84v4BR-+r_8~L z-BAkZDnc0$wRG#IIJv4B#kGP@+Wt?Bsy4PUhE&9ul z%hr`^>Y#g-XkZ{!H@>*@D_WBZwDj#9D0E(i$=;$y6oh~2P%(_MrA{^WKyc@ zHDuo1G|^Rt{-Ten8z8`I`>d)7NvUt&5n>L|FZ=zA5yVCd@8hpEF$AWDMmrn6^A(jN zR~`=U)@R1DTno2Kxbzs__vh{+MW!0uA{LybD|g<%6Es#qpARSm7rbwxQk#JT7mR;& zATk4121fcE!A2AVfj5VUtewgoFXB)~cZtg1`77p#x#=;!RyP$#KT$kc@e5P%1(v-< z?@Oc+kZRTo>+8f+iU1>kcBTsufbyW9~DitktzwTttJJQ(cbGMp7s{ zhuJB$WSddweM=9Cw;kjjPg&E@G}c?8R?m5z2DO(Bopkn$t8VQE!_mhaK=3*RdyI1! zw=L06R-zbn)pL+rCmx4R$)D^*yPz^$DLxe}g*Rov4j7a@%EU2FWnv8*yx}Hbj1b~g z^Of>Nm|z%pR8sZF61Th`6MyEe7D9{{=EASPNsjk{=%sJC<_jD*+_k#tfSJ?%%EYBm z51@`dqAhie67L;9$m(93ukumzYdEiX08*{p*sk1jI)WJDoO!uw(Om0C{>)@r%sG9* z(M83lul8c4mZfD?6SK@Wkh@~P{eW&Xap^P;IzJ zjQkVwcMQjF-6A4G1=d_1xGv?%9zi(OW3T%vtJkDBEay6!bSDdzInQ2`3LY)q%jx&b zafZPi{GPLF&nt_)TM4MpbbwenB|!DBNra}`!Ows48;~~X(fNp%fmW;4ttMYc z0%3bKKl$$!DX?31dw+PAG*RBMjeoIAT3Tjrj=!0dsg0i~p+n5@IXs7bN1X~wwW#(> zf&v^ca8OxhE(J5oadw;Q2$w7PW?d^4(3nHb7o-b3hUy$y;XiWk&*CxNqEXm)}aqHF%)!bnQm963=H&X00x*js55o2=rgkp(uu^>2+OOWXpMLW)(JbkL-(;w>0Z6U? z03BeqX|m`wLE9v%;Y+!*>RCi{{5R{kY&fB_#y(M1yeoQzg7O|L8TqIPrmvuL>OC4u zw0BtV^YI-tz@gJcbip(MM$V3XwFV^?jb1O&LAj{_7Nc&zUhv#GO4fPD*MbyDtLm^m zexY*4(AW5W<~R#aLHEQkQ~_@8KfB6%v5$P?=6SMFoR{%}ArW#mR{qSs)(?JGI`o%I zKw-gG$%Ps`R+2MBR@7VEI8-{Ua@ zb#QC*Uo$Ry5w%=BYV!^h+SOJ&dcM-|ZZXYob$vLPO~5?ATtN_7{GVR%tPcQh-fVOl zeFN(IO4TCIEOIr0e{$<&N@e1Z?WuJsm?c*2=Ls}esxd2Cjf(R&*`pg~9vb1?i)Emu zLJVhAcf$&}gfW(mt(m%d?S}el7|0kg*BbE&Q+iyvV%kfTH=Ud3%)ifJa0nFfnfjFR zQ(QtR%+U7(*^~{_m)#T6J)(jRwg;B$=2c=Uq3Fj+!ZVudf%*2C%HgJ)_o5uNRSFoW z@SBSm=f*Do0P@y=OK(5(r+SPVhiGc}hHue2N!DWN01gf`z*#XNTwUicx zu`g#2xn)_*3?%;dl+GZzCawOtQX%Xh+N^UB@K<)6*GO>n0Y`O*1K{O*xyB~usS6dV zj`mzT`3r2as&QVi3T)cP*>lH8>jD@p>bI8;a1dRtt<08{j(#&XgrM}U9{ylekp*YQ z^U`lj>1D4^?qw!qD?Su|jKFhp+WKP}_8~3xr%e~`);{3YNX0d-%q^%u!mmTp{e2;` zFOeD}4$&Ibi{-_2x=caJQMz;*JZ@%JKOJD_oZPuxqg48PaoPo2Tx2cLkF7xGSfI<3 zJI3+4i&iNSCRcr5u!>FvE31umhh?1ZQ{>hr7?zz26_5R#%(P|OSL^fIUk2&`%`M}J za7kay!t==sSkDwscPnhgUp&VaS?4F>AP@nh)f%qP%)IAgk+-bOo?20DWc!(jwN}u! z<5!4f=+vQxLt_qG zmcY}m6S#e*^V7Tw6g}Bp-D@Z63q<1bJjxY;SO?-R?57vGdeP{`VKd93A$|joWH7~a zo|25P?+e(jtPyu1sNqb2;cDEThAPJ+2VPzTK>0bAEom`0u!8&-uB>fE02HnS40{V#BXlB244Jq-1T zv@8aorB>O1RmXvs5bo*8j2HXqEp#<>tpz0w${gsOeq%9QjH%J>5rMk0+H3o?XX%fI z+?wM#E2Oq^>xS@GzqhQ|Y&6oJhwfWj;eq&Sp{#jj(0?-&bGO*P&%6y_w>M64_IgfQ zn@(Q7-(6+umMc^Jb#|IXj*j^LcJ!segbefeW4N_a#lPAEFv~EODKYL}xUC>h0$1nhs>bp*FMn4s8|YG>oLt%;fFQXEED;e1$bh$ zb_L)5p-dQ=@a?l^CS+L3!GggMB}G~_k?S*>!>bB6n*DPqOrVa0KM_=ve}}!0uoBqA zoppX3KtRH&VCZ!J03)CkdmGU@#zl*_`h#oaJy;n`IOvOuh7GOP-&vYU2AQpwU)hLU zik3M2hC9R}hGnh)061difHZCJ({W^kDB$F-yMO__DWHX4ocl#%4k5eg>-v`f4U{Kg zziEoBr0139V0nXK);;9zS~gk6Nz`8%b#Ng;fMvxa>&FolTIjV`SlgPNIe3M3jJqHp zavWYb=>l|CG{jZ;3{60=xbx`|YIa+3SfO&83Kqekilmn-@`gDhz~ zJ?y{OB{Yu&P{C~|B8B2~JzTzoY?ZRR&TaLVmknXEDR5a})$=o#5Ut&xi-02Bi#M0e z`%DVSqU&^+7^EDxg}H=U(_q6N-eRq46w*M?@U~!5!0^V@)3fU;CzxHlP5}6PA0#v$Pa5rpwOyF2JX7u%i&RE)g zUL1dDLenR~p-;9U1Kw$B)|;ZDq8+httOe_&hRjOt zK2dMdDLvq6jkOW4yuOaG&NiSjY)?sNjzaxgdqz&AumM(EUHi+1aswq*oxk!Zj@w%M z-lEXy8Op8g^%-etMN46yob)D9SjE!T-_%Za-%Dk09Q8foqkI8qDD7|5aSckpgb#ev zAE{s`Of2X>s5q${lmJMpF+`!CQG=#`2fGc5b&}DerSmvWedcqg)cHW%6BcimD-}D8xzoQwUROAZ@*V#Ga4~2|G#q3e zr)Z<3TYfmfD^PAt)z?>Dbi{~jEag;B@0je&*^#V!LszLZD?@zs<~3H~Ij8vIXI>0~ zUK;#N8zjY)zfP3uBvVZbXmjoJDI_8SQ#W?^xq+W`l)s3m4R5i7BOQIGOBX{R{{Ux1 zs|(EEtm6>Q78yn+0>MDu+@FbhXa^?_-k$MW&@@V?zf|{`*jtA#P8s4Mt4DoWo8KHq zty_;$uhQVvRf+sZPWe3euWFYe;YP5heqq~pU4^K9T)8Y4pzigBcrVLF2!YVYplS`3#g;cgQ=wgR4y;W zIPgxa>3u^z7wn9i`rtT^uuB{_!374w-yGB8HB!clRt+JvBM6r@5$_Q>mmpBO*-zpn5D~7P6z$qnIGjshvps)_ z$ldS!CayKc$pL}L_|?G0g7^-D$NL`S0)-;yjWXgD#3{9xanC8NG0{Qkx|iJ+z+vW$ z^8}V%^1-}#nmj-bPx1-D%w08K-DOq)H}EU2vBy~8B`gJSxygJ&lMqJKR@&>z8FcP$ zvDe-Cjvs1Q0Bql^qSV-Dj>j{C3IKcz`pX7Zn5)xX{*dS%^6$WCec(a>tuV_Nzs#i~ z>=*NiqPi&CUxHcYk^6AaGfJE>ml--~6Y^oGMyD!$ zMgXITbpu_4>Bp?ih*obP6dyA5omPXv(pJDYRT9->u2ZydVmZp?C<;OCNuMG-KmOSf$Xe=K^%78UGu{>*V1OdOpbF?8;P6||=L^^_ae z?+RUtXP~ z?tE0Hf5;POZ7UyFf+juqH?FRpdqpe|M>Yl7?JznxQACx#VFkE$!_N4HTc$x?>!uGO zg>Ki8N4x?9t8hFx^p*iN8$fm9{$^-`Q*`luF$0sS_%e7{(Tgr_nj<(II_e6!p;)}< z8LRCVEI7MfrX@gASXkOU^84HgZt5kYLPkD;+#W-TQ6m()pHsw8q0LpoXs)3hrBaVJ znJr=I62_xhOw+9?&%CK_B%X?BRd(Vixmx71d*Fx(+*kuATZCtfD|T?ZyJJOVP1DKi zMyBV0EpXST;t^mBm3H2)I;&Z!ch^2|%)*X`tS~RUzgZX8W3GGZJ1yvy(`s|e%&!cg z@VM#e2;*{~L8k7Yu)6fuyuMqw$@iKB_XOF0Gk`mWpmsTOyY+`%J0ZeXx+rFkd3O{b zQrjTu!#)x5zK(;n#GKC9uW8M(oqH!7KZD`AxUP(%tg8SO(&|!P+`ntIWlHKr`TeWved-MO!n=k|H2G z}%kC;Z<+y0JTlTaf-w>(?xIT2vzE>qS}A)6c%ZN9Thk@d~}d&a2Jx~nG+@iXbS zV+DcVP?%}0;`FuD{li5Cy71j~XI0N=@8~CmdX*Yu!^MhQV0gGrmOYPM)?8*P9d z4;hxTkiKds?p%tkDC<~`$rXCB>rh3@UA6@=llxPk&csOPxNt>dnonBj^@UO}y~a!E z<{wvBwO)oG6&V?;mBslb;;Ac{!CLm1eG@jiT&V$zorgDG(ROt$qtrfSv6S_~vriD* zkSUhj<5k*nh>wwLyT2aN@Xosf+oH<03}%;ia-VrfRC13ydAQe!#8)!wM7vTIY$@pU zUr39LZ((0+fzC3xHu7gsxalI&e%-2Igfo(bCOYr5AOejVTKs;Aeu7rj)TY!v=yTox zO1mzu!`A*LsVW#6uPZOLM8np@$;Td#c~OEC1+~siV~7au0ADfgAuuc8u=F>ZdwGg^ zy+sPvWsm|?jP~b@eZU-RODg!Goklc5HB$v*RKp8?ha35V7BMKbudk`4iyPYH{mLX! zr^%)MOhm~7qnA)U5z0;zo`HPid{iryEmfx;kCQ3>lVR6ca$fnD42_E`uS=+vWU*0~ zhqst!JZ%C{k`^#0srE8&kxVOw7Q zVlAj%7T`@Z@3;GLHlfIA&S06a*2huozO@^i3E1fqZ7(_!oWN?1>HC+~Gk^HZC>x~t zo0^p&>znq9b1^|rx4fqo*4s-h_f{CZ)ZvLnR=G>eHwc-0FMoKyGc8oI3r(H^RuE_n zZ=doyFq9y_4iEhxEHnnIz~dKcE*Nom7B$l>R9ZF-UDCuHj_7q$EYmB=#)#GR!mlU$~ie%5z3NANDMvVhp#>1_%XE+QTnel!dV568KF= z?#V#MF#1BY;TDI8sjHPu?+7&HAw` ziiU3iuRUTVj~ie4f>ho*h+8~5*)1(Hvu|$NGsa~Ba_Py|{{YxNN7O8TdduvG3v=J3 zw2U%s4eAH!4AaG5lAg0Np)YXnmrOMk!C9&e=Zq-!A#Sh>LwO#H0PzX1lxuJNj41p8 z#pBjhM{Nq2MP;MrSZD3&4g7q@b_8rv=C{xLF0xduci8WaW0`Hj#};$1h9Z}h_5wBi zxnLgWIA4u=N?2G@(HgH~(rxH$-_=n82=Q9KL{PMvTMn7_j4-M)Y;a-TAyGP0&GYXR z7lFUMIz3qUl!1q#Q&`+NC05pMhUljIqSUt^&@^j;ahlb^!|;dE49wlvnW8Y-ag!bp zS3mel&R$uXjwl_WWo0~=TcE2wrbZGQZ9B0r@2(-H{{Rb}$IrS|$*xEx{R7%Mfjhuf zlgUvDvGFrjUefK+_h$m1Y_ZEZC_NEJ0qs$_tFIAtl~C-b($d$Fehtdd1DTU3Zf<~x zF=6HB!2p;`=HN;!x=RhcU4Goli4qQ0pTzWToC@b~B8mWwUPuEsq+}wZiIK^j48XNR zw8{NZw%a0ZV$p%@Vy5ONiLbs+@$N|)(u05GSVT@>f9g&}0Oi8Rc2qpH#tSbhqK-q8 zt%<%mL-#_K&2nseMlQ0Gl!_V7lh4uzzyLH;)KaG)HlE*iPqb7OP4HU&uihh2C@o{D z^1&=JZREZ;M4~}mAf}gD_46{5c65uJbIZd!q^FU*`KUYl_Aa~~^AO%A5y;-Yp)WRo z97LoPvMtja zxrB^IXI-31lCiYoIJNfnmIzDMbE6p;uVpbFfjKer2Gx#fHkC4qkQ16Oj{5hRZYf(r z;HvL$$D_)`HWL2;iOYpY)K@j65r+SPw}QHs|*R zxFPBUNl;U;=~DZ--5Pgw&3(;WJent~Th_he+oiINr$z3ZdT~_}^xAG&%rEamF!gOf zD*Cyrol2vT=lf6)(v;cGafAC%bwAl@1u|$VQQ}gVR&w5A$!%=8LQj3ghA&$WNVKnq z`rmj7;g%AMkkNl@jggtW7aOj&^#1@9v?O;B)wiqOnS@Ar2MMwZm3!SCMi$J8;&amEg7V*P)0@ ze2lm)&T}%`M#h!LhluLpQIVBX?|rTjaf(}9dKt!GCc7p}KQ{nHCYm70t;-%+p>p9_ zy+sY%bIoYA5L^glwkfy1V0{^j+)l1lfXpAYA;H!C@tT7{MgxJGJl#4Id$^H^;4z#) z(YdOAed7$aXB%$@-;R7iyvCNU*f^to0%%hf9FC!Y%K;irxu)K}JzXyc0BHWaSB8T5qn=>mhp zo<1P8IRNTbeAHUmdz(#sz&72>=xywC9ufvas|F>W(cWKAnBAb;m1L@-_tXm-T4MMasq>|Eog z3Hu@ z?p4vYHdn=>`b8XrtZ*$jEpvG2jQ*c;!)0q^Wt)f^f*K1mP*_*nUhqy!c8^4huhhW1 zUX0A0gyJyJ%De>VC#ml%(JQ=ry-`G7`7Qz|${yfX7kp#Sky%x2OqR80xtV+mC^!Tt75&5nDQb@HFBnO6SS@D0D|y9#n1PZ>SCXm5zM{Gm zty>HH;-cSsQPJblJb2?Se?{EPgc(G~FONi8Eorcekhb<^o|XO~hv6?I+a5#WCxKLC z;Nr0bG(>IP(mQLU#gd3Q^5K}O5zwNHbktO$RfmC(&MHs9{J_vD(O1{+)RgfC#B{fh%QqodU^DvniiZ(XaI|k9Zu0ha%~?&Ljy=36xkn=bybDggjF+gSIxTpspa zJ+TNm}w4~j&eBW)ei=FZ06RK-jx(}!-^|Hr-DL)y_B(`8uSF$|F0!eJ4yCah%Zz-$*hP{U zW~&#DoK8-bd+!0$$^h_J1Vy_+#$Mera7zwz$rvv774G9%nf}CL?$Mtb!Qv+@Wz&X3 zhR=CT;>#o7ob-Z-7a_dwyNdlmFd{E|JYQ>;IaU00#A>)oJFM6H5%zOgaj!FISQA3} z#^eQ$z~UD;M9J^|aV|=iBBgx)0I+Qq>PggH8JK`5QC$M{MxX4<*bHo5m_OQwk+q!_ z!OvfrXU?+WHE#X=C3uRKt`+Uf=Y;LEZ(q2%ZUDuiFWOSf8F1UKpSg?TI2Hx(rhesw z@;%;fPCCS5E^Sn^bz7*BWTgRPi}!*GE*cNzdJsrOn!2c0-Ny3P8Z8{yHtPc42F_gH z7yY=p7QDoYqWid+ie9^cfOI=DgK+gfI&dk(R#kdJh8uKc_JVB!rivST)x@caQkLlJ z4%ue36k<^&r&U;Q9A;br84#$J`bJkHC=7>E7wAT+ZKD~xPl-VV9_7;R@`+tc92jQ& ztDDRKK)M9$%5i>3n^^9cjkiu91{;>fYzKZ~Kbr^cR=KVp^q&5(yZjQvU#CA<;)43~ z?=uQbb8{_P=zlQ*z;MdUx?v4j9rS-Wnt<;q7=Sa1B;erpkEs-W<%di(A41Gr1?m$= z`zc2X`w&gUrQN_hOizFw(&=uZ9H;=#X>{95I)LvC zrgV!X%^0qD);Bm+mIh8-nbNq~F0@wsY`XPj=6aB>_s!pWjgx~(NDTCjK%MYfcWdaB zgH+PCi2m^^l$D|Vj$z|dl2)+iI&rwNv=H4cZzEgBthWBH(8A9sv`bTkT?EEDCEw(W zlc9d`cfG@9&>iXp1zd*Kk>&p4SAZqLS)J;@^pqeaw9hfmKNF8Vg=HUGYw;6PJXX{z z!{&JkpGvC-g{*Yx8{u~XxE0CMQFBVbV6nGD_Xzi{IKZi&_0g3khAb4QJKwRK&7jg< zJ@(_Qb<0Gm)2_!i6j76GE#9~)1+B>Dn-#_$&?^#x0cxX$y7q``$gy1C9l4ms12}X& z5AG<_S{90bB5DYu6|2L({a+AN^X~;*0`Z`WXJtX~$FX8bjCf zJHmH9tGV?O@vJvF*Frctro=SQoGLXqSyDt7}BQwf+a<6F5AX$UkKB)zD33Gp# zvZ@zPW51^TC#+>QldK(PJy~`@cgqQGK+w5bp&DT#IRmS?mMhq>{{RxqgMogo(U%)n zg0~B?z7|ls2(_cGp>Q}(6TfNVAn169>A~w0DGFGR8a`$Vjb=~4^r$A*4h)gHLEw9T zbeVwBkg$qk{N8aFe0$wWk&|!&jsy0EvY_v{g2nH|*hY>!%4B3SP5%IXrS_i5R3NuX zzgSMf>fE1xkOdQHvupihT9OY>ql z%Kh@=Qi*Cxb{aNzk4nr^Ea7^-@VcOV%&WqGbcf%&l%!+aUwKaTS_2l|vo9pF5n6Ds zvVk%MT>R^Xq#I=T&ETj;qW@ zdB;KCAkJfBG;F0E^l<})n;LbdHfxvzhN`tV!EsBA>(kmLgqV4IdH0z;SY*7M_=5ni z5y{V=GLGrJj<;1g)IH9BGW!abVufc4xb1;e&}SC@u_zdzx*iXi)iqjU0H-&$5JFO2 zwtC}yY8y!G0wq)$`vr%fSHAV?WrFfJ(H8eas`<4+~+LXSr^(Kq6B&WB_6G(n#tnp&0^3Uq2%bq@N0 zt;ZKLnlG17Uw%(#`&=kusDSj1;@vfwK;QWgs`Wbdi`VZGxw#toOVqhudY1(9Tl9S< zx)GwUy^cweNpylV6eh^0Qyzn1vsd_v$P69f=k({pK^VOy*U6rL39@Lh7|${{Yw! zyrJ0eZ&uaAv#8R?Q}Gl+pq>XAh&pSnpA$GLSC=?Lz81J4)+=F}!o#(`vD>iH>hCq) zoACk;mN?C6=e+4TVH?{Bc5i7o6N|MTm(FIT(zB-<$>icz)@U54FWaB}+L014Va6|+ zW5dfx3v=UeX+Y3TG#kc8-d{MQT(sa9k$l_{JugLApzp|?V?A=X4(`1>N`x9uA!f@P z)_IxCrE2V8>!$m|Ck@?&@b#)9Zt-Y+$Baz06e(Gj)!?f$(9{hX7y{P~A2`e(Sp&nG zD~@mO08$(ZIW*Ufxgy`p`YYHr{UFI`r=nv+_!cq^K!YaWuuQ{Est0d)?$ zdu9Pe7JUbdzr+By&Uskgy7VDX*NnwvGvQyjcU%>2EP8&UmtqM!+m~daqKvT4PF~+o zv9_H$U|ZS33>Je`yk0&=3Jwh&EviCW^M- zKiy%jBn59pM@!~ptgG`g!zGnQVAiHY=ggx>ZzM3@ckz8ApusU|UozfvLVWIyYs@cG zn*RWk`*H8-e4toVlgDPr>mA6(^v-@JZt21METy7-k2<3Kg&vVGw9ylo=1yq};>*02PFl00ED2 zcoW%g9s{=6R1$urHKmg;1mq3M3HgYOnFYpns$K8d|y}r zJRksUNj0QG21^RS2$;zaxI{Cwiux$d^fUnQb}|^jU|SF-yA_SIed&UF3a}l0AAlZ9 z%}DO$$wo>}R^vJ`pn0yb;PJu$Szb7^{#~h(@F}#QXgLDp07s@xw1%OwQ-sjL(?!-P z!&Jhw)5~RDfyzg?vK9!Iu($v#!h}8&3L!VJ8%4vV?X}lv_Pcjd$3^~SlXWu2xEZ-M z2zL$k3us;EV}Em6%oNW~P7hk?x(GyA4^g!j`F%^F64W=pAvlptflzaScmkx`tr%q^ zNqn>cL3d5N2!$g*`Ia;s=W2+rUsn{;Mv4Cb&8~ALhr1Wb6<;onfRfvm2I@9>-Na8v z0~)LYA(MyRDSU9^_31lXw04fr2C>$a93U2>65syfKMG2(hKP*<_|TNf%j>}yR`@NX z>f7`(R+i5fiM2P}M3%#=cF(G%m5lC!*qj(64Gk%qJAAEhO5O{q#|_>>2z)dM0R#e> zPQWf^F7zx=*4Lj0_8+6n9^3R0!nGpbi@TbQ#C?a*Ls~VJN!l*7m+8t%bI~v)>t;(F zMhFL_rmB!4o~2nPasU93MjKkHYNB%vfp`@pIi@(Z1tiVTkv)y+(9ArUpp<#ohl>9I zq#!^x!RS*%?{ZOz_nB$ZbIJ29zGZoj6;RXc5q$<=&&1UZrm8wpBw)1JfUCYKMSfl_1 zCL)&io{WXlml=}3A%P$mVG@9TG;oxs9<9T^DY8$sbe}%X6v`OVutgl9$8*M3_$NxTrEBiJ{nmV z0f3~77~x(41GSKD5xd^G=`m}n;H5;?m9*lTVK1@8Cc&Lm@<&&Y=)>?C?b^fv9$ifb zY9}W%Deg(46Gt=Dn*q7j=j$b{(RB(c2!cf-?q?9XG?etc-U-nTA!3NpNuki7y^ zG31?k&>zzv=MDj76v6n#a>qjd04hJGLg^k210x7_#5?EQKlssZq|^Mk2h z=xr#VaBZqa$wvPGn5_EG;1|NfRG;h_xd|3C$b#Q&kRuNwFbXFQm~<>nu_YHcf5?IH zc}&?D$Eh`Vs0iBNqch`hLI*)EYZ{;p!2~XZ17(A2dJ(7wskENWBlD1ZhlUo7##=Sg z>j@OK$Y52S0~aB)_bqGYeKCZJG9!Nn6J!Ks`Qct71Vnelnrs)dS4 ze0yLe{klot{<>lvmWgcdr7AZf}h zI*ul(DWg>9C(;@6!Cqy`$S#Sy5 zl!`F2KV$`Sv7bV)3FSOXtXz(@=uCe(+Mri3l!f$%-x%-8V4$MIlXn#p4gkaeJxYQ1MB@{{W>a67&$RR5F911fvDYngE?Ij@`=EWQ5Y- z=;NK&>azW{(?FZ_LWbRvc`p;pOl`7fv0$-2C0FLQ&_jwu6rl143Owb0)AO!!xWA%7 zMnlRFb(NyKV%5T#pBIr2mbocwkI!uZ16d#gMhu~c+bWDBTk=X3R)}a8@33_{IcL6W ziO$vqINOoYg%L{ZX#U49!;khR2SLNvOvS(MQTQzj@o>;I6nLiTJ4Yr&wEI7C7$#(P zTT^SRZirS~n#ft*_>k%t&rTTtYXsCywe0S>lTi3N0Q*cwR#h13eH zZqO@)Ft^JjV3liKXuBO;15LuG%KmE8e!@KdKP<){4g2^Ey;<`3C1Sc+7&zkRhL9ulQDQB~4H(hxmlr z;$K?ui5^@c@&0kQ)ulLIU-+0tv-7~mk$FO}O#WS7eRKZ+K~}gKzZ5#i`8~>ddrJXr z33PjIao#MHs)>3MW8isktsBO@=9GFMmUpUW77`7MnE`S{SeOLteMdfZHNX@{ySp!A zC<^=Msa8}vF{__0tGI*bqz^iu@`HuhoNmc>6{7U23C#%g;s=}elM`N%^8|s%yp~^y zu5h8MpvXDVHDp9Dki}xcSzV3zo(TIqmOK!L2*y9!-HFp2`~Lu5mRINEl<9D@c;OvD z)v2FJ_$y9EkIGGDnfo$ySY}Z6x{MFvGF9!0AtHm47`0iL=Fl~O>02owXl?lwB|7GSSvDdW_iKV2e*e9Hxk4|P3F~&kI)wtnCc|ky+98)sHfD-( zyxG1|{{U`mo&JBkHx=l{jmFeb{{Z&xU4Ce4G=90afnu|SSp=$*!vNuVdtp!+dwDmR zJ6=wc^*J^NoNV9L2s!h^yn40t)d)Q&aHGwa-m!+eBuyFALU#DkzobqLY~Xgsn9P4A zFgSZgp`tp>sU5KqMwmR09Pgp@=)cWPk9@DkMaCcT3ltz% zBB}>qHB|(*B6>;1UTsMEmBS-DmD&3*f?E=kZh^~JdVC9GL-4jb`ENY@R%bY9gpm@_ zVq=l%wE9jokTy+)DM;d}1$l7wC}%?%l~ zK9qlI;UrLtzF-_*KfZ^q(FH6_n1rhUSS>7~Gcr5GCr0Z308fGj5!qLae0JJn!-X&i zvL4JdBSV=WHf_Ulh|&dwmAFKG`hzBufaBU_-YB+aFZvymb?maX8MW%^Rvg%`WJA-p zSb}Fs>SF7w1W)IZ8jXP{?wLYbY~`7wL$A)fx(e93nQ1A(&!1nyzCe7bKh%`)6><}` zlWTLEiW18~sv4T`&F0Vo-Zt5Rk`*E`FE=#W0Ddvnut^UM^bo8WQ>6Gw$wsLg!fOOC zsIYqWbzYD$$!$Gim7-UEYJ(&GvYIF3Dn05@k0hr$o>u)i_3lh`MN^q14k*|D@SIm_ z5PNG(K5}$4wRnzJZPW$up+nXVGWI;P16BO!B_ErevDf&{r{)%89R3P^z7>#%#VGLQ zN>gLJRGaY`u3m_qd1R@;##cduYs62>aK0--^*|0*NZjp~u&eAcecctti2g8}qL30r zxx@Pm^@Yz6d2rbuLxcAV8W}V;MMkO*tPl|Xh+d4E$s_963A^XjAt_jGl70+Rm6O|G zeJ>#oaLT5)Dy+$^1!!Uc3kFlMO>kBm8E(p%&Ju$Dj-q!IzOSf(dPs`W8bBdhI5DmD zH!0vNn`zW^)&K*`)3t5F5w1j+yDpThrv9TRbGA@duStxJNkzK^BA8y39Qjv>%_v5$ zLo!E!EeJD5!Y}S=hb=(PjRcJ=?ptRyO5&-DIslZT_Cp{iPiMM(214nCP$10?eG=8T zB`0I}MkuP_oy_=qcAlAR~Up}Fz*Y12Ye+JUirQ)W?95<8c1tHB0kXk8Ry#+LOrSl zDbwg_^H~KvZbFP1m;K{!84wFwmcAz|I-g=7Ntmt9HHNw*gquP?LmSY^qTuQ~Otcdx zBETa6GV0^poc^3Kpl5;>+YtL&xDbYl` zx_X2by^~NIC;-a4PXKu)H{}LZS|O>RYoFx(VcU_{Fb3TGMhkLMbYqSyZfWG5gTwy- zbZ1aUi5&g$#3N_aKtiVLK(Ks&GRIOFN)VE#*6uV3E5tXd!?%#8LG1IRQQ`w94m3A# zK6|E3;xuq?4>9B9@PFSn#-dZQ0gj2!~3*2QwrIY(&)=d{{R7XKH zW`mz~Qt%I}K)b;-!f38mvU9VDjSMq|%48O&k-82P01X?!i{ztdH1MKd&ebePBUh6a z9)LSbcFDS$d{tMRm4rkS$dp}mNGoCJ4*P=&sJBBk?SdReX5Nd|NUc-tAQdCko?yiM@k&ziZZMy18BbGhsX5y_Ir7ksMU`a|YN&tuUE5 zBUuv|f6M0Ksv{AV8B%ucJ3SzH*^t^BkFJ$pOx#1q;2{mo?)@Q|xr$0k+3 z()x{%k!%uKna5I!*K{2>v%bI`u6S08TX8K4jDw-7dqsKHfO#Jtfd=u|TGR%kSd%nd zdJ?Zbg@m;&?w5&J)wbkdHyfKkI#5GKMZ5r47$?72nTGo{p&?lf*@QnRRadIW$N3|$ z8_Bt@4I+!+NJbFs8Nar%cC1|z5PI9~VlvS4o(i7*&FYp{e??hS!%sd1A7)sPz0*D9 z9Y6WeW0A5;>-V?PfpNPpkD2m#G@4ZT=J%cuD8?qP7e$J}$&o$6HcR$3jydp`KoB_} zN}5`pCBcZrR#~+KSZ7rsdA$7bJa!QO0MmKFS2)rf_`wq}IZ(3mj%}dvwu?$9-dUHP zPSiJm?go~KE)cOLm(K10NX?d|TWgCxw%(RshIP0p z1JHnjNv^eenB)9{!un9h>QtZt+kW)x&|SWM7fOy=Jxo`*bRARfn9%w1V7pU+}ecRdcy_u0t(pbaN zEP?^9B4W;dx-XYw^#Qp6`?#Lon!$Bj#^&k3?TLELmBAOax{{NE&I@lfx_k_C$?Ea) z6i7~BvrXzn&%HVYLApgK?MHx7fvpoKNT zOttCLW%6Z!2_^1)D|)$zUudkWcXPQ2zkrQd7Q2 z6(lA}I>-=@%^JF&x=I_3xJsi?ShB?niz)9)r34-0ggc0G@gyY2&EpEb84zFG{JUikzp^zxvLmAQDNv#7}*H5y=YYf4eYPy_s`kFxs@Z zo+x_L${~XIX^l)cp!2A{)Hw#T{D)30^}E#;I~70Jrl>On7TF6_Gn)*9_?vCxb1N4S z6W>h~SsI;Q(cZ+_@cD=GT{axEV;xcVoE@1v25aczD(ve6SfiS!EtKOQoNl=j+%frS zEhaX7&&NT=ioducP2+7r^@4v(l3w+O0ztO_07tFO#7P5Bz#NP(k-Z&Mc(m{Zg2=116UDoRKP1AaMA1N3AzeGGAwVMD;LNm7n#xn=&n43i3#?g;g29U8e?Ugx!F}E zNjwwdSfx{QK(gg`3*^udEK?I1^D(FI*^^yO-w;2#8Sn|gpkI|=4~)~6pXd+f?ZI=j z0-b+ku#?&1cNB3}z#d2j;rnO+T0Ai7#v67u5;NBWrqGT(-#6*6+Ip(nyO1w*eTo+$ z_HB_!;j|m#M0beFyiS{6Z-aG_N4YSYRc20aRXlxpSdw}7zGZ2SCS@}&;hNj@=9W(G zie|ZF=}gUA?utrgfg~nHs8pKfav6cdh z^N1%RlZ+|93s9KFTi;*I{t_Lnc-Go&OT zwe2M)Z}QCC+MIhCN3L%QTD-k4^lADJ?UhHsWuyFon_m6DT>-a$=UgzD7G0pcAV1^# z_Oo+Pb%F|;_+{x((4P%6(!NfCJtr%)--NF@2zn=`(q@*F8l1g{tN*-MhN?(`4ID>EuH1I zulSqJKC9`jK(Qm5j#@b*@D(ogUcM84`cEBj>UV{*#TlV{NRO^5ZJY$3#66ce9{y6s*2GI1uv{8C!s6PNhB z?uz4|Ni#>^Q6eJfo2PZ-gbw7W>^Y0~lxZ!hlXrwwd zh8Dl)*i^>sgG?|vNxLJA%|=N^M8p-_?QQudA9d||<^5g9f%>)o9&6NHTKjS)(D8ns zA?#bf&W}4c{r^X2v-Z*I3_I=ihwk_Vo@;xxhJNS8lE<6LWvv3SZIkY%O|Tu7xPr$l zMz5rrR!!Dy?I+m~wi9>JL~JlPl4)(bsw1)BUM@NCyy&!$+7WaE&r@E%RBExUW8VdG z?4$N?It?#L0cS@d-0VOCS#G74R!W?FmR`s&h;Lx>;n^N>aa!@3%=o5*^0BW>KZDE4 zzbzB9D6VZxt7`0oXnt{~u+t9)xTQ`3Z)s52OX?j#JK_u1Z_Bw&M6&e}yN#y6GQ0#X zYOo~es%#|1C2xxoVOx+LndXPsd@V)hwF1+1FHmz48%oFmwQS8w7KzNyzn)BMqBl}R z-ZEkT*@CB;;KgvSLwKSXHvCPz|RoA^85AfYUHPc4zvyzVgzscBTOa56iOfocA5KGx$iUDG3%Dz)F$9AH|N6|{9A0C-2{7B&~ndJ^&^ zPP0F#xUjui{DI_b-;!oG>?@iyBDPhz=ApcZMe^({y=&**PCi$Dyw;#7v&6UKdT~-7c721 zXCQ8&cVteUlQJ}*Rp*BHM9(-2wtR5~w!az^RgN8{s-H5Q;y2`PCFFRxr_65RbpwhG zvYk%wHeGK4n?Wv9fD+){l>1$nuGFdToj!)4Gp5c-RHv0YY-(9f^lg0dgC_}{%^vF4HCABChcllT+pN)A{(A#GqE19VQ!2k zt(G8$Qt`pEAW1Q(PkzKCkmI$NiZh7#rt<>D`U=}tW(T6D-^mG^hoRMT4V0ufznrBq z+ak?DM*oFpSbthuN%G5+Tb-fUls#E#IXmPh5ZYYE{z;EpymP&BZognYgX^;_y;`7# z3Z6>K$QYyx6Myz)qgX9g!3Jq+-$XPvnYGNKYmx%a2qAJqapf&~>4(YGQY7HY1Ql_Z z0~QkYb#jvUk@)6!%e2`~nneo(do8>pZ)ALNZQ9^VOGMt9CRvjFl(TgoYgIAq5Hr5A ztUW{cxFiUCGV~&+$cp7M5(p5?RvBI@DhTri2}F&l>pbh{MTZmQAyxjvhz7jqGqOVb z;45(w-fLF=Q=eG9g$#2DKmX#jy2VdFV9O3^Cuq)(>YfYWet*^K2IR#;iYm&N=eCRPUMCk+ zsCGKZzv)~I=asC0$4pW&5nRrAPq=l8r*;b$=JT_oN^WetNX`+P?Vd8aK!>h}C@%f_UOn72oBy?6N`%PFNSV)#1^GxQmW~ z#Uf&vELxJzvE5MbN{kyInL-&!_?!@4t9lP?GndU*N1GlcJ5F0`CiAuud4pF}ndHK6 zI_vtblvQ{Q`48}!v&NomYMpci*rg6BhApKI{QSz)$5E4TU&hnEPCE+w>f$s?J^ry; zwK?%B1VLnu%J5P)2&1gQ0Gmv`gKH}&m3uh^&1|J858UJ%r@G8KLR>iSakfiW@>B+* zE#iu&1#ROAJ7QiTQinerkDMS7^D=8l<~`7Cb*b;r^91}>?7y-g!)rM4bId8sse9^- zf3~Y<8FMUl9jcVj(qo{pW6msuvMW_c71xH+@)^M_!W_HCg?4Ph1Tofl5b7Hj5BYWw?L#$T>&2I>5eTM9vJVG$BCs+J?1WeZnCuV1TiIUPcxHk@^zT8MPM@_)K z^Db0x<&S7f7B=vZ8LYTANs=6yj=dv z;8y^UBw6S+Qw0RcjWB)SE}f}yIqX>()@Ukl+K*UomCLx$(O}hNgz7i^d+f_F;2Wnp z;}W&-(WpswnP<{xKXpLD)u@m~9!!De#k~yh!!(|yyu5LABTcDGE?VRkuXq}V5-){x zJ$tcpFX0$#33P6KLiRog`zt|In>Fi9u10~1)8BNK1CWpY`T(S+0SLp?oPc~@Q6kqH znX!};FK`tG$CWLkm~ZMIPtf@&xLWX({cse*)$T5B`Ql)lNbig*`Y7~+ZBcuZl7!3v zmSb_t)W}GNewK}e_u&?1A$vGKy|bx_Ci@A8uFnGPn<%*4t9yf_1I*d1DRUmablt$0R50XhF=T`TWvAMHzb-5!?b`qD8?34QC- zQk(6v3freM#5`%`KW5B4imh^+a^Jv`4eOL^aoSb7s(8|oa=ncGcag((O?)PL5)4pm z6%FX|&TVHuALmbZhaAm$gh2htmz)MOhdg!-xW);Z#uo1)aY`WJb1t+AcZxfC11k!X`@@Fbd{I`t%{v>+`(jnF48}4g z-1K4$V8%RS67RUn^wY+Pbj`%emK&+9Y}*!8mUs<5f#A*QdkUtFSE=(zkA{<}%_%}v zJBkVJh^q-KUegTvj^d1m@R-!HS=$0_s-?r~uqRjs5E5Hl0VGtNa+HBISidzGox%|r z5M+E#W+QWUp$O67Jf-oLKt3TrW)TU z0JaGL-ap#X77*|(^I^&0wsw&ZmH2GtU_0qGy@}G;d^Uf$kHa}cO)D(DRE_WTx#c9!9hW5(%L@hI{c1*#{D`E-DiP5BZ=6*H(>cnfhEj@i4N!A;bT$S9r(tAXn zK%u-b!3YB_etag}V3RbUXXypZ@XV3lBRde(<53UbMJes@RZ@(@vY)Ne_^#TyW>zaU zT8hg^mT(z?hx29GRoS<=ET+vmj0_!~{=d7C>L4=W^waC}@Rugt0&Bi@%NEn3K~IDL zMy2BHz8J>3sK-R@c!;Byg-N*jrk@@e3a8GztEgUhu};Das^5zF>Mh{<$_fF>u4Jv$ z?w$RlohB&>+wxpU)K$49;zH1l{)24ZjrGTG3>?NOUB&aY$P3xJ2{ZV`Byw-QvV}x#RJwJzWq%hv z*eq;nqgM~rD;zdp9qXN%EF^DK=-zi~ly#sp;dNW?Q`!3x0l_vI<@6t!Z&V4)1n3ng zt!3xsKi{;IAGE?3Y>pNGJ)Il$%+ne$u-j$h?R&*NxmNNd;+X0Z{WU>9Cerz+jVYzn zq&pgXc~e}MiWv+DK*L{OCDK_|ju%pgld(q;nm+Y)RPaDNgk!|jjM~q^>8oVu_Qvrj z84QeN>b7pU`Np`GZNGY~>Z9i!6w4y~E6ZBwk~;P4vy{lVh>rt+$u<~4M|DBm^^{^% z&!=UqZ@6J!-eaW)AamfpEeGGpoAi_9{+pZ}cMGD(0B>Y<&uO&kHRQ7-7z$8wn=#l6)Fi{j=W~WNGsbK+p#B=e>3N`G8 zeHEx~8%iQCS74_dC}h$(dq;ksy_ti#*+cw~YC*6Do}mR4DMdl@PtS$8^B>vsOMX_! zg3xZWZg8R({A=K3jSu^J6PW{PwN%@@E`^AnK1Fjik8CQm_|a}y!np%-pm>;5vR`(E z?n8IOP302(t<;@mh->+q(l8VBnU^k*v=(Jv?z2tB-aqudK?$l^;Ym%DPBJPuqys8) z5*cYcf`Y*?Tymwan!r(x-JI z6IrC$Iy(IG%93qslRD8k@lcukz1lcl0Yw7HS#B)MFKs+zwN)`~SB$Z7#1Tv~D>$k` z*KtjzDm(XS`7lU;HmNNLQ7)P4HR~cv)#lkrMccvVR~!t?0gkR^nU7_j%50>uem~-S z$e&|?&68G$zKR$>29m?OP_EUK6i^ny`Jp(eLSj1~-uqEw>otM!MM>P`0cf%MaRt`O z`(M$S!&jqkEHai70Vzs?X8r6(UvrlC`J7G^Ym#y4%5xGNW5FYOzEyoSW6b>vyX`FR z3RpD|>E+Eo9txP`A@nmYB4)QZf_?5)Ojh!^f>^pjWTv#tfm%|G z7_zstn2^?X#V=V)k147w;f^46KaB#jaknZ{;tjH8Nqd`8zXYfkMXcQ{WrOH0L_Rp@ zQs(S%(PrU?Ci%eP%t}V8eNitSXy^tcc9zm&GDAC`nsrDgN=|hHRM41 zmJHoG%RF@@R#+54Y&u7Qx*CG2A@Q&8YlPvIn-cW4AERflGe$tfB+Fh^ zLRQW-{UJF|H${a_@R+mj^hHJH|X->X0Qg)a3EU; zy9v;kMxc<2xO+$MgnfZ-1rsO9W`EoqIUx)H-q~cO^jOE-S%2YQ6uPCaU9WYaXW>w) zq(owjnQJsYO58wM*7`<^_$SLUU8bM(<8uS_vEiQ^vHM$En@!uH{sFrr2gDl014d>} z5t=*A#Ks7V_gK<+GhvhzlZ(*cf!}*ZYs_z{&TrGsz3H@tz|jug`w3Ms3W2iFY=i2l zg=xkwyP5h>1;;pS9xX5;V^X55le=g=L%^ur%rRDZRSqAytnl!RcLo%dxWI5IS4RE5ui1HZweuio7RYmkJ2p%QfB>C}tK6B7Nj%`;{cea+FLKFL+lqe292D zMR^8MJ`%yKBI+6Q1N0i~okg1jx#@uPS#&Z(2Is~Li$?K;n=ebTUl3Y$w<0LvQex9@ zniTA5W1*VPkUq(Y`|Z5_rA*9gxzjJhvD@@fGoj;Aqjgx0EJ9E;vAA>;5iiHY^(DnY z+)rVx<%!rVUbSqnsyym0*AIl$jCaxY@8m{nH$M-`Qw~{?{6m-8+TD9~MNS%`wW-l* zPgF6dz`m&FiO^7PXx7Q<>ck+LV}sbMcj$IFOFvz~31XgkACSk3cC=RRAfQh?xPJ5T zZ`n>U&xIhya1y~8-u^a+=Cw^Qdo z*l$U(Djpf0i5hLX_O({DsU6Mgo_Hy%^bLEL>MCi_@nAfqDbJt;AIO=$0!`F%h0<|= zVI9X@A{}V_vL0OsmqSj21@p}MUp>7 zx%)_9j#1D~1%e=?)XFKuKJ(@xbm>SK2^M2Ko~>-R&w1YCnZcxx;oJex&nd36$s(7_ zcc1#N_z?`PwOdt(on#(3&{h{;|Kowiv-TWYCWl>7s6J*}bntmd*Hz0Z6SiGra}D)( zyy7H&>rAf&_5eEf8BTxXfMhaPo{Smb9S^h(9*R>UpQ3zeI0v}PjH&3QaF#fC24T%$ z8R)mR-)~`GS+tm-T&>2wcI&KbZFNs-wg^6FC_9xVkU&^3Z%<}tI7O>V_Ma?j%fZUzQhN-w$wGQ}?+3O~fX**?u1P2b)+&MqbiT^#wgkroxT zBIk;r2p56uCGS*`VASN#1~y2bIlPX2&(RkKq-&l8hiSq)g75^RqF_#EC1~5!F1o~+M0)h0 zI-Ik5icJYwMaOhm4*Xq9ZqkvdFi_+J%*3R=?qc7X2Zuf?jpO_-bB&~b$?)LN#F>{s zJvdIiQqZ`vG;I)E%glZ}>o~Ks{j@fbF_HBjsBe7wy0q&$X5v?qWM(Jb>`}2LyqU93 zFB3rN7e&59)16vQ`b#SNq-F&<~r%TME z{`wdlcm)W!-&J=QxJtApE!y!2z=WNbIe`^Kev5~o770Jdmb%!YX-S=23tq*gLfIU_ z5JH2hD_j@IH8!@YV4lrU2r|;u&OAbCR2CCR5bk zPXsF;^K6jnw)WF42=jWUjx>ypbd6{sIMl@y{cv?;a|jx}?c)7vI!%JQ-$hgs1Y=;4 zhYeAUGID(DdM)8m{qRn~Y~(h_QhncqoL2?001TFa25nJBo^NlRN~IYGZiUJYdOYj>682e z2IVLoQPvWe9ds*>njt&ftJ$j{6CC}`6rgpqA}rc7*61{5fV6H`32}v>FAEABNjoR5CgI#tAlhjyThM^#Wa( z%|m9{=NaaKe!zwn74dp|2iI2q)_J-cI~Q&3`NTIY*$*!9FFH9^AHc{%#-Eroe$Tr9 z*ZU2PuHyS*L2&Hwi4wg*WMy%89MnJZi_^BU%s|vw!%ua*hBet}R#&@BOGz;byAvwD z=};miPr9BzpNHclMtKekwHq#6X9qzEPH;485cuIHugUge_^%R0W#c>cwIGXB5La=i znLG74IN3DWaooGJN%jE`1F5Kjx@w}0Ly+xysQpR*3j8*uabk14Rv1S~p1hzU^Hw;i z)0^e1+#-)zTalLiweEXixWCyCbF>S?nb&J@{s+m5+97=9H}Glm7iDeR=)peBW+vF| z^#N%ez2uCQzc2(*!}G#pfCV!Y@P_L)R?Cff;|bMBAF|0Q;;d^M=jBaI=zS8|ub?EKp*LEW-lpi}WK~&8C zXLY~JmM9baRWxwVr{YloMY@s5)Yyot2IS+Cu4j?e`&WG3i`%BY89cc;^) z2B!Dm6iIh>)t?__kf;c+ZTSM^gD`88=AQhvNPz;w2BDKg4HC8qSI9h7fN7!u5a5XuKO;96_MAr6~!zEo3|fhmxNn%ad>riM4qa(^%M&H5y$MUHa-mf|y0J z*zH|naW6d)uptD;GJqC$+C9LJMPJM;Z0iPE#SaAEbTS8MZcn-xsU@9s>;1iuk_G-M zz3DdAM0Q**bM2HI_?Ul<@ioHF86Jxoj&%%hOQe0%As98wxB!HV8bFFWHU%TI1q9kv zC4mIX5=?dZ=!>r51QhM&-}iShrlouphK6WmMrGs_B__4OH@J;uOc7_QMRxf(O14i4 z>HQIl5M{MGyQkGg#ky3WpYiD^MgvUzuG0jw$P?vjMKRjPg-~!7^&#VNgGIfu3J-Wj z2Y>8rDielj3)Vl?sLn~G#K3F#O(GVAq)OjrW`SeWf!mKk2W@_?3K?rs5*`+%25fp$ zL$O=!f~UPJyI1V?(aTktA?FY9QbJv+;*xm@td{tgNH|?k6JYi*I8>&KgCIJuex<24 z>+Ra#hB@V89VXY|C2t;;#J^v2o=W6K`tS~rJE_|=JpfrNnPomtDx`tI;kZkfz$RC5 zy&f5pNbn*ADP7MM?BIOveN(o2EI+Wn&?nA??2qBr%R(dz<#wjElV_wgq@qK{5e7lk z+_wUKQfiL1sp|)7rL~CQ^Gi8(>=}Mv&SM84OO^)R+3`HYZQ_jee%=5GBemBIpq`bf zawWM}El`+5=@X!n;%6LoweB2!dEY@BIyEch*re0^e|F9pz$p?MXR>^_5BPcGsT^~t zYAzjqae$_Y3o4sN18lb&+m~z?yd;BCNu7w~#|y)Y(lRUSdZc|^5EBHR z_mVa8-7qHP!mWae@gDyamsaS9jK88~ivo#x3A}^XNegNx`Cw+XnLr^kGtfP#Au?R{ zx)o*wCO^mKoCcZodxLGqy5g}arV@vf~S>a4+#vk(?lDCgWZQKdkKQ7_CQwjJGS8+Ct>e-F+h1T=3a9* zS8XH{nm$5Aie$YPEy6i((e-mms7}9Eb`;#ms(!)iNKc3P$2e zo^pPsU5+4U={Fk%)XMBF|iTIef1{Kh_Q7r`PM+tNdDoqm~!8}9PePB}=>iN^^{QZR%^uEZ7Qrbm{25(`Pl zy%yrc{^v^U@xo%)A&z~xCi-D~qN{`<0YANdTF5e^6x?wsiPlx-;^CAEyKIRY zS4&__B65_@e&^&+0n`~S3ze1uD0h;uwSZEy^SZ6=m_bCGIMLWcxeW$5$GLk2HLgOZ z`p>!j)Y0LqGVX++i>$x_N5$CH(N$$gUt{ zs0x{R2ms>=JpUN2&pSYqx*ayb)Rn5SW*D{-8Y zg*=rh{R14NTfsFS5jUlk6Ft~vG$Htb5RR1mv~jtN`e68UudxXs?45;i4+YEJOE9#L zUPq$ut)_9!pg8UC(yI6@FHMuVh@`njTFE?mo8)iy`XEMfL%8j%2N3!mL^x+di zpOS2W_pxGM-d<^oO&ur1GtY6M$CQw>OB1hdrDwOJ!-rC}7Wm22kS-#ea^4ofoWFjZ z3T&rvWvfzw%+>V7EZXzDv}<_hA1IpeYsQm)BjWSkmRP&Dh%+weNr_nuuXdbcu-&Yu z3My9=g>Q0RbHY1!!08V+@67bcP~`$P4t#fLwv^4Bv&R@GH+!@Gwl7NB&xbE&26ef$ z=R^;-*$ES~;A3gtZ+nNZ2P$PA;%UQ;MlYvO2wq9Bxyp9?LuC0JgA+kW>W*iLqiTp+ zpWTq%?t^MY55?c}an~BG?~70HKVK%q_q(WK=7zJED?vh7r^A>>zv;{zl<&g9_^&^x zYIR?^f2#bqFfL5EhB_~y1ypJ~q?ga0p4N+YRl0pYvrB%8TlBbvapO02mba;}q8rGN z;Dhk+dC4{pz}U6U7P{>(^Z9K8$JQFYYja{PiddLs(d!AP?CH&P=Dn|Q2_olj35Spg z8Rs_sbRPaC+h3;7`4S@9QgVqqdK>emHKHU?(vX@3#AaBb8Qn#7ZuLG}n`GxvRhb0Z z^@j6!JJ}Z~pqtjPL*`gZdubT@newSog^3)fyw11VW5a}@<;P?N=S0A*M^BYcn-lSb zbFgx~JkfLUTL4>F7MV;oO`M&^1XfE{0IbP})PQr14O-)rAxB1G+qH%`<$91~Euz+* z!Sx%JVKwZHnC5uu!*4qOK(}EoO1oMi6}7PF`Ht~Cn6krmhAVS{Rcdz&7lLDacUdYE zyw}M{BYjR7P`SV*`J%^yG0Nhk+AX;>2HRI#O*ZcL$)$CX{UcPDoogTdz5kGn&;gku z(C8@l;V<0+9TNQz8+Wcd&`*N@`KyrPXV^ffeEXPW*dGAoit=@xLXM@CdPzDg5#2i$ zZ6$l;VU`BRIIsQkgnWdJ!>pa(1Z7K8wMdaVzud=wz=t9`Z@Y#;e<73?xb3Ii2S&V+ zxf4B6eui*HtoV+!crzB4C;Kvt3)r)IMrPTY@HBqsPE=0EH=X|H*_*1jR!Qn5 zIIy$+K9OJ;#4u5c%@s``0ei$O>$;Y$K^# z2ZW{}ukGsA82#UG9I_jZ|4Y-I;yGvPpBA^XtE7KMf7W0oA1Ja z-^v5ux~X(uQ>?-I-IB{Kdm3ofX}Qqho@rSBuzy%m#|J0HEvKlls-r>jZ#vKglX`gR z>P2}*+HytXbInownZYY_nVL}2hI@?AazA6)r+g)2oy>9~*lZk}-E~L1S#P>^#XjXA zsBHlF649T&r2XW0NA2fn%4$MHuSnY+MgFjC?~2G0j_l{Xpug8S7vxbHko6N4?~8?r zObT2IU|Uqy{SSFo0vO|)j{9;6?d4S)?Mcx5;zI7pShBi!5^GtO2rWX)5!f4X#=GjkJb6<+{O-_ueGcxWc)T z$)>*cJZs+hS55)J5{Cri#1)744fg_qd&XmpfNYxH%T(|vsx>#P<6g7Zzv(=*?$K8h zR&^WgzUlC_MjUL?a@ksk+PSDY(bKAM6tIE&WUSR~n-*WG z!q65Z?63nh@uhKuYrm!>2vZ39Kq@@*KFC;uWIRc+Q|h}zvDUzYC9CG>@m^T@#A}C2 zUbD$D)sx63ozGR}FsNd=j1&9IHgOI-OHLA|n8GwtrIAgt#8pSiYw*q~}!c0jb2 zy7tUcc1l!FTBJD7?l;?G>}`3={lqO0}ne*LAb=}w7Km*jctGSaE zv*R33N|>1#y3JS0j1W8CH~sdL`?df+zrF~6-k_i>tiKPL?-pvEa%Wc*j@8m5Pl;9_ zDS~L6;X^kP$;KAvWZ}&1nRM>3x;f{@6W#G)K^)$WsZ9g$HqZ%2>3iOni?XFTU!|4O z0dBzkap(lNfwwSy&iCSp;8!&fMVOs-5QorfkqN<(my@ARrdjqy@iy+O5TvOCtX`%m zc_0gs(qI|DAx_Ag{ml&bht_ef;h|}4H7&SBlT$!Y4?TXEojp5~^KyIdp65XUT4&>F zi`;6hKcmvj$`d3k?u8Lfl-avu z4~5wx;B4wMd$ix#b%As09%B*)&)}pxnEt1)LzLincf1y=0cF3uwkHi?; zVS_eK8tt0-fwu*47if#nJ%~PARZ?skS@q(LJb_IK*jm8s$b0+F@ep{H*n6KLV&p#QxgRKQ+P|Luz{P1hS1| zs{}UjIxMI1y7kAz3zhq2g{{pWttvmN(4T%+BpP|$(l{l`R0=I;2Ra289nzk<#eQ6H z0j;!>c9q6RDe5X-lbQhBpUB|az~f;QkT(&X%4*7rTC^LA({gd}7%wT?z6zk3ezeL| z>grjx9=$HoOZh`pxG~GSS#axq?#8#LZqFcnVeMb!Rd_h$_Df*?6kq}$Z^ zi{OuSqjJf7TGphl+!XT*_m3s)D#r=`$zEX`lBTqw?4mzhBM?vv){~($_FlxRYu6F(rVCW%e zGCBOvZ-UmXU78Or+NbgRRSH5Dvzx2Z7uqoR+ZrBB9zP*`mp;J_HB=J5%d*bP#Cz;p zs?GdUZV&5dAq5v52veaZZHC^MqwUv=H;4%ruH}zypoovIyl~;C#gm=g9p6&6&t@nc zMLCB^*;~E>P3`Sy*O8>BLcDZp1kGJ|9~YPr_8s!B!JNBXiJZ&>tW8YpRn$nMf;hUJ z%^CHEkWO?E($nMhsMk`}F$0q@p^amXAf^E!+a$fe#D$Rj+Lgv0*jQp=B_lqbBzmGP zQVu~4`2oK%)et+2DA`XU+Yhb3?yL=L@Qtb89S-^BPO;)KPkBb=yG+0vNN)&F$E#Vg zgh-{8L*C;LV0%uO>}y%A1oa3h$p-(SRe)@5^0^ULX8&9U{9Ndvt~Q7zG5?L1K_sp- zpkTCn!VT5*ZrsV9w*dJ6Tj)WH6QzZ zkot;Hsg8`FaF;!k{xduOP3Kma){ka)J>ae|<`6Pnk;QJ@1uY60Wm@RVTyMqJ+eipC z7l-kBcxTxOeO6cNYS-4!)jiBY(wO>~YbvTcQMq5ZPnlKD{!}-&1@Taz4<9sp=+2qH zix}Sjh<2=X(poYJ9vBH`>8*bAA)DHFu~m|`RGp&_(^&mOXcDNQ5#aMO&?4dq8vQ*CrN1XSVw?c^Wb(k z<_!@3_ z5CgfXN1$|7v3KuD_9*9i2V`hmgvWb2ieW|#{zYEm% zfMA`3TcV$>zR{f$oLHK3eqqo4o{7)sUNy4BiHvLi0ePpx`O3 z+D+YzL%JO)-p5j<*iS994AwHifH|~#sJnbB0yzV?^?SlVZ`lfupuZx1@CnsP>7w`f zFLiGtyju|j*O|T7OUT{DNxerv^hHnV-z^}!nb*gJV;19EP6W+8LxMl|A*r$mX}5vt z{kx{mamuY)HX9vy`z+Rm)*Df={9gs+`Wl^L4vAhks6sZ5=HSw|)t7WyNoG5VIAOv? zvSl!c2|J3m3%ZVXJAb}pUW*S+FEQVM?)I~V=ZCz1^vXaKG~+~7xGZI6*KzNB;izjJ zW8Sc!I>)aO%X3YK*|^X~*|B)D8(B+5MaD%&v%o^MyK|f!cnb^HJ6~HnTC7ymhz@{! zL|3a)VZ-glT_zpvxXFq-XT%~is=gxbKc0<$?jZk4arK_8$;fgnLqSk+NnPSb5?7^= zmYv)LD7M{uJ@2iWwg0y>zXb1dGsDgbmF#jUTH@uI_SN3l^-~~yj!=_ls-2W*m%CHY z!P~`H=QfAu(KI`(s9|U9{DwlP+kg<|3HGvLndj0& z<;IDY(>c(;Qc6wqBeUE04!w5z_1|rG-+jWL_sn}qB{#HA8^!6xj78uw_HSBa!4uun z*2C5#o(JC`SolfW<)0NCxO z#HpZh{xNOC;*+2XIRMzYCMh?4*?ujF?~rJ?(CYo)Im7wFs!uzrGv?u=tUP^y&wAIp zP782;7)m;xudr<@AkM?5-WiWI z97wr#GKcq0Ks`MdK)}7#yRa|X`+{5r1}y{XKX63FE{#KQxOGg!kK!)%qGQ3y9@g}WI(?tZu4OFo)k53C7 zL`=52Jy>&&zZC8#D=I$~wJYunRG*nBE^f*Edb{un-0j#>-LLvMlyrWF&*A?;c>{W8 z{GJ5iVI3Zz0Hy@_Wmt3N1UF8kVLsSqcDlAZF5t&gqH5x(Ws|ayWev=2tsdT4+(o@} z^FgaiaMC@GtGbE1W?~M0WUQ#K_Yfs!9Tf)p6^qC96Mx{L6JIidQttYGez{ub2UngO z`7-9>B=|}xXz)9S2LeVyK2OLe!R?izs^v!6yx=0t`IKCEPP8JudauWHqLjz|1g@k1 z_k-=6LHEu%MnQM9``!t-@!>r!wU8Rf)P99CR`-_yC%vJ}|56H^{Ol!u`z|2kFpw8U z0a=-vk99`_3L79UGdtP8OW2g<(___BljD6Xgl_LiBk|WGp6A?xem0JfwQsHK;q~hc zS@##vJa>Q!;O`?FwU_DN^J+TM6NDG8KCLo8I{Lb0p3_O>!SMXr7eY?_JXL_$7*gKXuTXQi!T7V0|yHs(V;k8}W z;8^g^R+mfU7yC7aKaC{GJ}AHU_VL1}og7&KuH3#+cY!;2pm^3{lKk({f-3>vd5Wsd zyPju`$iE)iaEnX&sy<|Qf|jz&81(P+gOhX_We9hMpVR!MiOk*cet2>iISINwsO@|W zCdkyF)DQkwANiz1^d>)l)bVRRR!`;OF=u0!&qyD(7Si}_eH9%Kb!9uJPY1>FSO@f_ zwVA2zf0v{m6Tv_!Z7hx@tRig)y#zLC7mJiaNpEcvE$ z?CUiePT}Bkc0lQH%5_E%MC^1hL(|(bb^&|2`~X7_+hUn5+O;fQM{+rynY-&#$WTpd z38JjEt68>fBrHDkroFTB#?|uRBZHQ|sWKjhS}u(L8PLC;0JUsSL;W!vcLWzGJDGh6 zdR!(S%W&~cxemHH(=%+*(KBZH2tKX=$U1mfGN7pbiA}O}pV`iVPHxSwy~5mCj)mOh zDY``|h%VU)2SO!vV^6^TIT7MUozC%{H+8!c?%nJ-H@Pprc9wYF!pb?ewQ9%OQP^gI z2i4rt!#p^CI`4gBqg19M1pEhkqrHGl?ULWa?bJpyn=V!mnE$^7b&d{6*G;)Ew8cxn?!r3vFbY|XI>c1ofc2? z>_GjDugt?)L{oAb4mbxf@m&#-QA4%`wm*o2YkE@ty zs5s7X6PLu|YwA|uexljr%`E?+>^i-1qgkE?(E`^<0kbfmd$$f&ArIy*<}km`<@7=T}NUT~0;vn>p)=QeYxa z(N7vo^1UVV{Hxwnys>-Ks6o+E(Y1G+acF+Hd}7Hj&SS42s15K`7>T^EbxBDTWvXS440vrPJL-O6! zE$!PI>28NiVD*Yj-znGAmOyipCYd0b{lS(U$N!c{y~3A3Qx}AQ(dqRTihKMoB_pNFBK0qIpL_@K zj2kO$n@Ou4;G;SQ1BqEZYngX>6ajWkL6=THG+FNQb%lw4P&dtz3c@E5Mi?!OJQPN_ zy45ovr^B&MPixY4yz(m(reRZ(0*C1TH-5>pS)?lw)~39S^aM4~;5e=&*^Cx^!{eriQP=+YvrEqkMbWI7{3Yy&$mmywr2xPb?QV8y@{riTg~@< zxs;=ossKeiJIy=whq|5t+bX2EI%DcmEmpWZ8CyzvkJI-yknxJ}h%KRAHVql<>$9p| z3G|~^S3TnVbqW9o>iD{Mys==vBa5WN`^zuCYme||zMZC zi09YU3 zGmqsC7Bzvp>sgLwFUmf*I-E`9CJ$d8u)p??`hREQLx##!7V?;O>m#MkRuXg^rsV@g%TO)>dO4aF|^ODsYMZdf@6B{{XmWA*7RA9v_FpFjFAK zw~$qnF%;^Sb=bLp_l%*G+FJl>u4W_3Qp5^u~;)ff9!AW-;Je^F=X74iRY zn~-xGzCi|n8|o~JlzGR?@JT>Pbu;hnq6iy4V|gsn+l|ORuSPb?);Fo0u8s*>h1#%GT;LItozk(f41^ zNXsF!>qhVZ6`tQ*p$Cbd3?Bk?^=R~q^|w}4-n(6Z+661Px^X6Az8CevGykH>jg8Vw zFSwqmgt@;|4?l;Hf|oB4taFG`HrPFWDepVeD!^#*6F1+3!CPUxHPS?dL=M>@2gthqioDcc(M zlX#*tWuuYR*o9*OF9)qbqa)Sk6!X04Ys+uwwfGJyyK#9Clc{^6PUe(7ZgA7D`|7@u z&m+}!0qUs!C8NY1OXEntMRU6Ty1qVd%*#y}zeqPXeHN3T%Rfvlt8>>#ot1gcK^>4k za%iVk%UW~|1a83G^wR>w{zAXc0wv-YmYo_JE%|^Va6|X$L0ZkJKT+pf5=Aw`7m?#? zY4m`58sn++Q4OP@ZINM|tJ7~!N_YkH9VbSDOPa#@xN z?cOdXu;LuCRA*tcfFF$cnF%5CaD5@{w;wBSC>6u5+(3EuWz{Pk%(ULi66?qd+%k zsH}H7o2$;IdA9oYK~h%7!F}=;six^_$eape;R{lG*c@xB{BFQFR(snkf^iVC@Nf5+ z+hq4ioV2j<*+7)O+44AAm-mEFA_1uXsVX{{ zR??Y99eFby0@8bg$BK`1Dzd$WU&|kQkqMON*WKD0cD?!B?^=lkfsE&R^N<_pG7(#m zk=GvW8U1CqR#8{K|5WH{g!-7|x*baHdTMK$pdGcnce=8?M?6=r6meWeIrF^z2*^fs z+`8<-$q-mK7u-FWMjJo1 z6T7HE5nvGK8Y^ZB6-v$1O@m7t94Z|K$VoljApIaTbbiVZ_?jHkIpC=HSU_LDl zf5KTqgxP*k8k?;l2^DwlF#8)>-4jdGNIc6C<@uTgHV#n*W2i%k$Nu@ z1eJs43=HeZkBnR^#&y=wfpt>Tx{5YX$Ke*t#|K2%z0<25_A?;PyutIklQa~^mpxAd zHX;NdzR-d2o}WDz#y6AnpztpEHeMfj>W0w)oiw!5%iRD-&-Wa+{>sXN8ds@7POrE= zPK&FT;SBg@sM=#zKe>A*7MVb}TTZ?iwspv}Fs75E-ppA(HLYvdDOr~n@yn|)JOI&v z1-+bk>rX|R+Vb13s_namK8lr40h;`kHxI&z5jN+NBd&x98=GI33Xc?0p=f7v7f@PH8xG4U;YaV+f(xryGP;X|Y}O zY<2i8jmFP%#G`=@Yg4xi{(6`21NT}uKK%XfSiyI*d0( zG--^ic8qz>IB13zVJko)|jDf)qy z@)So~etDalJ03W5CIigIwdXE0^yoc)!*x720JA=M(U#P==V;Z@-ELVY4iOW~2+*x@ z9m(6nt+ev7TX_6JVm7#V2^Lc6`}dKjaUzvBOpt)lgfAugnwV{TkH4$Lpog?8jOJ49T0A5#Zjd%BXc z9^3Sk&H=Cuy*W#}-}!S#^~*`zabiiJJbCi_ZD|LOxd^2Y?n|9T=R)R)?k>@r0(y4tC_?Y)l@sI=lsEZQmJGy3+qSNVwlg7j-7P!t}_KzBRz;FvU?VCD_dAB^? z=vQN|=Bv7gto{UPbPkqqO2PH|zMUYb%jfOGvrm$fsA}^p{Q*s%2>fcKw!3NfzQp38 zcaIwJ!1f`d}y$^tR2`(qggt6IdTXW>*`xur) z=K#26ZgCTOAg-Tvwdh#l$a{}jLq2=<6}o`--;n}mITQ>4*32+ux`-yYlJ>LiN1q6_ z-&3{G;nU!6t^p3^Aie;?axUEJJoXUM7#bLsb;_rg>W%C^b;O-pqeMUuHK4BFT(KQ* zNwZEI@l8}QyMFV7+A*ZOuUS`XOGH6$1q#KtD0)=v5oXva@qD5`+LA6wYr1^_g!(2J7nfEv;5f)nXp4U1lj@PcuTKN2t)1 z`@lC2%wv$rar$avck<=#Q5}4==>$K5-7P(Nzc(gAtIdB+7%ji*<-OK( zTJTJ2?I3Nk-_4^2o;|^!nK}~R>AyMQtTusNSI2IhT5$e9{+D+}oF~Uar}p%9CkF(_ za6qfTWEu22kHaJndAWq~j&E>WK5XKgrOV`qjhrVV#BlC6SFld`0HyxeyJ?Qa8Fsxb z&pxw3>ZmE$`DSnPn@h^=H`hS`7SgkHI<~%H#&P?)o^+@oyem4dz@dcX0Z)s6bM?L? zpTwQ?51w++`5fbO)AUc1CY|4#IvJV4dJhfE<~B3EI@JUHmOS2ex~UGzW%u(*Ow}hz z^ASuH7Lb3jqUFE5ph|P-07_-2;3$-pL!EI<-=jb-TQQ?kZ^@v=#}X5@1Q}W!CTQK_ zu-u#Wqx;}J>0ixXFEo<%!C>ZDAiCoaG(H5BJhau;AEiH5M4wN^^10*tDQcp_&npC% zw{ejH(;{4qwrbgM~R9+bw_L2L&(iH1-zPBa(XS6OWz*d(FR?n>k^({9}Fx_<7QIj z`CFeEMe;plY}7+1|}1EfRK!PqLGP*=j12)tg4r!FrStmg+lzq#Q?WA;cxb!5w#muK`vRLQWOL zht)W@B=u)D@Nf+vHQ{s-VOCXs3d-s{)j>ff@8OL4-^NLuF)vLx9-t^3QM69CZgcka z9?^K(^G6{wu4*Un`xWE$A>Mh%`YhSl68YHC&c&Ea&}btseP0yW_Yc=U$7qDt_Wz?u z^;K|w`G&bi6fRCMF8ey5fL@(-QvRYw_q)Y>n$fXh;zT7Tk9lL>sx*HoB9j~MsEy;7 zB^_IrxymXDLS?$Lx}=mOEg@m9YY6JUhy1<3IqY@W_@HW1O0B(g<1ysfY4|P*rH5K! z#u4L$=6VF^oB^M<29u?^A%IZ1-0YX@gec_Z?>mU!g{*hMxw~2Z?=;L`tNuECVpfo8 zyUO8jogt~hsPEMn?qi^_t{4}i5~;|C4FR7BYS#qheFVLZy3b4!bKu~*$R(Mir^EC!uqWSerZ7@Wi*>;=zs~e$Onl$R+iJULwArZdG}G* z&bg?16E$tO@02Z%l94Y}+uW3VbgN#5T+w>*B&}sGbYk9dKoi}bUYEnppV%QS13VXd zzCE{u?=vK+03m+wm&~xIKOt|MC{bvE&29fvI12sOgTjU+OtaX|gUL)S8l^-nT z>lkNP^33kjnLfIACoO0(dds}~ixkj@M|Aua5+|*0tbD9AlOHB&D^3H-&xNU$zi7xh zQ=CNE*L*`Afq12wLqHeZgkVmF%F$kHNay1NA!6K7gCN>iWnAu&sa%DL*O2s^f>xzB zeMLi21bRJT|2d|Pc%H1u7|M9~u?%JLDHq!Utnq{!29;x4O8R zCe|&#viZ9CZMiTilG`9RiHOb*IhB`AzjcoE_a4jRfyojtqljEzwlagd(!@NAd?#;y zr%R|#bU!WYY-B(R!(j6_S67bj=1Rp$Oet`TYdFgYr`;%eh*&PQ<5OPa$ac!&Fb{2# zf2sA-H<@ZDCTt`xE<^QdbB2cSfQSH$l)Fgo(;$(oJ~lbd?i5}T(EMq9^)>opaeePi zjN{Z_g5<^>mLiogP}Uc$f)L8O*BDCk;JA_dTGhROj4Pu(I2K*P@3?|L%F32>!(6zV zqj&?7C|;Hyh%L)_=5n;Ba%)<79$)#cVk?-Wd21jmP0y>Js;ic&B$NDxi1diV6ew~X zU-+iFG?Svm(vSuV+niH)tnMQws6tkOC`TtSxhwNJr|X?Ba*)`#x9!bb-R$!16&T8l zIEND#w+|VU@oVHTX|cKrzqu|5G~c%tS+{V<{Dk54l)&1du_X+@@~+4CXQG?A9*U?t z5VpRP`+l}+5u@;nGt|KL+&4g(NIpGf?E-DCcU{W<^7KNuR|^_QG(=uRSes-`|9N`v zI!+pVqCMZL(*A6X(FT8iH=l9{a!UiHmXSo07upb=!%*fpnY^2(uOQ^qSDc%k^I&Ro z_{;oB0!OvCL(+ z@Vz0c4^~o_0E9i6kLjGK1%Z8hB+bN5tG1Qn2o~iF7Z1fBh{-!Rjj8Fksq5F*T0$K< zU~Y1EX7W`I!h}U+LxjaHhA&Evk=Zt@+NEwYyBFz76#XlfAH%2>Y7@%Ab2#~}E?4Vg zFRC&RcSUV=S@aZUItKpcuLELU zm`Oy_L$0QI%Y?*nOy!VutkJ*EeQqz_oL9D1Rv5>%Tnj%AX8IB1k6cFd%x$OEUU6n|jR&^rd^E3CDlw7WN#7k%!Ouobl&j43}|cvh*w z$(Ivv90D^E=lM(tW|_jAbf1Z(k1@FU>2SsW303L(`1iIV*lHGkVm42lzQk1}Q_NpR zMiepRuzzPsq=y#K%V`o2+?lo{3#|LhjIqS?smxe18=W}8R=?`YSLuRv*r(i5mHwe} zMc) z0Pn@$gvVthDFwZL0aO>%-782G{LSURP=afS`xt||76$Eql}5=H`Pw@>?3GiE&}MA|pB5>lFDZ^5KOR)f zN*Y&u)iL7e*rV(f^b-KR62~Hl@IjC|Zv}1mp6Z3lhIJ;R`#i5bZ&G6R(+3yDqj-JaBWemh_;0b3td@sLpi53( zTBZo`y6n6OM(;_^`ypxu=Of?|YSW5O7h#fi2ECki2u9q0F!oh!RhU@)k_p(sAkA~; z=(eVxj@uZ~29YwVv)7iZso`jgll;+#ku>k)i}mGjx%eLA{?^eUx^rFlT zv-fb@1KiNxTrVd&Y4W^}Ih{HG;G8G7B0`{7I$dL3wgoIOQcaLGXO`P-NM3 z?nkQ=M?SZD%x?C>1AS|KwzXx(B+F$=t@mS`^LE~*!bVt0s}b@LyjkutE8?`vqrDlw zI(w7y=lL`7Tw%28?t4)#5M@I)WNpqE(XbW*(P^L&N!)%H?*!%b@3ThJR~V7W3!;KlktPzt!&f3oSK$gM%h*>1WN;)Iyl@bvx4{N>8FgeGg~u7tG3JUa6iR@nUK``=ud@+K-h&w~SfL;L7G0z<(FUpgl(d~?V1r-rPW zq}o3pFLBI2m81Ih^7fKaGQphrVdt zpLwkEnqdud?k=*6l8m=7Jj>^7zj17wCrGdIJym#3R%lE3(5BL%Zm;e0(i7bHl*z?# z)aO!tToesle0GyrWX><^Plig0)nhwW38%PsddqG>Zie@V?LbMSMk)CqhsvU4PBg}5R_ zec_*r+{%oW?|!GVg)h_#7^S*Hydi!;fq8}(W3@%!SvP(5TwI`;f`VTzt+(sAE9NhjW7u%YZvB6su&R`y+~rzzM9C^BW(~9^}oFyHPUNlM4R#$&0~7SUk;zw((|b$;)C7 zSqDY8AXyGNkH$m>0~!`hMe2Bjm_az<#x_OEf6|H&n4GGOJW0yks-yrERgbh}+)IG9 z9YQ3jixy@T5n#fjeA!R35`7WLP`H$p$@lw)iWN&!L_XW{K6RK^T;rnkl!SzpS))Ke zx(%9G=Fqu#dfqe>T{ELgzn z|K|GOUCkfx@E`2?rjlUTQ9G~mI z=NWNsFcIJ#J9#l&Z_Fn~C}}XD@qpMGD|oAy1X6n#Fu8!Tj;oiMN}6)6KqQVCuD5Q$JRIE=eOBIX`*0OCdWEg(p| zVB&H9PuTbG+O)g&2THI$vv*qGSl2aWHWP%jnqcn*?>H*E7KO}m{J-#SZ!6v6>ibqG zzy(4Ord&ZefNKrY0-MUK*gmADMqv zeKkMlBwsMU#|RIxJ##6Yxo}G7LS4Q7_OgF-b#eh2IxO$ntzEB_{*|#Ofbt`nz8H^8 z_BvJBg?)c$)Q-HIb(x2JiMeL&>0vI-rWLr1--3|j%t`X3xFGW5_*049I4fsT z8ufvt($`3+xB@M?)RsLc5Lfr-OR0{FPuK4VBzQ;uwVfq8c>ehA$L>>Xo1cw_6Z{p| zL@Gz!gY%0RnxKIS8Cl&?=3u8UKk6~pOQ9E3(K+l4>9{V>82=>wC8p%q@|=r8S!B?L z@#dT#thdaKfT$>zRl;Cdfq~O@7`6>E#L&z$TOJ$mJ|B&BJ~eeVe$X>^y((Hi1LaZi zHp5sa;b{R(lFzP^N%4N1w&>$SbKv?(k+SA|;l#N5BX#T8Y-?d;*}iaZ5fp=uM_oJY zxrz-b4=8lwm8*AuTKIrb1E1~zA0+=;W~;KvuPhRjc?tx3hh;vf*TYpr#0!^`NN}ce zT3<}s&N5sfI@6x`p&-Yx5vs7FsDCd=QE79W0wUcoDlMOXvClr&Wr{IL^_Y`6a2&kX zq=i2G!;rsv=;4n@**mGhD+4~HDZD+_6&^O*?-(Nxo~7??GRW(W9>-R`3y)CO~1Zap~9nkhA(hG zfYl-nm7_R;BxzRvVHt zJN=(W*18r^YG5V>b+7D~6 zT9hY*G8sj^+@p48Tdtu^3e)|Phmmp{@3PLT9W7Ak(4fv^vE_b0LFyXYW%5`LL3_ob zpCml*ZKk&-K16;3In(1Kl+*4+30jxg266oF{+2mYl3x2EgDFXqgr-l?M2EC`_-3F= zvY9={XFYL1S;E#QMsKc*aX* z!G?D3U2g&66PY27Qr1)biOTaKXLB(c*UzmLdxcjJ#RC(*y&*$$-u+3hPr6HOaWVa; zPUt~^HJ8#LQ|6|oeP6CJq%}IblNJa1+Q|4ASB<8yqA8Gqfb9h@R0IX)a#FW;F=!}~ z7D^tGz^$3F?o5%ucHujxQWYkA!PFXp47n#xT@WrT@kf}uad57R%Vn%PBu->-R^z{_ znHU@cZ@UN}44yP5Y$j{^{9wP)V2JUX9%}rT!#tzJ&vJaovPq*hArHi)a~s2<7A&4o zer4?@?neK9*#eL;#RH!clilDXKBQhKsax0QI(&R_(J-NTIY)tHM%G}HLGp~Vsq4d*eQW_nr{-j}Td5S}Re9=nSUN|U5 zu(%mgwA>&WaU_6BfBCubFsQ#={j|GL4teUy@|nwf{TFMxfEB|r*vUep26xhgX>lFh zx4*q(%IELO9tuC*%(NY*;38wnJi*wP7}jc~=oDU9{_}fQjIhpq6h)h*(?5PQ+amsk zn5k22yy9k4E^e=<+&)hPoVJ>Di*3dQtUBB6wdn3088@60=i?At*T+x{5l0X_5&ZG7 zgh5(-g1Fz#3&&qHE#ymInQtj!SH~Vs-q5)fn%A5KBvjzLpOOsoO#t4AS)1^YfgJd!%jz;zWkE7xGzqEUfijJF`>;J{kh*;e8 zR(PC{_quMUdtvndh0*Z*Ul@(kuHe|>2#XXM)cd&4T<2|)u0crPJ79h%U@FL4tjA>F zYVEgyw~CDS~{s8z)=;AtSM6ZT&w<)lUcVuTh6;(kM3et zw1Evp4_UfsqIk#WWw8F+gnr6sd(tAu3tVQW$=rXaF@wQ=KWLj6d!R6eUB zobfwqay~RtU34?M_0e2P9g>6gd`fA(xNr6i zg4eJ;Zr;~=@F#5kP`pQm{#bI;s~mqSfv-DBQ=r50QSSw&x-sQp5}6^0QN((nn?2vX zxZW}e>-K}hUXog-VrMIW8w_)bH|sU_t*gh;_JcMF-#__T@;1UmeLjascz!cwEDbp| zF1q2&8-spb*g=fUcJEjaY`WRs0|u!F(wpxGEZ|b)p58!vR$skf2=tI=pd|6njJWVJ z>QNoGnvJ!tN}31N!es4anO~CpW6;c-DcT1f&~9Mehk<+lD^_ePRN!$U$(VIDNBgDq zsu9LXt8U%to?)hC-y@|~2KVYX(qyH3zNVRhjb`B=N~|}b9FRj6B~UJy$Y0(U6V&7M zLBH{?!m+Q~-1B79VngV`a)R$K0q@<5JAoSulOcC|#maB>IL5jlkcpuP&RAx0aKPnM zhL{pio3_8BUe_6S?vR{g#xL-$iO9|uFhj{mXvIW}kMYU&-0eI6aO z^KD{8?A&wBDj)^o0Ia&Q zOs;aFlJiaRf~ky2!9zj1+~Ekt)rEIdk$%b`?Q1QZmn-NE_xA0$*X%c35cwCJ)wq{C zb|M9sOA~AsC`J~m{lq_vDBb^5obU8=-l2Y5C9hmKE55BTT7t;z9r88JvFs5{G|f&M zVng`g&Q2p1f_QRjj8=UlK#J9s6B)hZP^L|S@$whuRJq1d4cG<;Rd{RLIsuN4#r~Op zC;DszP}XxvbI^col-WcrJQjmRQ7jPOfO&iM_1YO50!!zj<7)GEfCuX9PYyv&ns@9V z+#+-~VlySb_pj)4*0T6i;+REu?t@4DWR13iu!Ght`=nnN3a!$5C*G0(h+PmV*T?0g zv|MLbP)l8GzMdsTokJJF&L|lWi(<3MV(;L*U=Sxi(<#H!?5;uPw{SPWWe(5=R$;d? zPHUn~ow^?SFB%^}{2$2uS}ca}#b{?_ZR{xM2)O(LcYUWFo1L{6W*c2QCZK|Gczf90 z!O-PSpC8@a4DCi-W8_~2c2mT;rt^s9g7p#lD!ant)qxl}yMcfL=7l&BLu{r|gf?k% z7#C}_By3hmNWrAlhZ5YlOW*%0JNICvTW=wS(8wqvN|W(4;A zJbAikJ)$6gA!u6Ias{!bIoI8(xv+_mq*9{1G$$Q-w=>UE%#ak9`%BzOOC8pvo$~yS zFE3pVjq3Qi)m%~vypV23c%oX;yo6`~IgdzF2c3D_{^_tgsJnOG2gjUC+xLMf-RR}! zynMNE`zJ^%xKf74CYl#{bgdDh1ni+V$L*`gq_$=e+uey9_aidDniZo zrqPQ5r~9)nFGBxgx=hSUT5MuLq|jSZrI%9{z)C~H(*8&(A|Tc>#h5fbY$GEh;!#7l zRYS_s&m_}(d?k1@V!u-w7nqbUok8nypCciF3#IXq#?gMulXGvUsw<~~R>EBib5 znE#{#^0|EYA>lQG%zc=5`$6$U1zX+s+XU(wTjueOOB@WsR2X7W=PG4%y?3(GSU;GY z!JgXI5J9<4NmXO+zst1!=Uvy&i|8+*oMP}qdk{({sE4i3)*%_fyJ;}VC3t{Vxo6ho zKzDw@0^7LveZ9ML86W04nODH*SOSDE4N16~FI%iPz6)Uj17`>-^v-#iKmgmN zKuPb^#Te0@EOGi>r^Aljyje^y>MLGuy`6$1uc;6 zy@dvfY-)?+ZiDid0Kr6s1z`4uy>YYZl464QhQeh;($mKCC~LzFrR|F^-!DAlO-MsN z7MRi4(p23k>;22(YnT+8F3B@BrEJo>mcTqx03&p*X3 zeD3CP9O7e4xIUZuoT_BhdR{JB^T$bmbmM-keHk&oaBx{+xUMk+;}e{4k2Bl()1(p7 zDuM8@AHw9r(>yc#>z1Fv%<#QtvfQ6^09&Nk5)b$+sQWM9;eDwd?}saQ&FQJN@X3#Dn*S-jGCaxmX&CojO>J_%wQ6a> z>hI55Zckrc%70onE=V*Fpy8~W#gCp}QoR!2zmpxN6~8Wadaay4D#&(u5qiQeEMXe9 zcEd{TO-_GHn7IH^xMv%*LEFd6i$x#ICB*g~2MwsXslB=~odH{xS}2FIC1`=w9M8hD zR7BLFR>%n_pC&D~IKbaL(IFaH6Y!3obrRU~_{z~sH#daoA)j~T^1D9Smk=V#UhR2u zBa^Chn^h;sGS2s~-tZ*g*%URhYH|zvObXD^@#4KasJgH!UC^Tv}4NZi2Ef zGPm@UEqSK5jG5GZ9ujU^>J!b6RHSP1Iem<=Mx+B3`U;VeALFDUzf633m+ps&O9mKS z#SP*;9w&BwaPNKH!e1t~;^}oV7ick*-g?Y+e_A`CY*2-H`&7kD38;ao>FS_J>V)(T zX+o=zH7a>yvvH~AU^z??GiV}nSFMER-to?dL?9Uy?pG90T%gMzIbM|Y&C*y22`>?% zdwsx3BYK;hx7B?tACScO1^2&(G@8ycY4Ngh*Zh>)Le38*jd0Sf55=_CkJyW z>07!FpK302cJ2rc_Du}Wz%1JjqJKS%5n_k9fYE?@srp=%z7V&udy}jG{LKf6+;cdm z;TZFV?-${oXld^G2$9o_q2q$y?3#RWi@t{7=Nr`@-$YM74gqK>j}{H>m(8!?#g=$3 z>7QAt-zziR{PzKc7USrhNm+tb^QLO0cmJ^kv%trQrdC3go;Y+~|A^U|xzOFP)5dzD zKO4W=rh}jYonajgv^v&HP)PNH@I=^JVEtwj4Vk!0VBR};)TWL)H7-9RjdIqBk%29j z#FmLQW6PDTr%@TNV&bRmS`8JK-&cW=&RPM*wE;4aOf_SgAwsLJNiXkPKhnrDCS*2% zKwqZ>a5j?QAxg5*(Yg82{2ekyM+nF7s0L4)&LRF>xjcQ)2q(YWQk}VzERlo zFkEK9a@=I)MPNL6Tw1zQS7V7)Qa{_(3LOH)+7;z8&#~tD@XhE+KnbBN%yvMQ$ZIS! zBn)Q>B3cCv_mxCPliAo>Z+^%})xVXTTJKC7+0GuLrqKhVx|zb%F9ALVlHS}c!Dtp3 z&C~mpBC6vnNHxr}l4*6S?AGxW*@ZIa+KNt`dKr!@Y6rls!^gY#2>mo&8f<~8r%l0w z_8%|^w-@RcU<#zz?26hZbrRp{LbBpfdDTr)ripXXy5ybM%n%xcs}a1Jm2|%!n?^V( z=SEqfq<7!8DlMGGzz^$oY;amQaeFu<$h%PmXrC`Flsx!Ran5f!SunNV^>SbHT%cqV z+xJ1ww3*^l41uw~hJE+=v819_$5{Vs60rQSv$=tuL$A;W-Y&`o+(6v|9CB1h>O|j( zggp|d&8)X8a1$=GEL6C(n;Z!zfIrACJ*lh2 z4}y?=P)Pp(3Tu@_2XT$&FJ8Y=`iT{j`vEX%=f0VlKY(M$KM*duAN?5GYIXxPmw-9@ zt5bb>oto+v$(uSW`hKCUkt>?7##!;CZaJlB<>0U*y|1{@Z$+7^b`+oIrKmfpV+~zy z77Xj9akv3}@eg>0#5Fe-hEv1G#+Lrzq?@04@#(m8CME44id2aIBEwM8rke%%7IuYz zM4O_ctfTHsi!=9>GeLoPF~CPnCnzkvY|v=+ZQ_!yvE7o?z8PwBG-T*Jh)=Mi=tqwz zojPWnCp#1N2WmX4c;0fpd5K$R04X7I;d$1t3Yo#7lj-tw4ZBzW{N~D-ii)SdQ`W~M zX_*Wek;FUeDR`2gc6EJT1j}yL>JiUc#H&=R@o#P7&Kl7$*MQ8b&wvLC+aI6-Ut~Ns z#~WAcjJ@(6tM6e?NYM4|iR3_V&)B_#+w>T~X6p`R_(ez$afyTicmWSymmB)<5r+j; zVEM6j-btFx#VYT5#)59pFQ}Z_nCb5ddY=z7P4Zwv55-YhhjXoZNUP|FMCIce+8^<( z*wgngW3RFCK|U`B>9Yg(`>PgxX!=`UIoZyHp`jImiJn?eKrx1aW`(C(!w0TBF2z3% zIVylg$AU@&t`AB4+HnoS`vf>bZpkL~@a#UXr7Eu9v%o*3$!^XoYX5?~(U3VezHXJk zsBe6BrUf7FwVM1iDdPI-!I>}i1INk=21hw(QjEDQq3T*WZqp`-hrDaCm=MSRjYv)a z!>+UTu}J}@3G(K9=?%@WRO%B(L1|Nw?~*l$CZmYn?gM{-5fmuh1&`12_{Y5OkyhX0 zJ~agP?r<(bb%>sm7Vp0U+Nc5u*k$dT^kW*4j5t)Hk;0}`++xx5bLnh1by~_oUC zv=462O>_)1_61DRZ02#)F~N;s7A?7{%f*+L<-hRuU+Fe~DHa1&VU%{Ym(=B!MPjN8 zyR?S(-1T^E;KD_%y!gTG!P8#!AE~HNz)GVE_KhvxQwS~exWHG-7&gNAp zy%(bv*VTGQG;WO!iNjN`75w$XRm-ml^~!B=v2(5~vKJJ#^D!E`g)Hx&2ymi(uRbd=_RI z%D=gU**scUNDhfq^yrc9JOP~a>)uX5JF6$Sppl zxk2yi<>ak`>4R&!BleVloB|Kxuy^ZwCbh%QdZ;oy;QI-=9A1;tSDL#JdFExaO7?V2 zIX81Sl?>jN`T?P-h@qP~={=i9Dcd^Xdh zSQBnoprkHk*Ao!yiXG0xHo5kt22nGeJEmQ&Nq)Sn4VRsQwNM`ARgt`S@P9Gs)% zQFS2Jq7`Ev-_wV6lfA5Gom~qaI=)K9wkKulY&O=o=>r936ifWOKT8FER&$)Y)}JJL zv%tQC)|dfSEVFPWy}Xti^mbn{>8sY6=tqqhZ5v;n{?{zq6x=t^Ub!9c z1NAZ|j)`R1W+VD&;?LA@*q{H}V8HaF&2`%8rQEQe+aib0P=lfl5*6k7E zF}f~6{%agmBfknM9h6Bhk#`H>_2nJ|Y4~QR-@Q zh~SS^pJFWl26#Y~U@_rZ?~|n*`Jo5F|17}f9=jjGxypePv?m-WWG5zuUn*7T=L%#f@iL)J6tF2gI1$TJ}>exqU`uNixeN86# zxr(@+!XDZ%ivDKH3iXT|*L(i_At=N6TMM(xO*<-6MzXBJ)IDtoA+VxuL=||`3YI8U z_McIynn{R?m;R-|5*msGk@V-~HuKb6I8`ktrM?njwzcc~OI9U3KQf>b2MLSeQ=_T0 zAGoD&NZC8dI88e__nujQo|!UL{l=azWzV)m`=zbo^19@kAtR8}E%W~QeX$bXzt;Ox z9i0Mng+J_YHAHejZsBbbL_0%c&>&grXtJz?&`^|y<8HKg&ZQSqI_qP1Jw^y4C&ZTI zByC!k+r^1`_gcN?1w*fa@#S{_w;EZ(Q=Cb(X)@`0Ivjxg5!+{|dSg0i(TcuGLZ48z zj77fD6Usi%2V_|({8iI!sClL3h9AJUayCSdVcpadBhu&@C}U<%>oiF_6sYtcCn%H+ zUH5IiajcylOYKZu(h7@HhE-exsJkvVkqU%5=dGqm5|r8A4$i?KXvlVaS#pv4^pV#>NTH6oK zOt+jX7N3-W`)5TlF!oc07WeRxhLg0DSMmWbs{G2ZW)ae8h*HrKVH*vGvOIY^$O2v~ zg!@@~;Zu3(-6sd&P5wPhl4Kg3IPa+4YN?hhHD)*=TnqY;)=NC=b+5@nUAElPs09=3 zEQ6EOjQsy7I?sS4*Z&VY%5fYx&T)i_gi8H#rR5e^IkL2IPHApIX`nc91#0di?t;wK zu&k4%;y`n62$ixj2uCVrDlSSKi2eD$MB<71Te6h|;8-o;82UMjP^6hC*srlhlwegsj^?@d$Z_9Lj*d zZLE^P1n*eVz8G0rDySb?tmY8ByiyO%$}Sc=yQc6ir2mV(&#v)S4~PUx^%q(7mz?ph zE!K+)TV-qO%%{x;uGUb?WJZ`;y;?kxZ+@}OyknVT>6Rso(O!z8?9lMNr`PnoFi1y{ z^@diIjlNBDe}dFJPj8vp?_Fxu3Q`AKOS!uE)W1J=UP+B(s5SknFjmUP?ATGEH={KGtJp zFKPDfpSNs zb2dciy2EVY3yuH@t!yeZX@rDiUDJ{`uIo}8!Z{A@S+N16+iSzE*t z+VEC=me6~R{>7o#06gr1pvPK-eN2lqt=L16EIjWt56P|L{JrIQp>eh0wrm8Z7jI?i zGsi28lPw?CX+ZRsOwMx^tC#lAe7PAABAb-3O@#6e*FNykRMBWFAm_7oZP@b6L=}00 zsmgrd96H#;HEbsVI`Qt{yifkn5f%Jh8*5OfCpP>z_gLoXV%^-|B5jGYxNnQl+7yD5 z3HPPLfE=;Ly1F7=My$*l3~m=Sg(>*rWK;mi+kG!*@qqv2mKpZ)FK$O;U3E)DpkUZ_zqi<=IhHdAJ5?=SXUKEHfD^=>5a&_bP-n`q&; z6)Wltywc@7O<=7aMF=+R0H*`JAlBvZ^PnoGpZw+hh-E3b<`$CN?z8B+Ud||_V%XZS~j^WJ2 zH9zV9^~G-QMtb@m^xIIx^{2@%BPKq&Mg_IHe?a)}^f|Y0LrexaxQo!NURjgNiUM+M z;1np`BBe{m643w$^T7){B$1LR;W%Jl=s;`Saf$EM>|jh~t+v>5RE0=<6%*9>S(@L_ z408s-f7`$&f9V^DsEoCj=dG)g^#rVK(H(nh?C4%Y`$jNA>_|}HycOrJ(?UU`k1shZ zR;W$t_}Dcpn-pvtX5V3OM0YZaDTS+cwJ~2)V;!z~a;2c?TQl57l*Tbz*|p2QmZOP? z^TC=N;cm+!OZ6Hi-&UbOAAwH}oT-_*^lUj<^43je7NdY3i9h_2=&Gv%oBPrA)xyK? zfpOE%Zzg6ZN*+$lTZ8+{n_`G2T4xU?a5>Z{Yv{5pFjM79HIQ{xs!B$L9-=`Ro;Ik1 z&n(4bRYVXt?r;l9Eg{aZw_*39dIT+4HH`N&R=E znOtxGjQ8F1lXy{h?FMIw<+LI17q}7oV3X1(!3Wmpj_YJ;kC9YeE#16}oOux^lYO|^`SoW+t;wGds z)w4p@Dx>E}5`|dT@C0U`5}wiD^7p-KLs z+Q&l1l~6%E=Q%rI8GAD%+{?Y%q>?QqI>FY}S&I%Ft&v!L^{+<=pDQcJdO%N6 zn^78ZJz4DZoL&Q6bEACy`-pUDV<<{fJ%lm6$O340~WpuOO+IOI~$N!A#{|= zLuh`TuKq5z#I*y)I~SBqZVf7&XbZv3Z{F^xhm@snYK9%-0f5cpGHQYv+Aizd{9un0 z%e8TPbPzhD+{0BTP9}@L@kM6uXc@Sl=C5*8hxtCQ^Zp#lOllsN@4n2HQDz`^Q;j`~ zG@8qLZ(cx{oZRdAB6A_If-?oN7!12Q{F*ec6gI7XxK|HjSiD==6QtL=xP(&esRE?Z z_GlY=Km6;gTu>MXLsmK)Ju}2hoGu9x(ad3AlRI^Wxdqf{%s;<4&mh@)jc+k;mK0-I z3VqklYnKKt8c8MgTuOPVe2?_zTTtVRo?*cL>CGY8rpjppCGmx|qEdoUC$cuWxIm|0zaNQzPeBs5Q222Bg*s{fAx^Ts(4L&( zy)-j*>VrRYZ@8rbpwCe&&(97`&pFElsiIoi41qV7p*~jP(ww7EGro$4qsW{xvk%sb z&k^yMp`VNAo)38CQ>E3WCD&N@dHeHYXHRe4?LuS-zpFi%ShB0TWr$JK zt!S)d^r4YFTZ)HU%hAef&orqT)T5J6G(jdupknMv)%JJ2hX(68&cR5W&f!OHksT)9 z-G|d!1`7*Q?cA-hwDTKP|5S;j@}6EVGdw4uQ1?m1`%px_YW`HS%J9mp{Vv=rCMY6^ zPzK7Gnuxy%PSM|Ll#;$g+X}^KY6rsm8$hGkDTVe)#9E5}Ppes(?ORZ%g9Y%hA-iDT zCNSXeq_62WC=Kb|MrHkXQLCr@-sPDzY!7~gCLqCy&;S`ud!qT>1ciys2CCLHwS>Si z5<3+YO)?5sIn=FI3vgS0k2zjub&vfH6Q!aBdrW_u{7UiA39Ca}P-|dsVNLywdygJ& zqN4(s-wrYtr-3`hI(mxPv_mq$SBJB;FFHGX4duF!i;E}IX616!DVZim%=CRO z+Lo+qT9ZH4!^rZafS?4skSfA~qGal!C{2@|h3-byN=e`M^C=W(7-LjF&R}mRS)p=F zsCSd`f(&%5V^0X6Dnso)w(aX#70+_E&L&NO_x4&8I+?7Czcj{oubv!+vpf zDIC>|jOv`tYE3rp0)sys|AWAom-HIvt9iO;(K>)9DlpcZVwTsP8B?>Stu z1Bb%}j)H#A)H)Kf*k}Ie@YM;~EJMeS6LUXYRv~|UMQ2y4I)s(uymf_$eu=|b0be22 z+St}K_;^f~cBMxou)bTr^RME{H=!5a1wN>B^@H{H6OEOGvh&JYNVLyD5x*K@13d0B|aH8v@ zq+!*UKbridzk0y_;%=uee9BsYd-%OfjK{k^Ca67*DHf#_@Dacf7;W8bPhzdHhK8%% zZ|`m-sc%P#^+iguP4n)$a3=CipO<*n&mP2Pb6FUUxr zH)-$#n_9P8xTM&9^Ui5?p3J{z-YS%o-1Yd;;jWw?!YkBJnei#9x3{jJJ?5&3+7&TH z&K9#pGgzUu)*G`#WS|L!4a(%My#5Mgy*Zg_AMk8TXf+V+!{vk)uA1E^sn4W#7MO`# z*HQ{h?S47BICR@`TZ^qz6te!#y}RJjcVMZJHYGZ6&HLEFB>Be!Fs@6!l_8)`Hk79( z&M>)AJ(fo7lIc5GAHJl?m-?JQ)|(5Qq8WqVBI2kCo^-yGVgG}%&+2!~iJhDT_c1Po$dl9?Rh5eGIz6j0_ z`25^26X-+HlQPgOw_#c>xY*c;?eq+j!bk(UU%n4$HJB&+rrHwa6=cEw4u$;Y#Qk{E2_oleRsEE= zChz0gvCwxTJ`S5fT$35M%Su5Q5EDZW^zBn`2U{(C zqzdwQX8)|jEzdmB;Pp8L+fZXS__7!g^EXc0oAWWGpA3N^N}smezx=m06@xeYtzok; zy~K7EF%u11M&V|xjj1U~mZ9NE7_7Z}^nLnjWm!{U!ymxD?~f3`y-ZU6R5?-}M(DXV*CPxlsUTC@HV-Jdnqx=d%FksbNk`DNUlazQ}@NSbJ%xiwP8x0zMzZ4Ves)m+b4+|X~o4vy`WO{E%=%UVnmsd z@WdqvKHf*~Ou;kv@%-Gbfw)-`mg+yWcQ&uC7#TL<6`g(NE6y<|mSyNG-Dc~qa#N#f zm5w{?*=C{{l)7=@&{N`P(x{)`y}iCM^I1Fv8>j-8?atV>zk?*WW1UsXX@-cZRuI9P zMUe%(oLsG4Se7fG_(fd^cD#9Lpx^b(+Zh;jIPSR;T8r@t@|31UoWz;(@HePmNZ%E1 zO>y@f1wPLer7{PRoWJ+n0nmV#%XirMd&TRub{EzQW1Jl1#m=@IGR?l;^5=lC#5xvh zv}TWWh>pTmS;|lMFhH+dSsyQGYJ*|V|Y8R13>=H@Dj&%|(tFe8EJ{0ic z5(|{?suaXZYM94XOp>%YGDl55V`=+W+rp}j9FGGVOJyE4|KrCny~i_2RG+#?csJZ` zM?=7rZJN7t$Hga{EaNGB_l~^1dR{+stV_+iVc~`8snNSg+UnE`n#rxNrn2{Xvi?c; z8ZHL4^1VP;FH^U1WnB1LpfyQ~J6QM9IQdn(fL?N=yj`ay$mUqB43T>cPAthYlQ?2F9c{%l_8#*oiczs{FED7Fi{v|BW1QnY-@2Wnd{c4QjR zQwmt6Yx4=18CD!a1!&pPw4c#3*0XMa&0)Y^@863hSkh&A}y@Wur z@O@LCZ_Zlr zv?r+mpM-XK{UG*5P1chmw@;MaE)xQ1 z#{k3bS_?*A`=rW%q{LVL1D(NPli}sD5v2_m57hQ2)9>CVh@|-#f{A!~@+Bu>SG%-P zmBd>9qDukf@fQ7gfY(hnW}7BpzV@HvKDQNr&D=?dP>)}2;cn2*>0AG`^I=NpgeT3z zRU0!pi^Xm8lTIF7_xw3;U!swv;vf>bNaQIc>m#DnC@7hQ2d?fjX~;3BcFQC$x04)) z7ds6RW~yqU29foV;$;A8-|eV6Qao=nnCRhQIBtnsVI_H;t;KEcrE?c4>Ol3+86cKf z*f!W0SNK_WV@aeEUm^mENP@FIBFla0SB|+$HtcR}Gdi+6H~3&8uMtnOfow7{bZ9Tboo94H~vxOTh_8j|88i@uT~Zl26~x76=a-A28V>P z$))hgCU&kDs}7x{|JDQM^cvCi+Nuq(BB6v?7RfpAH{uiLdhDtWXiO73odP5N)88UA zA^7X6?R9Tjv2$}xMI+Y4|G`W<(>yv42TX3aCLj%a=>^yw@g%zzPEz_$+HeSGo}sM& z=g#B_1Jc3Sw+jo*hosOz?`;Tt%M|O)#kP0~F^o0A#!DIWZs50*OHww(YSW_6hILPD zqK0%iZwpi{AOpLEq$K~VafRC;$)Msm;{C0HXm`pxZ?hFWwRP@UEnx-hVXtQX29Gh- z4mVh*!ur@k!?6U921hX|pA-(X!Cg}&9`+`IlZ?060wu1N`sT+V(Od`(4chO~2x?#_ z)c3og5-4Tan*DIY2|I@yDL(a{NM6bV(;vi)<}5Oyaj>JYEWzLP5AUgLjjSA=IVj!# zw}{=fvI5>PFZq`{Pj7}2bsa5i4L&yqR@FnaMZ!CoifvC)WvAU5#)!*i()yeva6*F0 zfpT)&L2n|fUu=VRpj+%z-jam`#SN{H7HuaKj91QD{*z5rB>TD7vZ2X;9(6_-U4g7s+fZ3o~@9~_AD1rJ{ zqmv9@z6!aT&?W?kIsf%)4SG4YyJ2mZvzcbCVbmW|vbxi;M)(RYa0ih}_}(#ru23^k z_If076#m@4a%zbv+;WKC5K~lzPbG?+l&pUO2;t~TsNojh^tDb$UlkJGd2jh8wpHUn z4Iv+@)@D{$3sO*okQI{!qFLXO$TIN%Jf>AQT#eZu*FhmUJ3&584)OP}4o-PHUQ5## zBpB^-JIMiZII{^klGb1deZvIQ7Dk?}(w;#>yru|~tYsc=wJn6@39OPUwIrlc`U>S0 z{QakPKfZER@Z?znk`f8>DsqO`&FB|Z@S?@tvfbWPXOwbvhd6nqX+@oXbOpRX39;N5 zvI>~y1-$wTPt;xN*3@Q<(6iNk)Ms-d_5ND^HcOegl4vr_UD}e2clIu+(spU7dg;$5 zKbGRkI|ne~3O)3|-Ik$xLGKnaBJ&pg!rJs5dyL5)hh>i5a9Z+>ex?Auf|L7#Z>hDL z+A;Q~z@8^84(oe@VRIprov6k|+@HAt?ZWvPcpLD_XnBa?<*Kl zogu&cdp8T+(3F9b;om6Guq=7U85S7v>PEe!#k@`+sXRFvpBKE;fcZLhS*86XT^>=Oo>OM7ue=_ri&nI zDEk!_A#FC7Wg*cCAe6m$||74JcLAn5}fsdyM`Yo7y^c9Pl#*NLiq1imP z{*nw=l8wtzzKjEGqt`*rg4eKl;d<(REik}w4i>lbfGq}Wv0KGemlxVum@!j!>$$yV zegTxeu_a5`J<>0`D^I-YL-;wb+pz>euD0HZtiltaMq5@``*nDC+GesEJA9~iJ;<)5 zk`}wVweeIWEnNFy(-}+K9Y;E?CE#b+$U&ER2oCmUKRT$)AhYFlQ#RZbltK>XAE}Sp zJ8P<=6X|n%up+BAa@pqZReG#0-&at>t+BgZT#a=?{z%PItnzx7*!|b>Zl3$D+3<2x%sz^eDQH~YGdyD?yr$ZJBD@>XP4Md1&TkG?}UJ(#UXJ+4I9GJrA?L1aJHbQoh=>;4DM0 z^qmhAG7_EI;mISgYE2G&sXSHnPAxC zX4|5Qv;??5``&7IVQrN4@zt7!od+2UZ+0P^-Dv7tj>2mF9drE%MmbV`2FiLYXt zjrnv-aw^J|?i|jA9U-4C+QHXMqn`}TM)`Z~{TT_E`keQ!yeSO*{I>t_43;hH#C<-! zzw(3Tpyn~{`5+ml@LR;*z6vTXl3%85EmE^1g(;6!NEzej1@Z5cucdbJ9-(ND%+ zV!b|wuNePw_!rRrN0G9AkmXZNsT~hjLjz$sT;UMdgeN+Fct{*%^qEtwN_aNe;qiSy zf>=>`-t8K7raM&zqfr7!&K?yiRD1VI$bAA+zRUaJ6;LxRuc0iO2irLmXmW%j*^X=9 zK)!=)<3?$<2Ss~+4agtpRXe9-pEZ_edjXl(#P5F13#*$npES=am`TB*e!jviWGpZb z{K|E-@i#HJmPI=!-Y-xMHRpSc%AZT!#EKsmOgy?K zQfZD>r)?6`JvQ^(l^1*BSk68uP+*DnPN?@rx`L6k;!MzmEF+TEWO?+nv~f?0K*fC1 zIw>K-NaB-G%d6L^eG=_~CedN@Ef$qIXWjGf{LO8zE+rTjW|~Xj26I05QHwJRwj#U~ zcEsdS*`F%0{&)Qjz zzMLC za3(z!J;q87(#>yy+Xg&sEq{0W5T~GJpD}rWUfv&0fZ21$ZpKi+R87Ncu2AGhzSKc@ zzJG)q`4<^qF=;gJ4Oc^c&MGwTRx2o=!p@Qe{*PJ7=%5=D7s|&}CbKOj)b_&8AgpsZ zO?8G(l_krIJ{P4WVW=l5Dz%Lm81Kf59^Xp&o{e`--KulfWB|mr<&e&u*Xr1dv0Bkw zTkxbs!``2u&&(&utDdnf z)}doR+HXWuRhylZ4C!C&R*#~m?D&jL+y6L={r?qmwYpVK8AUL)owD0v5q@QBP8Lrg43?n&cD^QU3iZlJ(cs^_!SdQ|x!@MjF zKe%W|c;>|@R18UgCn%yjTkLwmFf%3e)YbjzkPG|@oUG8ERkyLNrLVQWJC!vfM3b56_CJbzkA0XY7TwCAho|KfN2x^wOfqm>ZIZ_;VvVL7JX63IBF;LP}>rlCNLACf7l3DWQ%EIX(QyZXB zyQ&(pJ~?6^XNHmV_`1IXO2^+TP^_B%oAYJuS6Kmgc9pzT!pVx%O?2l0*EGfxF8QjT z1Z1mSAn>p(;dE-|pQ^^;;x+o!K7^7ya)y?Zv9qdS(MEIvq{ z3Yx>TCfyQkVOwJNc@Cx}U#FcX5uDDn$A3f{6sEFNR6UJ8Am9mX3)ju;QnGOU{eZNc z;!3LC^~o!$ElF%&ha=d~Lojmj_b8_c2pruG$bPp`mrB`(8hs1SM?wBJpt^<(vV-bp z|8x|q(3aKP@RlceQp8J@W{-ZOh^T`1C67*?{CkPx^jqWHD6!F*aTHdG2Q`dp=M0bR?E8qTA?z{9#cz5m3{IPYs32!=VS zs@0(hQhYUgy?hvbK$!`;_ET!Jxp9J%d`ZRkLk=^`D+wg_IXB|2%k0$9r=5N+k7n|> z??Wgd`y}hz6#xNm<`cRMwin_f0X}f;F^A6wwRm8oZcT46&!Ny;nTkt3Jzj11Inf(f0e1V%ljo| zSu16y|3~wz?4!4JG<9<)++(bGr(7)$|Cm&xZi_E3 zq&n$kLM9MO2KghSsS8zLfO`znO+CKKOZ}5};CEHk(@<*$s_LO>$lEm5A!s@hZ%qZY zJ9@tK$!zH&LIS-2FMfsS^OMK!MXxDsr0**RjZc=AXANjiHF(*CyiwOFV-OVF>Pt)u zb2uGrQ;O#ctsy_sJ_NBFgjJk9hN`+i!fSG%ZbP+ST+hOMVSvUU*!*61dkndypFpY` zsNX-nAkghBo!PK!UQOlf1{ttmW=hm;#Z^2T5Qy#P+DV-%4es*4|3VymvzVk6(5mHT zc{>3OHj#twoSf|P*V}6-xE%KBcs^(=M3V87nRDJj`$*t#kt-eV+|uIPTvrOyUe03z znwlwy+Z?p=uk$Vc3!(^~Ya+3(lXwr6c}HKi=hf==BM-1;3)_W%PJkrnJ~vsPj<}Bb zB%QG43koQM=<4eN$cX{*S4ZF8ji!GycO0{{X`dp^&>QuUJRRzzATT~e5TgQGWsVO3GWmZ*%JdbqkY10N% z^4A%Z=Ni3G;RD;er0UfS~?FFCeW#VIuNNsO?T+ zy(Clv>Ic2{pbQp5vN4#qu5~<(9D;44wSbROHYht~&=wW_f;S=6M?%l%t19hT7>>MI zCA+Kq{pn3hVE+yNSKAUTZCMIx%kFiZJG>#U07X)V83kv4M4NzFb>8jM?PH)u~Rx%hTw6k1edQgXo+!lqUjHb_`X-EKqS|tP0UHf8oNyml-D@c8aoGfUh8*UUvo#NUbTBWJ>sx4l% z3iVN6Uhk9VMyo}T%3Gp%`%aTt2?X1aYag&n?1B&%8-xCO4MbXT)cx6ek7C zfL)jOUo4rAb&t{4awm>MPGEb5TcpTWs>OF1vD5`w#f&-T_`)TsJ3Dv-Fi|+e{YM?g(2%Jcen0Otg61T&2)d;! zL*5LQ6?d}CPFsj>q>q4~J97Ca8R(W>=+}hWr($t3qYsl7dUQwJ%}KVpo&>bdh8J=_ zYg@)k&^HNzdDnaAb#kq_{S#D+CTx?zcfTw#+Up&Mk#Jk`vS-`Nj3IYsKdT*SWF5|@ zsR`BeDJO>-!K$U`;XC zF*8lgU9@hZqn3{HFOS!RibwJF3(9zZ1VCHAMuNF^cMHD#G#1f3 zm!v1wL4G&Gd7K-rnE={K{=Tv$mPXz3YvxIw?3%OW_^{m9Oeq4VvRm9A2+1~ZykkoO z`{BiF#qE+{`J1TnT~ z@ua!`@RW7y1*xO6RE-rB;zXU!&=H-(Rqc^e4O?>T1)eBt*nqCxm9wJTX((X&GE>Wq zo&cwsD^k@~m~r!sQgFi^U)^}Rr4Ww#O_FtTfw6&Cb6y+PM8OLsA#aNFd+jL>oU~W) zYJ1L7QB8VksiwIOFoF$e6$43nQ{9^@R^^pENb=rT-G%ugez%(wjq^}IrKo!r8)=)8 z5GtN>`}kf12(Bzb%e>V|!gAz(598XEgF1uJU-!pT7~oGuFQzZYYhUsf3!G8@p%njs zjyU;%9bf(qWRtpJDGmAhTV!-i@qplw=BjAdZV45Tc@1UXGyW z(_?OG7Ro1O+46*%!eJp+T_H{>#^_~YiV!zH)I0QJwUj2_vMz-*>Bn0UE8U_#NN|%C zYk=GaE5BU>4nQ5ts43~bL{Cs*+tndq>$QcR8kyVaYBBX4_eu#xd@@8g3p#?DSzs}{ zYT(1#vK4&?Bhyp-44bg>iol(o&9HBB^R@Dx%#8&1kjc;$#8_TBM>1SfXRX$}TYAv0 zK8b;ocP@q+NP2CY$AAka;WU3QWt)sL=}n2v{0knO6m^2j9KsaNXUNY;cRa>s*9wZ3 z+mEFd1aF>M)2!M+i+`g9t6!Z&6Bz z4v)5R&NYlj`24|_TW-0j{$ph11@ZIk-%lj`0`uX}rp#X%Byo z7{ii@L-eaQ#ic~Qz55B#bGJVgV~L|p-{~JhvgCV&jebX$nlPXEx}esmZ@od)qK9R- zh(4$-2O+<2jc36*U9PL=P&xWXBThvMGaWAtW3@HP{0~xf?NcCaFsN&x#wC0+Jt=|q z+_(zuSH9+P;cdQ{J;%i2oLAtwS^w+KR@9+eOB2_FPOL~pvyNjAUK`gw6Z_WebNOlM^HJgGK z<$jXMZ+PM)1}yXP+EXnae@-hYHWU=q!w@g*&|~g=ea+?s75^MvI+cmMxtp_m=~qd5 zR?$+Jc{pOxwu+?mY%l*PQ3ZfPhN^HaDzzN<>f>NX4;b=~akGA|hwIug=e`&ePH2w_qC== z__k7+m|MAv^$=4cd^dF9hEx0Q@f+_%3XA6l+Ef2Xtw`wd`luP!FrgEr%iI=S-FiJk z$lZefV#FBuN0KTMN~lu>VpH-|*;ByUH5 zHokjnQaR1CK`?Z z0ZbCxf(u9h5dNZ}@(xP*$JdU0VC7$R6}7;&0g*b&U996?oD)~y7Bkx z35l+;U8RXIoqa~tt)Wc&Q_q|HGxi?wzH)VL7Bh0=uk-Hwi`8N(&e$2RA(om>xmg_Ir>?=6y(R3{_;Py1PQF#3d_oeerXzhp?*z1OHsjuz z^_DRyD6tg6fEsAshH|A3^HqvP8Ro^Mr;8_CFtmcf)VMX#y3ec~rwU(-;g^7Rdb7x9 zPE9~mmQRE0<(rfFMurJAKzqPVPcPH|$VoC*C}C_m0!JainHB9Z9zUQt~Ru*2M-;5)#)IH)*cyGWyK~%E<6lL z&DAt|;_$2!G_G*E>40`E3}}=+^ix?g&Uk^0x2)7i{3bWAP$4x^3p$7zILRN!eY#K|Nn7X;+ zq;7U``~v0x#R3x4(R0`#MPuSXBSFO`LFP2REdIX2)Df=pQ=1Fr+DY(%xP@qDg!Dk-!IXli+am4VC<7 zJ4g-CmSmqy-@uuw=)On)nEwd*Bf7l(IS#dy%G?{I?-_QcH?c=lUzyXME-ZHqX1O-# zAI{&%Pk?hInJZ>uy`nrmo}Xe%_N$1+C)_mS>3W>SFj69$=eG`%wR&uUmw=5~+LsDv zkM#$4U-Wo<^~6&>O&g-73~d%0(;XkPW~EQk=W9DI$BfVpne<5SI15?Px4U}Nxak*KG}pc&NTy!<;rzQvk{ zzi+F*c0G>Zt73O)T6Yu-+drgOR#E^;`wmIDV%@%Cg20h}$#p%JP8EggwW!{`G*v=U zeVtl&anm~E>DXOw&01TP8~F;zXY*9AH&w6a5)MkkzyR0(SY50#9S>IE^%_OP*NthC zw5%R)np?Oa;OhT>tZ{GKF^lw{693ue03KCUjzSnkxh~#cZRy*%1&*}w!D0DPd_qe|omin5&y4lWWv=lT=b@*>Gw2 zx5&G%OO}h<>j%)aQjsr@Uvyvj87g$!cM+K|9|hZ;~HfB7AemQ`RKK;;)k+O z{#8=iGUhu1hK+Y^Ok4LvjU)FN?EotE;)D=7Mc)tB3yX^?0#RIA@ zF1G{hl#Z+JazOc|XiZ|IV`&}gIYo)*s_`>`aL3GqL_4FL3k6hR4!L|vZ*F%IK9F4g_#L_BPmWF2}asc_jDGlf^o zuwCV8Ct2MVjXHb^@eyM`B>5^!<)@5vfs7&IDNw#lx-D{_xlELt>TxMfzHRRByxG_n z@?RMwv%h`gfe*~QV|ao6{5I7?x_JvxaWbBBCkdP)PtOrA3l!J;3D!XOa2`A1wYMRj zMix`n#kTcat{*Qdso}Ji^R+Jr&$;mVgD2Ui*WyOdEq7R)gY#d0WgQ%ouoEzh_9^RS zRr}8H9kNyW5JW>F7QQU}?WX;=o(RPY*eQviMILSmh=zgjCfK29%h~_Is$O{TKR~Nn zncuUPh7WQjV8Xji)!v0K!s;sPrg*3(xSjZEP?!|?FEeM@w?Of|I^DhJn4I`YTVC)# z;{F1&%IqyWeT}6pU|`X25vVt9!yD3PNn~Vs+|hlzE3NcrWOm@a$nbo{otmAo9HD5C zakyP6lC5Z473Gb$3$`>cP-BW(#}@=*hkdmhM88lS{&klj{!4}GOjt1l>Z;MK=NOA}Wf-22J$<$Ha=xLgfd9-!FfAIdgf56pPl?e65`EKmAh)F+OO5?$L+ zWv!3+?bHREHlt5E!`+3azBx|`GREc-b zSfgP4Ii59)pc^2At|y*Lv~T&*M-ggPfmuG+ zy)=dTh$XG$(8yv(j{`H>uC_Y$;nu7$M8tz+(L}xQR-A{h`M5oWP&>MyaDCrSuru_c zkGYK&n+|&WTVyv_%@pt&_N;r&PMAQRP2RLa+3ioJen<>06Rtp$yEYTQMP8QH?kkjB zyIcR`;fLbky5&{1k0=~_cf;bQa%MCQH=GF90E)iOsMpN<88Vf9{!~g7{dIr)?Mwgm zG6xEY?w&FlIS0>N?uBke+!nv_tDUp5!PaS*$uQ_F=b{%f#SnJe>M%e;e3Hk~nJ+!s z76Je0r*e3)K#RsH1h@Alrz$x@!r6OJZvX3fS@%;z-j*(CtLm6w-@!ahLf}^ZNy6Q$ z;@u*PmG2;%a`}D7&kWjnL8u-T;i+>U$?2=v;|_&*ucyh~hj6teTz_3re&fxBLYidA zjn-hsAntKm>O-?5Y_k9tX{|-}pc!m8}qc!5Td}%zvf+<;Bvwt1t z{@gR&1*!dw03HHYR$ku0{I5nHcOm3-r)S<>8r#}+&g;YdL6T#e3O-SP}<<|qA}0ezs0t9ZSPzFa7_ zq}SFBlB}dfNX{PilK8403W~(F3g@9l+ON9-&=rS`DXe2?(v8&xeOO(u4c9^OSY)N7 zSMxz1gc_Ax^g+0Zj@lS3)~TP|O&yKoJ@xrBm6bPkyBjh6b1G+GZ24qjZ4^krq4Uoq|Kd8$WB+N_ zOMVe;4fB(a{rA9G@T=)dV)C80faZ*YZeGBL%;f&0%zz!CvrP9JXb%s6ELnxiD@@VU zdY37F5coqqi_iZpqKuiB6Cg7BDVC4Nm77Q+S^FTNhXhgyuyR_NLGLn(yKJeMTd5z5 z9t2~13s>p8J3VF|cIqLiEsxo1IJQNS+_NUuJA;hUpvo(BGYPlD4*t*qwnpx@I7%=H2m8RtocX&M6 z?J02C^>51Eg?e1^gd~~4yFS-XN2~mtwKMRLcA{KBf(N0d1}lUgk3$Lf&0pSjNN(;l z5}KlCD3M_d$MwYI&#OI>o5e4;&`oCV^w#G2dj9uj4))592qd2fja@Qys(~D%`C|Vr zTsh~(h8;WINQ({c;hCTKxmDN@vyDB1A1>|`$%`{w=p8wg+M8nc?cXK|Wu2L2@U^_X z@Walwin&@2OHj#n(Q>ALBB_h+bvbNJ4#Wd5yRqC9KI!}L@lt^?+&UOA0uVW*n z;U91rAgS*Sdt$|Uu2_MvI!BVpT8=pIKwyeZQ6(i%Kce!OioX(H+k8$V!FnN80;74m z_AqD2(AxD2F!sn~e~P?AJlMpN_3|U*r1x&J`cJ}kgA$81andW&f5>!t9V% zIU^e27Q`tWVlK4w3+&}~-T)7|^6^tTfQ9$>twARZNHODou{LGrA+j6*LZtaEWkoVU z(=WcL8cKdhZ#yzEY570;lQS{q*Hb%s>E0j_EfdK#AKlx?aL*vH$%v&APCrTa{{YuO zD8Dkmu@>2RdD#{JuL>xY|4L%XMnPznD#B7>BBR|0`WU6bX4`reHA>!nmV>i?rBbVW8 z@7Ob2ayTnFAPztjHv5;egY1age-;b$vqXVm0^O8*VHFzx0IBmEOL;6`@~kv2xdHam z52(?w^Z9HClWi0ba#8(82UhSU;UqXqqld-}ZKTHaK3f4qlib1>7Ci}kNf?~y>>kT| z5P4=FxhdPY$8>pl>ak0fB%lQ(1D$$yK5w}Q{98xpkg9P@)VpgSZJNBhQyZ?MCoZxEkYpCjnXUYlf_I^ss_?e}CY zA#|N1<T8iNp^CPS1lcRIfUa0I)U*me1TlMWK`v)kURGxXo4^>kZgl* zyk11GWShN)-pdi-vIE2(Q+2!bY!cK!`5%j)Z2guWE*{TYW9@*lci~uHyD7*w+dpSd zwuTlqz-%kzpmSvT4T0J45H6$~NgZtlm#-{yv-x7>aO>FPumVgrjEJfL(xUH1>VcF(q)F4EwJ|gaw~V2t*+I+^|1k zooqH6PcEMPH)FPU=b;1blj;y`q*%R!2w!1~!T4}p_TSVvY^5GX5E}#a7J6j$D01T; zb{!)Gjrz#K%kXP3>+R$g;rkiI;TDI~*R$7TUf3A~KcC%*Ni*cEXO<2}{?ei3vTP>m z5!eUf0LclPH)C3f-R5QWKXCY72%6cmPT2Tl@eOElIV&@Mq)_Y-->7(bePe4Jk<3E} zvXfkrj((DkT3v*RzOSj;_}gfVyA$-ebraxx{#x9QG4jD4-6Pq(VZeZWTstFj(`R72 zC^kL=lUq3lTkoN^gKU(YHJysjLiS_SW470=l57hWG)}_aLcFkWV{pP~TiF)vw14>) zOn_?N)*=orYbEUde$S^zrJ<7xCKIO}lHn~x!>y)E1+O1rv+|!6RIQIE znmw_;U=A{P*f@J~c(-*r{{SG5TRZhB!x`*%p*PbnzyduR z>`EB1LqfwFlc@HcS7CGSqHcfMv)%9xd@-Mr8 zen<330P%sJboqk+dIX$*jo>+zXcsl5Ci_&&U(l5&K#Cb&j9{A2XBd)a#LW zS{SxS3p`yKzTSD>?1CB-J^r#9)*MI%wW2`n&55$#h12q2t zg|&gD<>;O>QZs%m8TV{jsyw_@!c}GrBo?v^z+Js3VmlPP&5Y##09>`iQO$taXHPB- zTdon{xgff7U3h28yBN^RZe`Q?0|YrH2;QM72BM-j@o!()gElWuWSk;CHdM) z38Nmj>LTID>G6{dkIaW;TCk62DfG_zkOtj0R0&HP4<23Il@Z+~@wH}6?~}iF>SJ?0 z>==YaBlKR7v0!^HsW@=87H}d?e(l?^y;zQH558HGESrAIR|ydJGo#3Hs09#odnm!n z0bNtreS336i&HOc`nB>^yU7Ue%I(Q}w|tTPwE1i95dL7+UUo#WNKl@(LiTvl(l5GA zrhwq)d$11;{fT?`0P`UzSsnVc1#Efh!&fN@ThwUedUjK=H~DqhYOIYjqzD}9aY{LC z_0X_0XEY4y?ENI8_ck6a9LeDVVNc4~8R{N=vp9yC zgV-sLuzHXaunJ`49R@pi@!SPRF;aLHreF8y-$lFj)La(72EFxpNc`33Zv z%zasOLA&)fA!vufY~(fB*=&U``BH)o#+mf{pT|b)zxuG^BV{q4XjX3n{{T_A2s`n= zhr?S-{lT_<%1bY7=Of4`CS0|$KeqkJZJB@J1{YGZiwx|z$qeYgmU^9(D9_7=y|(EC z5^i8PN*}8)m$7|^CyO0B(TT&1@5u8uKh%)pfwO{)FC_r=Z|2|U~GS{S*>ym(%JEt{m@MD-Z@8yg$2f^rsbOQ>=Z z&0XqzOK0+R(tf@G!|v3>muCmwOrNs9iyN#PnaN@-1@?Og1++J7hGE04i&p;tB90MU znKCWgNMBI%w+Q;Icvxj9$X|tF!Dh1;8-5t@nh`k%cLK; zezHwFu*}L5N-?_$A=yDo$h2Zh&OmY2UO#uSd1&G7vD~#0VnN{p?E;B0{eh*k2M8y> zRs*mNNjpp?3Ltd!w)=)*V427o!3cg?Tp%Za`5kB93FhYi0Mu5ZGY>!h%W=rKUSsMaA~ND^ zM<#5FnBe`bY4vwrMbLH_N0c@R&-%MF{{ZCIYwMp^9DsA`(gsn4I(^;v{{UGxA>3@3 zJR_a^D9ttpl6Eb`4iTZ~&(Z$uoqG#w*iU8=?v@=vv>(V5cOZ06(Q&%&@-PL7G7J{o z+<>uRv+_^7zi=~=9L`u}=avRY{e_tvWO=YBviFxfEZ1L#GxnUxC)5Y(Y_nwFEz%R@ zrLB!gQsyS^ShT3xpRI*h-88pC+IjVL7%zzBv!eMGG34BDmbwX##?kC!m#6s)N3q<= z(a&Q408l%r;Rl)HgubJ^BSbkNyW5Iec?qv>CUyajx6rlEa!e8U`)#`l;r1S{Zi|4E z>L#o_`;&&-74^U+0iU<-6Pin4qQ#(eCvXDS!;t#Ch+0P^C zFJ%2+hDdTog9*qVaAk~sr3Wo7pOdd|!pGc`m*5b3Vfyd>Aq|DohqLg09ryPj#Dv!) zi4GLy%jD9c%tf=L`huEr!Sj;5L=yxEea3kotO6B_qhO%yw|2t>$Z4#iu$&kJ7yx&$ zRnsKjqgM(q@9G$$7 z_#oi|>^6T^MDE|&K!qH-dm_gqxAquj?02%fZhhIV!0r)`WPMoNipDHk62omaxo_lW z+=1oKs3{NjKGxG+=acB-G~&=(S+s-Sg2HiO$L$t_$;L4m3y!mJ;I{s$l%(~fp*4dws-nIcBgWxn| zXWY3c_WdmwBt2k0z8!Kvdp|-Qv$3x(I|Oy*ziV4)(Y@|xnfP2A6#GD**ReSVhdvboo zi|hi`AZ&NHV_#+OELh&N0`mKgLi5Z$qB?9Ee%Z8~IpwH!WBw%#mbl%7#ItKpjo_R( zz1quH9lpTUWxD{=p9cevCtQ)rdW-k%lfJ?LNgA>W?A+EnXvx@4TDbD>f+Js1jSnxw zbTVVZ^=E<@zKpPYJE#T?olAO3n>|zwoM3tEA(y^(Zix@hS=!!Sy;&j292167ur@97 z!Zh;hky$-t&n*d~*OD(UvmN7S+X6cZ5IJhag}T^Zt0xKS9qbz*I~(_X%*+x*!;#Qn zQ#5Dn#B~MX>}9`vgpcRP1max@6mW?Zf5eTCw3G*DKKp$w=$NCe=p2a8n!k1s}$yRqZ*A2^noMQ{p6QFzmCT6UUE+?Fy zNDr5Or%U^Lp}ZSJ#wSnrI7uukp}vTm$~+%9|s$2*LX>~8aC|dY6~YwFT5doyKy)qD4$f&D`z+DX71!{&MDpfw*LU_88qBs-k!e6(K~44 zCk@NX>@S>=0hQmRgm}w3_IXbjyJ9f?StFto`yx0`?f%OY>qve+BB5CO_}jPkSodwm zCB_W$H`a7A6ytwv`-26mrM%Yh1HG|>n?FJW!s6Lx@+;&8-mmSp{3mA3oD=rE?bRYc z?M@r7KQ1rsF@=C2g*=Px*9yVxoJf2iz?LUcKz^;amkS0Y*eRGK=VE)7PM%#NJO2Rt z8Lwc@_7aj9z~xZ z`GfapWrnV#%>A9Zu%X_=tjG-!{IGkr)6{Sa9m}oygfMNGZrn?qu*$GsV_>|OWPG?a zfH<|yw1wn7xWTx2F5R_&Fjp?v#C@NJU;o4aC=dYw00II60s;d80RaI40RRCJ03k6! zQDJd`k)g4{@X_J%5FjxB+5iXv0RRC%5PB;dJF4+;Xywh5#!^Hs6lj+<4O@V-{NP9a z;vN#=zl;#mnzgSO*Q}wwK5@i1xjbM7Cgx8~9JH?70fZp4SSv-l#Xu{>!038wFttNp zqai?U4H|h#W*SW$`pr0bCRmk#c*Y#7h&KJ#2z1|Aj4h;)`J8>?LV3#l13!5Aa7g0$ z5PruN2pSD0aLfQ4I=GbIi+}-Rj5?wmWotoquCtO=+q_f`I+q4foJis&FP12jsX1}T z2~L@p_kb(L4b3X{@L-~ZdoiwnT`?>yto&hFb;^|Q=R_+ z8L77=*Yk=-7%l?4yTU83t{v8FLt>ZPtOv~x#7<;fAHscTe++>1fM1rsiH<10;beY* z!MrFCeHa3Bf||?itOa~z)R>d!5H=daZk&V9&H|cW=O=b+H^iB351w3d^1$QH9k%2< zagzMH_`nqZ063aFWPAF^S=K=Fm3A4qbmTQa#ErM(A~6RIUEEbBH45u2Y@az&1jKLw zl*)Z%MJVeVz~4BAsQAi3FO~w7xD+~a^OaK_z%fJvqx;7KIu59Q{{V4~qn;6u<$kdi zQU3spKRD0>c4xw)^_D|DBKmvk;_VI=Ry4!^T zXOk>le_5{8`OOVl=KDeA(Uy>p^{ynFW{>c>6cJuFKGJ^iKE=uY9sOlw_|*P6C-WAQ z>-)1tlg*dzKa4Kmw=+fQ{7zkbLVgVWV47(k>}**Z96JxzXoc_q{AJNxVo!NAI`HDE zH|>O`vvv+DuI4dK5APHY@y115q+~ygyPVbG!5lvF{{R?;*ZszjcisrsePe6(XnM^k zGs}ZGPdGLw7?tY~p@NS0oQALKEM6=y=r?e*vSoF=Q+D{AVup?~FoL-fkQ% zpLsN#cZHDFF!k>dbUfz)*!SKMqOW;fS-eq7n9taS7XpKtpCL zH-@*3LcG2*t-M1L(Qn>eUL2h}J>^dWm~obkFBv9*K1qVb?Y{8f2og+EL=LlPqfvMH z4dr-VTKSLqVkl$TpBU5ka7YKhnc$~5V`QJaI~}jQcSLa=JQ(9C_vaaX9AX+Ce|b?U zi!?v`imE+a8q!R2Xr6INPH;h^$2{YP!Qf(b?&{KdGN{kCXF#twf9@heaP4xgE&OB{ zn&xj5+`YW!_Xk+na4yRE99=wOl^f>?_~iW35(MbK0Uwcbs)je@dwsYMOgcfwodx%n8r$OMLC1_viFnRLmnajQ zEVn+Z8oN)%FOWk32hIk9Wz%Dlc44{6`NffDGG8Rbc>2cuJmWmSlbj=rT!YpuOV0Vr z^I`kIdQ|g*ix(iv`^a|wa4TK+nho3_-XQqE08`!vVkwd3#ym$XWYvD~80Y+Ha`nRB z$w%#kk^56VK_84WtHRHa5sQod?0u&mut)hp`(mnRC(epLS#MmgpF-hM4CoAQhTLM; z$=AFStv{@XaqkeU`NG0S=PU?2W^t#0m*H@WyO=5mmLliH+1Kq)`p7RZqwyckH+=E> zj7a1i2>Qwg0^n3Z@xKUDHoUyp`%8v_4vZg+d=HOVJ-N2L7_hGJPG+#JF1pAc&&DVL zUo#(x?>Q~w6r5BfS7Cy=z`i4m@_!jCd}5^53dak3iNni z#!9DL8CP@ToKBkf%coXmmRw=we)2n3W!hNav$y96;h1hv!bvV86u6XGe;J@uaJjgv z(&Rc1>kXj~2=j^Lo=$O60vTQLjM2&H-}lgtosK3 zl*Tt@RQ*Qh%H;dHfD7j@|EiDR1~Vd2dx;kY5sykahVFqCDm$I}Ry4GXN=z~D3(+iMJ(o-r$(WOA{emJ$`8 zIZ`MljCd>m05H>M_`$-V;o-^(dmUpit)`dc{WEAo_!imw%dq*XkIJ8%mL^ET`GWhy z^>sksMhT;NX~Z$#2xC$nv7-L~_Xuul7Td-ufAby5&agRa4&da*%}-dJ^^Y+pO_}Ck z4ozVrw;6}qE#Kn_dB7EUz&KrDahpS588SBlx$}$=>z5sTT!U{O`Oak{?I=9~M)LVq*)ODhW8 zApICL1Ag;*G;bl~O`6KJT(uH$uCOBQ?axA@pSJ*0R@5u0Db4Xi)55_cYzA;qRT#q?4gP-h&tE#2o9Sz8|%sXr%J zk^-{<*cfumHCFSV)GT<7``BPU`O^1`6611p@p6{GMisYVg4+DyGN$lh>Sm$_o*yAo z?-rlGR6mdyWY&07`cL73DLd2V*nR^&bHWd!4ZqeJ2%i|3M7XHrPVsG~w~!$)3Wg(+ z85@>)%IVkZ5b42y+27|P-SdF8<$Pd$GVw`-Jv?EiJMolzi;gU;k+h!jJ>v&&#tHub zooBaSxH9iw!v%L{ zaTu_>lm5wKfd2r}I*-;C1v)qMV80AOtRc0%=7hmS=iW~7AP3FO=Yx;sm-UG0-cR;V z?+-%HB0rb#!Lq#|ekb$EX8!=@3k<4{hH$}u_|GAetQ-h_3`*v4ir=hSX^xxk2>Vm_ zgWb{R1_tp%@?r+@>lr5*v*#AKoo2j)>nt3AtOqy^!n-h>KNt^~ca#8E>nBF#FXfAo z_lM%=etQ1^t7mx~HvSlW>>&PE^@e@eF=o)lWQTJR&3G%Ufe^t!;mNs_hgj>y@!lxTzZiNZaCSK5XRkO% zOt><&ha2aN+wTt8hTnQKPg$UF`zFr2#<)Eb+!OR8Y1%mqwnS55$fOk8#9&2T2?@r&U=2K?fr$`DC9bFsq`?H`O#n(HEO3%XMU;lA=~y>)_(9+V7%{x2r&?5F0Y5qAY1+!vIQ|xCC!i8;al4y ztCee~Eb@2jG;1ZxVQ^J87~uxf4!bUHHM|psjyqfQIQNn9yn}088t>LNji3bHCuwox^a-{>>z!)UO$3=7bIx63HnP8YrLq>qyF%M z&kb*n>12Dillpb}!N|HaA8+8m;(br&E+o>2&Wr#=SMiY!AI>E)BgQL141_@X$jFm8 zV2y7GL}Z^&1TPx-h?ym@sU0ZGk6}b3a;|C{FsE=ed`}* z9&uGW_{h6=k`L&Zi(_*6&2ULsyxZI+H5B!7A|k!u^KRk5E-}VY>4L=_Z#5&@;|IBd zcHi$i%+$KTHhkfAA8#1sLA=JyCP5tD2n%)YqC}>BM>r8^U3e;OM-B1r`-&0R)vz-H zbNC?4&`yvJFvpE9@o-|v5F@oqH6+mJC5d=QfGGfvmsq80bBo+7=K}_-a^0N}<2y;O8L{67HvrN3Fj8FRsqxM=luV<`Al9FpvZ3!3wjNIyqC#}Pmmj>;f0Zgv z)&L~C;r8+Miz?g-(-HGKaMM$K=Pg&(5nXTj!lYdsVJ9-{5Wzn39Yd#_B^u}6Y#Vd7 zI1#L1X7NdH^vi#VgzU(5o5)uk?~HcPmnV_j8-Nh=cyJ~dksdu`QAr7`P0aEb9?r1% zs60E*RBME~S_S?s`eSGtpq{47kP;pb^P}+Nnb$)vcdPIjI0(>(#vmP&<%2ypPy2>4 zhW28?0O#Ip6y7-Mhx3U+GaS1EtZD1#H~Pp)q1DMbIOjTk4zPk%{xE{5I0)Rf?Jhd- z4t55OZ;T+4zy3BO z^Meo=EdF1U3VfJH;^EJL1AXK*!faUkHIOTC5HPkKUa@ss@qhq-elQIl3gYX+A-@ZA zfUjF$2_L+C264Lh%!Y@npS%2U8<#DfwuT4{I8i>)`p#^vu0LUxoB{F9Aevr1V}Q6E z1epH-Pjf3fV4n<^s<=pJcwm^0<_O|ztQ+2L1>Z%<50Af_mtXEtZV$brrT7e}FQi|} z{baCf-iOrx065(TOXu7A;)C&pen;;Yg?qgH6ZMxM^K18V2=k2(;KDqj;9g&uo(Dz= zrrdnuwSD4^F3v7NW6z#3>eC3ic%~-N_s&(Sjyr#goR#kyZ{8?)z!}NE-Z1ltiFs*? ziG(UlLIR_?hKo1n9^8|M3INO*hKy@<`@s<(pExv!9y4KZB?vV(+Yfqw8LW6CLE4Yu z=OtiIf(?)9!lTEJ?J+ewn{VmGag_f6VzeBu0nR=LDkY>5cAMBfFi^A#jjMAJsvjoyGwmwsUnQ*jVQDL2A!t^hH+&m04Z&PXIucJA-VuD2IBep ziUEXH;7$unGgU)N;zCHRBvNIHFQ7SY7)rWBBt&Y?=EVz2>NC9KVz@-YVl4-ZFhKfp zz!AdW(qW5D^PC8B=e{u$Yx%0R+gI-yb^+1<06y@hqHTVIN9D(8 zy7E69ezAk4@L)N(HrtxMak-aRF2@!e?-_UJA@IXX$M>6otAT&b=A4G`*N2RXpwkzN z81T+)$>c-4W=%gh5gQoTQtFuMocPA^e~cSd4SK;krqhEc4o+}lNT}&CVF>7Z!x<_D zCxOcRW9UbOznMLQn^~684~P%9jS9i0>F!SkID~=pYc(ik4UTgma)0@>plTLa5T^X*u5kNM_{|rC0NObM55`DW)-H;M8tuSzczSX*t}p(V5}=;*c3~+f_m&E< zWsU0>T8W&_*cuz&1K#<`2W61H=lW)$eqCRee^(y@J%RfMD+Dw<@T>F;gjkw?oIl2M z@duBTF^jOAUXBf5IWpq*g&o8CRC z=K#%kBl5WLgTLVpC&N4c09H|^odNn_ErseVS4YrB4I>X{@?Jk0pXV6b`=EY|bG?SS zt~bl0_nI)CSb@_x2WAOz+%X0mC}J!7H7@6H0zzc@>W z7{0$)+f+Tg;vUiK32gq{Qdr<_;Hp-B@F~N*2cZ73qe$ZBj34V6^l;rvqs9zQIZ6Gv zsS~8X0^tNbqQ938SFd=<^!Jx%uKxh6vdPeKg*Z2`{C{>F+{QHs5zvE0ER7p;RB{S5 zKrBQMQxbI?)5?i@2O2EHlvdcF>$sr2Np_e@bO3}30uFA5nze23mVJ6i$+%sJMchzx z2yF`VlA#>oO1%+KWdH`12X#oyeyXyOP+l7?aS@$OUd9o0X{63B_dbGU=eyZi8~RZg6WB=^WJ84}Q;Ct|1NKL?f4j zQz#?8K5-T0;~uu@&UW$52kSP9Ob8hC3ciiGYXQ=K0sW>erS@y_Is3V&0niZ13&smz z7ryb<-F2F?hn?|=Z+RzwoEgtNWj4xtnWwMD5?S65O_)k_;sWyc!lBLyFF1qV3pBnw zWPqISBHC*fHLR1@{KtV?oka7RLcJ3f6~+MjaD^dOo}tUdser1VrUCd^0h&*t<)5>N zhPg?6lW*R1gyRH({{ZCQ{{YJl8ejqBZ)Pi?S`|0r4TD_{H`e)28K}DOaWj?@b>|?c zJI>@dqiDokI`@cl?-UKEqXW-;dBG$8<0H2a(vuOk{M-d&n68XY9%P^1zpOSEe|7=* zEG6uw-&{W~C6x2_B0r8F6&xcU17<+m(jS8j1IOM{4a}h%<#8kQQ}~+aJilY`Vf)L# z?+~9w#(*x1{z5o58Z1Zje|%XTQ2zjN`(qda&>Uh5Vt6q>k)88hVW|m(j|avYAbRtI zCi18)t_kt1<}G4ul0kUx zZO|12A%kB4K6OGAh%6;V)ce5EAqmXhIElJLLV#>Wpr}pZ#$O^>4Bp`N+{6ia#PEf+ zxPgYAF+^+#fIyWJA_ak)ye>OOL!=dprUOo!uGC0`yBswLUU1s?3)v6zf*e&)cERSp z&Ri#i(ttb)Y-dlGGzl|QvF~(;X86S7;sHu*PTp(TyjcJO!)DTVkKLP2M;kvUkI8|6 zNbeq9PJLq6MFowDG};m~jJej3A`shpYBW#`XfQtKC((`Vw>JNI06@EQey8>*6`@6 z^@5zLbDEc&g!AhJ4W3qE!Z-Py{;>KKC-cwm7ED^gU!05h%Dejal^oBUJUGi6!%j40 z4NNuD?*x2)FlzOIHg5`#pE*k3Hg%6?`^IfJ&D3$xnq8(P&^+b&(~MNW9=pR*j4Frr z!Wf|ZV-T$Q!$RSL6~d9_7tRGg8LV3EIXs0vnUoe<029KyJ&A-w{KLK(e|X9o(7Tv} zX!&zy6?x<1A$ULk02o`}{{V!R@8cn%y)%ai1A-5X*#h?+U`FSr8$cbsV<}6d!a|rQ zQxLS?RMWk07}Cs#KF^~APW21*75!rcdj))pIN+Wr9Qp0^;sCdmAEbv0@({=Jzr5Yd z4k?HzefY>Uv%h#02O}rt);@6n-ZUrgJO?k?QZdU@nDf(rjuqr$Z>9_d@*HCQ+&%>a z4}&-O(ChCIa#@W%W1&XoZAPSMg*qi-i3sU1`uNZqf#BirCIG1~wFAYDuI_rG77cIm^eD{*Z^~}h# z6m(bDSiRQ1GC$tXADj>ylh35N#`Te3vVVE=f(m_pqZsSXgEE(ZN&Gnd8jOC$`o(s& z@JI50cx;KU7vf3b;7*)KC3+YOLi;^iA zL`40>4Ip$vwa> zZ^(e&va5?xD)A>E<4lc01eH95C*D8)8lcqB0m&aj4S<@`6=*~*xph}dh*U*(gdt`4 zh_@W`4S-i_f@(Gfy5R|;xgnO$O2?C2;2Q0$4=E+=^-F>P#?YpdrVkagz?WKf{CjZ~ zv{0ZF`6j#Byf)YqDaZ#8PP;u}xSiy0N-L-Dj7oWc4Jq8{(Yww=?l6OnYOl|(vQR}# zL@ogd4Jwo!AcA}6BS=CF!GHG<3%Kd2Ls+KhEJU?VRjVAEsRM=N0<*y>!Gk-N>gn5+ zr}@Z4-X^7S7M`*?Ks@gzb+@dls19qa2O>2`ndEJ^5BWjKaAP4_laBHN!fFF8u`Qr6I^Dh6z<>? zwe^d39Ndb=2tbFHJ!LJ3S@S~@dX4 z34j~`lM7M2k=1-;fxQ8JbNI#Xw)z47Mpswh{Rtc|;lO<=i}=Qk`}<9QMr@rqOusKU zuu8u8#hB3bkcB52=Q!XPfz~686>_VuSd}A}6ivrbb&eKsfdi+k(He&%i1YJ^ zM_5E3zHWB+kG1;4cqZ{7r|&A;#sf94o^b)lKAv%0I`HKKnEJ~$3gIEHkMhU-M8y~N zk{&r&_zC;K;_R5IrreL$p5Xcm_nSkm%0I`(Rv|e^!VwwdW%K_4JZv7Bfwx^uF581g z5Cs*ong-|_!VQ;|7fm7w^O4o6H^{ZkC(E7Vz;O$DLhoy@6P;wx8;iY8!eG%6D9#KC zPf~0bW#DW~RKu`Y)(V8|HmsQ69b%Nl$pfASTo5^$VuCZ1MvzNU5rNKfItO6tN1AB= z0O@$Bg_ek+rf+1WU@8hLzBEoS=(^3I4Thi1lXn0J$lc2EB&BHGO8A45H4|u84 zaNC+CQrdIJybB^ztI~)99%K2(y6FHUV7GMVQ+(W35)JKz3fgobznpNd60?xl44_C5 zk1hWI;!>MNWFb-VXEPBli|UARI_iorm+0&0Bm0m&c)@MA|7@m#+sJ{=Rbi?^MIMZ<3CY5_DJR9mMm&My`*CEIA|>TYUbxY9 za!6Hzdn$9?sIIarsFDgme30z!yl{%8AUxsPL&9QXXsv)zx&d8zOe|T25R*V1aMR~0 zMv(@cdrn+@5p=b4T8Z1mIVX{^QZ2=wV5)su5EL zq9j9jstK=M-~hQGQqMbE(dVm(MVC^FuU@c3JH=WkZAZ`54Sf=uhIM;yjq6#tsf^x)WB)1+qvrsHI8+xAn#hkehf6mpT!@va}8sPFJ>)zKNzND`^vEG2#<*w~0WR^yL}@r_Xx*T!3GeO=;;s+?~SE6@J`(u_#Y<%4c9 zS^ObC0K59d{gi1BR6dtDQ+5{iQ}LU|n$Z6MPrCu{6;Azu@JtNef;|b2vNK&{Rx#Wg zaa*Be{5$$!l(DoA?%%7L5p>;rfc!jn;-8Aw_klZcJo^y(3?J4GUq(8ze>lSi`NHdy z&N4ffeDjU2Yk)Rz^W!!9aslV#C+praAX{1tFTv#xQrul`RL*#7{JH~$$G(gOY0E<1?M(E`JCZA0i4B^h)C7(f(-`{9gm(f zQs_PAoj2nM-PRYI#tU@7k5}FfcwjqB9u7FX{o_5dgudLq_QL-F#kkpd$p_@0-VdZl z{i}ajZO~?)BmCJ*;TjK-ezR)(!tcM@VrMsykJFe8W=aE{3iHlB#`qi^=za>ou3QmF zlWs%G5a>=ycOyZBktW4RaucE$tw=^l)vAaP-u1`y1_%{FNO)1~%k(LPbOLi>sI|rl zL|EJyA@Yh;y1`@?Za|~j*OK#G9CDze!{{{Y8x~80p|(fU3(-w!qN=>w*S8y!obGe- z?a=l!7Pl%JfKnd>*H@f3x=%fokRst$_);i^c0c%XI>%UkU!emfB z+E5qg-VuOI4ag8L(6fAVji;m{N-+>6RRHUkBE<-VZe_2t_0~mNlruJV`gDFVGuzaK zM}w`Q>6>sO2x0aU%17~#ASXhYZGN?m6D%q@LhpRMYn(I*in@t-%7+Hu&Rb(;yd$dV z)b~7N7!GwdBDHxQ5a$z<-kU`%J1HS$&;!lslT0N3v-P1N1k@4@W-fAOs9(Qe?q~@b&}m0US+y;x0?y1~N=MYUc`$Fb7w^Il=E2(7e4du?T!? z1%e=GoaXtY?qU(_H}i}@!@-QVa}UuoaQWzdu;JJuz2P#5@$U`gOU@x+S#C@aT3~(U z;_LwVihYwAOgSC#)cXuyM~Q#CSKdQua(#f@Xma!y_{j^1qh=TwH6=U)XX`2pXnsZO z@oq4XIt{Gb5%3@HdY=bR-{u4{91M;m=EIJCwUcaKYn zc5!2P9QBVY#$VV!tOUBeZ$4`WX*}2PA%&z*hxh~d#qKwnC+Z)pfl276+kd=u0e-Tt zUpRK}8oIbwT;+Ng4a5f$x_QLx_cKI`!zosIQ#naglM49(AgnS@9AQOpBV04^wE7|!pZ2qV*sjE{Yz8=ahEo(|85-UTS{R+e5o4mc0J0*5 z7fxRb_zVi_X`#1Q7K@F95_w%BaMdL$E&Wmj*~mAyT<+n!p=z@cE46FA{#*#ceu~13 zbvfAjGLzPt4V*phb-Bkln968IFz|M1ui=tukl2KDYwvpNjDc9Md3bDdt)@`|U|k_% z0e$)2IZH)KeD2f#05D7m(FeqgoyBmXbD)Ae#Y29vl|&RkYh_4l<>wDbmcj^ApyGG8 zBcUJxJ&$_zia^-lU9>}WY~AyN!2lRSadbTYahrE5)?SIPZsoKwHHbN za2-y*GOgH8JT-6`mz_7qU3l<)fS6!yxE(v+^?~6+7!D3?(KS5ok`!029TSA1uj2~B zwM7$+IZFfcjspsHaNf)5ecm&e2+Imce-`=jxdnM0uzBiQhS$7(fC~U~0;NnEF$MyA z3Dtv6eC0J1mE{4^{{Wf2Md=2%==D9gUi3_%VvdWyzcQ=AU z6`}+uGul9zaYiQ@C>|SLljl$|q5uGj*JOSVJgBBj5`Y%8{{Xpt!c=i$ya)G-B!V!r zns52a(~)VTe=quDn6^qjV>i#dmUg$+${@%Sg|2gvx*0RHn<=NP8EIrDfM~>46cpn) zsMXIH`PW ztPVB!_nL-y{+9m$E=8a`2w*5XJY%u{0NhBEPFz0sk#-nH(>W2YL#HmM3@Ge=%rLTl z7(=#d-G+Kx-=xZ2+yOFOVMLf@?Qr$c&(0RXyh_r4cn0RV^8rkP0vj3lrT9}A(0QQo z=kXaB-YERbZ`+FJXPl_29_Cq9I1D1Xck3F^Q1gh$AYi>v^Kg@5lz;art+$cm6&Inr zs~PCUYM(hxLTX+yk7I9H0@sHK?fDKun=>M6&0wm)3SP{DUHQp?p`0Ekz6iDY#%7+~ zFNGKC;mtzsNc2JUu=(f)p*7k^m@vD!89W9iC9 zbjrUQ8M{^4XQZP1CJ4yt{{Zbr(Va(M7tx9SjN&44`Ne)a&IL(=OED6p_lshO#w-{rM4%(E0=)oEe?;KX>;Srk@iJhTOOi8Uw5mBcB+z#sCui z*AgEsT%<0+u|#g9Jm`P0@fdar&ms3$bajtQHbTwxMC%pHin@dEFyWT$?nKO^Tf z!+5{K+)#8iFYZ5VSQTAn!Y_)2Dva=aIZ#yaJ)`h+}+dmQT&B*AEPzQNp0)X+L* zipWaXlSLue6>uEcj3Z$-M)Rk-ZXBcmhSeusb9SxuZ3VNIuYvyn%$cCHNYGlc-b@b( z4vI9 zL${u{i9zT+XpV)crdN*>7Pozm$}7y(zpOl)Ahcf&w$8PO(+OpGo4kem z{N(7Bs@E$m@yj1syiY<>B9u6SWID^B2vd5F{&Y_8S50n_`BeDhW!`Y;q9ou6)4$&s z7(_8B1`+|={{YNzMUVtAa32qba3kdhLTAHg>_fiuZ%>9xFW?4A45-^0q=qccfL_yC&m(TDpi+$+KQb% zvtCr7hiLL{-1B3(4-cH6@43W6T0?Vhc@ao~6}=7Yba?}=?R`OOsjyNSKUwbP1%@y? zPG8p;O#rFrbJZ`NLpff6Xx1IPkUThL`kr|O&;d?yqJ^PPN>XijZUYm?D+Ctam@b;@ zHp2!BMX|Dq>vt_rg<2Y-$nWMG$-W|;A=;Lq%>Mw!2S-FZXm}YoQK+J&Al9NSWMWH+7TPsdDGVyD_mNF zsiYXJ@%NM|+M+kjbidukhoGj_2_56kdYQ0XnJ!R>-3lToI_RHD%}@gXi3I5EymgFf z9_k}|ez25}D%ZXWWAh^Ff-NunI(3C4Km*#_->a?XViK^>11W2Y*PIrMf(x`DKmZe? zlZ;8_D27dp9i1@-IGv2z7*({`MI=X3qJO{=Nw~@>m1kx^CItv2Koyxl>#c4NB7a)r zEHIr2pi{tY#sT(KR&3V#U+W2f_=BGN&jiTuVM)JaqVR2U-%d#9Ow5E zUyP_*&>{3>Im6@5I7BBNuv86Vpud(R(^#V&7=lZHDwr&z@W&!|#lfiK=bUOxBERXv z%7{D4Af`?;q_>YadI?Tktb&ZVxf(oSDGTJn=LeOTCN1Dg=BfC^#8UbMl|Ok$vFvhuCu6*ITQO*G%J3o+rSnciD`zd}02GPCH z`hx_|Y5o`K#e*(aerxz<*_XxqOk&V+pe}D6Ot#7Qi}ZJJmaTt`FrWR&b{n{7AaW&n z$jeFDfgNG1rr?Z|EacV=Lh?!ZaSyH~_Q&ratoB3l1`m+C+4MMR+8@9#>mJoSuj6yJ zJ;0^;U*19S+7H2uNj3Y!hQ+~}m07ID@YRLVJ3}OWEn@~B%x1+N5%TB57L3YVlqq&4 z<0n=^H7<*XHd!~2Oywd1cw(J6yA1xN*+_~6bZMdLgshN=kW%U1nRSvv_iC7GB?v0t z4XD$j(2Rg>TNI8a8T6kT45Y0FX%oCLIof1^p$bS@D_XP4(5Oz;D(|14I9Ljbp*RBX zS~|^9^+ob+b-r-wnyOK)-uTi_SS?)}rhp0I{p7H4i9}fIT<;Xs!xg@RX3EEp7)t0O zl+;&fYl*VwDqbZMVI{j%-`*AjZY4Nq16&I5_b}nDCN-_R0`=hUcw@l|Ay5UmCD-*< z<^+SLNU?`VoVDN5_5nB=DDtl^caChX7!(bF)O2qhnh1jsCD`(J&w2_( z1za6Bd)@blvXYMM6P6r9Mazdf1nJ1P%Wn6PMN9y4F6w+uICSP42K9Fx^yjAmfe>iL zHKSNT64#FNT_w=H_)I6o4Vn#v76jjeJr1*?4JbeSd7A};jg+$y6$i8XnP#ltLds9J*U%gLjx*(b6f?1T^t zxqm6$UvR+!9Ulzc=M512TUF)qIJ{$vRsbXkMG0`)JR}GL?s(Nt?JyW`5`^FZ!imG> zp(6pIpkt(7NjUM4rHM)%O2W=$-tn7xvjpK@hh7eFENpXb#S><@(XC|-$vM*?5d&fl zIct;gN-ei&<_Z_SwU&r7U7WSPUb^|so|*8Sgwd*6;p&ui7AtC-`_{P0VbKQXy^pwa z$%Mlreo&y_7QN$5eRWhprR322GJyQcTwIY>Zyr^=h7!H(wm7WcAy1Md){$YIM3 z(#BcFEexQvTrcob`pE{g7Y6ifODP>G_?gb>*cnRECubXL-G zkFKmX7bUIK4>h`uT}vm3O&TgCU?K+k$*E5Uxz*q2L5w#}@Q~Q^yku2BI8DE&C!xO* z;i6-ROhrIGn74PPC{eyLEmYt+ZEt<`f=kXv9KEPL@FWAo0ct}0F{z-#3myu5((E6BQn9wBu0GPtm(i_7C*r51haEjCpUwMV8awI6`vKz-2S-;18c%w|U=4GKRMGc=>cqxm zDysuIxGj_Dt_FK~yX0BJ6IU!R_wNu72rhgiFal2N^(}Bffgl7AQ#x?`=8sRjN0iNy zbNj)VZ{K;MDe=}5+tx8vZWf0R7z2-3GPUS1%o~gD`K~C<;$YrB%!t>xe#@WyQG`eB zm#FRjeg3n?7Jdo-jFvj^{ka%^p~REy52F@Xd2IZ{7H{>OLp#OM^j?Q9vG|lUqOv>< znp?BUfOH57q8dbKnBaoY26_0?gK32_8`$$%IUOO06^Z`ljT>im$2ikMJyE9WMky6o zWJ?faw(cGJIY?QM0@IOARnc%j6O~I8fPhee&d#TjvC1l7$Z!XbF6-sMeM&GUBvw2t zCf9f|r%dc!1G~Wg0L*6vkx5{3yOFNzlo6$yJv2NXez3K3fwAE9>T$=d!FXNN7QR=P zjeX;(0AmTZ>y(c(2XdLDXp^4)x4eZ4-3o$4ksbH=#oE%wye)w0-N+vp?W4d!*cEgf zJekxC+(DpS@8282J0wI`q1Ys!9x|6i*jq>}PJH;n$`!yv$O})yid_VBKEQQOxW@A; z_yMKi^nP*u5yR1<4;3AC;hC%TCN)_RG99?6L@DiwzF^C)XAV#*=>DweMAUaX#F>`gBOEXcag#&AP;Vq|pMQJi1q8dc+8e!kh?trXge$@Gl!7)Tc>S!c3|0G^e|aE`+xQ+JUjdy{_@b z>=&m*bYJ|(n+;uSHf;8sdB(J?z#V|{yAtt{sWn7F()p)Kdh8PhAoPkoJJ+$}1`9WO ziiIa_dwCpFV5{<*g|_nz_d^v$*IQS|VR^eBU}=;%B8A7ud%SJUBc!1aN)^XiRjtys`HIXc_>@Y3G85t4=VCP`3M(y|mZnVDxDcJ{lgUc-CAHYG`cZf6fHf zl-U^qUkordXg6&+_;ZBd!<9JKSaD69U74A^rnxr%IZ0OgM$zYo6tTqXQgpi zE3^=D<4e{W4mE;%at4Wic$jUSPAZq4R-m zvv+Dd;C5#4Nm-j+pUxsy?0++bwC^krR6jUJxmEg1kH%IK6G8hEAna{ipR@MC+^6%4 zISi-=-WEi5N%E9F(>Hn9vYtZ!0FcgL)~I|{58;n61fYD?;9G067wE!K8P4uD!Y>|k z=pjtwLg0lV+twDi9X4g+JCzKwA-7BOEc?VXt^UT5_k!Ve2)}RU$ai!;sXwvFXxEGR z$M=Q5V@Iqkg?O)7v;Y~U61eD5m=GnnCr$pb(72Ld9Tx&=ef5T(9p%o9Ev9>LfUE|W z8w`8_K9zqNa$C%QGyUNdKP&Q;{N-}5X!|Amzz|&@rcwKHmDjgFEy6x9L-1m<@?%`D z(|8k{Xb2%?U{rGC-t;q+(sWc>Nh~lkdQ=`D)FTk`OOBSo+m*yK}~bW>((w{A=rz_u;TbNHIVVZ?r@$0hTZSH5fIhkhzdYA z&2PpD=(epqy)-sm988Y7#fuZX62tF{Ga|!HL9g%ii#P#J0s!yxxWb>83ie^O8$T^P z-C{B}s0auzSZgEUK^-?G=gX1$kO(xVt?y@?RKh*ZH|DVStX9yLpjAXvyIas|!R> zTdM2VoNEN=CX7Wy=w`HwU0+= z^~X5{qbLUmj+K87`NbkK8;l*iZ;g5Hcn}1V(2X?(SvWbx!P^Bas_)11ngARP)kfOp zZO3>S4$#?m$4;#ILKc>U@N0jGf>Bv$@QreQXMJQ}Zcua27r#F^5DV6YH>s5LV+Ail zMc&U{;;|~x-pyZMyfj7k#s?DlJ27?Jr7{%1jCm1oCU9#ya=>$_g%&qvT;=yAa@Xc0_Fx(Aa2@m_kwiO6p` zpBN&c>n$Hh&+Y_`c?{^`dfrAUI^N7(QtcPZXTgsc?INK&Y$sRJE zOcd<%jOLjnMheiXToehw`7)68=m=S2{=S7@?`50rpq# z8*lL|_%`HufPiTD7|LJ;KpFimE_LT1Ac;r(9Qx**)cejGO}y zKspZ1#*>>U#Z%sY-flHuBf;A8v!&=d|1VF7y znA6k8kE{UKLNixr^SzU+&N^VAQYN72t#5t}OiHdJCvjXHj_-Y7;0dC$RraAKC_ zS_H8F0BZ(dQ-KT}{EvOS%tM8xnS-~FL5b0-DMcyyoVZ%?qD0&*U%wbZEe2Hq-``z% z!?p{`Xhi92-~7fb^qlsuAb@Ms?;Vhih#t|d)1JPtR^VK?8|?ydIrWTMsx_e0n`+Qm z{NSV{0j*UpBRAmoM5X+gTorgPmoBM@BrP8SGk2i6R|~Da+!iXlDHn00N;;dy7dc~2 zG#0a+buu=A1ONgQwB`Nced3sdg;qCCu?;F3xN!Yb)^Q4OhQ{`jf|p)qHK!)i4UW;J zJe=gZt)2mRs2k=N?8Od|@C~i!V>R=ST25$ygM}|G7Ycq+I~@xj>rU~q2mk>>0Yna$ zMz&+!bR-*4H_!c>#Q8#x?nmI=Ek!?_6fx=EXFlWiIhMB)DFJz zB22wQWUHia8tF0<5E*8mi+f$acOZczB84`o3;LMa;0XXk6qA!^rH3yfh&^D_cIv8+ zu4%TZNecpuN`b)(eijx-PcFq6Qu;|&Jy|JeD{qz zB6RFm(x`E*Vj^x`kjg2vha7Jf$x0v!2pYiVb#TVoHi+b}Cse)o)&;iHD?dXu@rI~? z&b+?&`08f&t1d>@w{rTM z^OyGX#M_GRSaoQ;jD~r7VzXNM&P&4zUbvn|2U2wG9q{&RpMEfdyj2cmG5`R8OWR7V zI!-Z=+U+|_SIc>!JZ`^s+zI>Ln??T+E-;|B@0u8E0YJc`V7>S=*Hy`hWcF1LUb1A+W%%&fFL zksd&=dS|}lp~WbD2QT9xt~+G>hJFK@L0tfkb%XHc)azB- z>PbB}9ZGd+`Ah(7x6TH8<8t`q{TL7eo0|C}@L0yUphxDqejL_;Z}rG0rsU6UrZ3K2 z1Ddt7AXs~67(r5d>m!l)$Mp{y%HKEq1;5sFfkZxN{{R5t>GDsUIR0F6fOaGJLU0j8 zXvzJnhKPbguZ&`h@b!%i;|U*ZPDkI)4|uxy#qctXlc;47E^n9kW~qs(C77cW)ZXy< zIEbH_gHmWg_($!5lz+Zf&$Bi~y8cYU483Q?Ab#*@71?0>OwU8H2jef{ePE3OsD#z- z9?`=}^57JnAUU_f7*NR*HUSB;vonmQB_?e5yND6l*-7Lgt83_O&LhTr3PrWZ)8xL^dVtz zLM<$IcpOfgQF>J>i@*7eQbcGDn)>r_vTK7wb%$5@%S@ywDvV&!=ELIvZ^Q(vRd^vT zwR3R=5agU}4M;y&m0UsqNLBMvUH%Fi3L#d4>|QS%R|rK@XuD9w><8xvJXssFu6FHH z93Y@l2B{)(=X@>`;05=JA>U*=ePoikz#HJ(?|SpSvr@|TNG8Z>AI@&R#e&8>H?+K~ zn|hEZ$KVVgr|odDCvT9g5zaog>DaAHP5PzLh3Ug!SfD*}lk zG@_sUkGwGfDIt1O{+SE)P$vZ7v+d-|Wfq|uy7 zrm;Unf(79<;p)!ZU<431yf`}J{$Q7p%tdH!@%iPOcu6{D5Z=FUS41sQ6SDD9>4mVsEp@g80sVUQLTP&)zIkhI=L(%9G%AbRJs@rB9& z#L{06zLyQiDpVb^r_W9rj0rlr0lFJhgY$?O8xc+9v1a1jejN-pzz}>J@9_Byb`mD+ zE{zAbc`QwegdiVI+j+wfAWUfN$+`ow-sVq4VM^LmKHYCwFin6KdP{Y^+4S*PbR{E2 z6QXRVSSq4A1R9nzMlWYk93E4YpPWM`!zBqw<~N>BaO>uZ6heX6Z5~kL1KeZkNl$x} zJ7yA_dhFD#qvx6DI%XQ7`tg7oDq6ixr1;ku>LGAxORaDBtAx;@rZyUA_kkz|Pzv!w zL!Wq)_^PPFy`bjvhpt+X4<235ZX4^s5&*B7b?4RvOQ@~k)c0}|Ayf-DqhG9D3jrWX zzB%sM#`Ch66PmO>_{d=7k*{p}m~cgER~FiI{G3c!HKU2H5W081vzM#Vkd_>n7$D() z`YXrvif0iLdv?wa{9v$;AZRzi-x!K)0{|Qki#Wb$!{lybvl?( zR)L4gPm^Dao{0^kS6!EV=Kla?$SKG9a6%zetGmzF;{oF)mutJk;{iAr1en8{)*y7w zH2ko7Yk*CC+&LRLrpyA#@uu;ZEP0A#@$4G8s~D?c<#6Fm(`bC<;iN@rO!$C)++Nu@ z)b=nRvBL`Z03TSO3-2ln9Ub8+uFY!%P(F@u`6I}6hZ2r`Sm;i%Tm`qBAlt2Rf`nP|gHU%A{+oXpM@;|$@<2Y=6iRJhLV@{X#m<|E z@u7X05hqA~4741a`^dx4ODEti0wZ?>KDK<}nfC>MFgPFA3Gy`kF#9%yAB;#)*KTdr z33YsLyiQn=;{du)SLMzYjXP7~3+c`pq@q4TV@AsKGxGi%N+IPD_(}TBG>`-zS!u{( z6=*%+)$Q*ENZaoX$v=$T!|yr{uz&`=;R?R7MQk|V{{V@i3<|FXNgwo(hxM0r=^xQA z)+$0K>K`Bihh`bmy*Aj7<+TPppXn(g$_Jn6+quPS($2RuvG-$ zr`aBaH5Ha3tgxvWlm>-OyEZ^gHqyfmhNMMB76<@4lf=L!Gr-j_?0@E5*rL?x%`7_} zz07Nh3kiHx=jX4yrz-{dP{iEUP*(%sqI)ZO;`rJce8v@YrrF;2y%{g(@d2E8(c`=p zkW)a$v{|cv7~YX8NW551%$GJ`-#eN<@#Jl2M6SBFwMs|4R{#MvkkFis^{*ycB^;+J zJr6y1oaiWcor7z>PBUT08o&X1NOWrzjS%g2;o-G3@bz%2N=Xe0?K!A(YWTz%DF|s1 zZj+9Aq;Y&S4WLdN+Ag$N;sFo0TU~;d8~e$RAY25k9PwvCF&i%00V+GXo6*l0#smXQ zUHEHF=;yo{SaL#%2@L|>q2o%D9a0@TYEAb%^NR07l^{Y4Z2^>SqD5H0eqo59}i66z87NbpdHoxRJ57f5>;!%E&SJ!JdBi~<5^3A^iz zUrSa4v`34l@*QMCPg3JzA-A1Rd1Ff=Ow9~>adjTdZ&|R4#Zln%`sGl-Ay`7eWtWQe zhv_OQLI`cy2l08p=;B=#qJHkp<3)f`v^cwXJMoTI<9b!Jf)6J?`b^tb*u+c9fAQ$T zjXnl|V0UTzj29t|dH(dKXFZ zhdRWsq@|#uWLI7lW;f&2H-T9u&z`l21f)}vLY8f#RLFQ)xK3q?@vZq>4OngHUgg|2 zcA2w>V1~`2Al{+-%dW~a4IG9atR&F6h#*iOZ|fFf2+(-)MRw#4xMM38GK*&eb5qUD z<3>PJNCE=w#`0HQ5)CM{jISjejk>p`O{i;5-fwpX?rsNQ@y3z)Im!tJBqgFIyW@O2 z!TU8u4c)6Dr8bxr4OetgCho?T>B+*xX@+Mr7 z4ew#w!|xZJpM;ZD_3^w0AL7=fRiEy#h*EQHXF{8pVsf!s!-CDZqq!G5km`Q^@HjN= zSa+^x&a#4Rk#!9ac4)W=4AMgB!S4O#9oQXprhaf)@k9^De%<210xC2pO$n=a`HJho z)u(F3BLx9Ke4J*%r0$W^;Ny?|#aW3(d@J|741->R)n{K8>fzOlRan<8@_cCc#H9

*nt!N8WI=fJ8l~&H-o+c|3EISm~|r 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 z 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

V z4h>w|MS$w_>pOxhq^0keKaAHxquBFDXE&S=w)o-CJmYpNPS;PIYSErSyfw~J#22XR zeDjMsUf=9sM8LAmIM+BXpJI7)&LJCjh;;ns-t=9;H^(@u3({$~-cvCf^yJ|Pchik? zggQPa4tLHFHM!@f=McPG_BLcJ5Sxa^-Tts3DX=u*f+9}ke3>zZp$X@;LFo7)VHZOHZM`I5E<$AWx)+uZ)^f+N8&51xtI!2Qy*0 z^gsNzrVeGo5RW z*)c*);sj`BURmkWm!jsE}x5rIt@x$EK>x)RG%%n19!A)`w)ct1gn zS-Via5+BwYhz>^o0OKTtj|pk`$EY8s{{Xl5lXO$OV1Tz*ZVJ!`me1A+kd{1_HVdbbVnBm7RzAF-E6`>l1YxQ*63g`P}_t&a6z4 zz0kh>J($vYdccT(rY%uUn~fjs#3vNp}05B_O=O@jz%kSqDoW5I#FPEGH-;N#nMK@R2sDZ`u)h22QIZI4-L;pd-54t|2n+bR0T zqy+A6fEuqDkzR`CiP+-+yb`CY#wx~I5kRFl=a0rzP=HZChOq=IpomR)bpHU{sON^1 zoy-fsFo=$gZ#k$SK$D(-*A>9z9td~y_{VqZwLZW6%`o09RQTr*qM1&Q3(IT|&6m&RQB04+EzdaFDuRcHkBvdf&cuVBky71IGBr+%??S1x3xMrr!I& zYQ1hicgxpU6S|Q{KR!3}njVcnA07ODTv)+LNay|e%8sG5I(XJkT~gR59P0@vI$L+~ z#w@WLN#m?@08d?>u^KOb%MNdj9Vb}@*Ba~A0O(zIw-Ps|;ikIBj89tFrVZ-8Ial8q z!hN3ySgw`m2$c8EGzu>-YWw32bdN(#b-W=5l0fA5ggQRUzj#Gx5<2MXcxpgUS7Jvl z9AKwmKR)qzAaQPe;7=*UM>ybyAnkSjePSE|NG}>6&QWA-N~8kSpIw;X0Vql$?2erh zUFNB0F3Hi4o;z^#kktqs?)-oA5X>aEZFF~o4LuXf#@HC*yurVJc^E8U8N;49!wH}w z8vSp4`of4DiU*m=nx|Vp9}h3yE4Bm}T4-l?3U6x2lZ|fo{{Y-hF}a|Aj`hY_CW4CS z@zdv63gWKFN&YfRR_KdhpPVp$1_D3F?+8hhO=TLU_lo*BM$A<$(3)#tpr|Uq!oea*QlK3Zzqx@lStOT-(j^U@Z7U zQzductETH51IkhBXgk&cTyUT3WW^{lv>%~Ate`S)@&pVGFC>%oiVxGj=MrsH?*4S- z??kt3KV~NaPFkO*7M6`u{29QJ=_l;R2D#ji^^B|F8XwjtvN?qQGLaSB=KgR|s*?oc zrl&CH=O4aA0PLjm+{e;Rs0}YqJ3^+s%qYiTMxI-E{C9*%1`a(b{yz>D8Bl@Kur!M` zHO6gvyb)E}r!=Tdqohe2yG5z33CB|aC6XWR_Bhv4VpCNE6?mrX zXZjtc0}O~Md*`cz2Z9zd!spQ0B#|9)y+2D^I;{aOfxVgMH zS*t@P5OEIFpsk>I#~C2Ct;9&jam67-s%_F5v7Zh&?JnyHaz}06y?o+a)~V&Occd|% z+|W{(AJ^{|5LA9g_lam|et7T=2Q2g-))vv(9Yui#v>)HBY-xvo;|Q-St$*etp+|y0 z^9*Px^fUO)E?LlP^_N6zu!r%34JBEl{$Q%0N<{<4w3FnR1O?J>k0b9I@bovP94me? z*eB%w0GS1@y{0swf4Tc`P>p<_9xzp}_WuAsc=tYHIHK9_pZ&oIs%gca&U!3#&-}`c zz~0aN$_Rn@Kb-gbf6d~@Z?(YjdF6l1gk=8!JZAvZStR(TR&JW|Ird;#lWVlxZS&WR zSAwDx{{YhghWRQ_zl_mSart#Vd&Wmw?YX{KnLx&n2p`@fYoTq%Zqo8c;f2&d(1lL* zl!zpgRyW2riduma>SLr6>~H@7wh@Ao0CF<6=xi~rck%hem}60+#M6nU-jxQq-}>az zz$sgApY+7IrJx!pkJIM@F2}1}U*d~sDOql@Y6g@H>+y-Si%t4`Wu{|Omy^aOSvMx= z-xC5rV<0;G;93j<2@5G(_U5A%THvjC{{ZeF1SYLIYY4cbB>7kyWloIK7Qnh#cGsqE zQ`mWv%B@$shKNh!(e1`+L_=WjUV6t!^rD^ld|*r>`U7q8fK=Z38sD#<$$~>$+F#)R z09@Yy15b(dicjP>jq#f*a8ZYRaftl~eIJYhjb$#|H^xBawrzaz#!w=Y+tcF$ntm-j zZ;VRYuEdF5ag1$ajlDiGYldBd*Jk+RE2~cH9lGNY5zx@S9qSb1i^8SZzA!o{0O;{U zHXo5j=B^_JJRW>YesF`%Ja#A6Lr>kp3>e@8Nv=l)s6%W6?bbONjnXna7J0+3JrF9p zxhAjPCkFEPOxk_sv#OHE+qaB1Tdj}exxgW7YI*c!Q<4$Qc=NxBkCF)5`(?OO4djG- z*BI``%_q*|tP22a7*3#ac=ejG%1u|xmz7Yhp2;#@-k-n+0zzmCD2=ZUzOd$zc1TV& z&heQ_X&dv(ePRmxdW72sS;3D9WNh8_$3IwlNzms)Q*El4rvdOvD?*d%+Xs0w6~=pC zpaC@1+E!pwwXtCdX$bl4`x-QaMKFDt=*YaB17 zrhsp?;W(FG@Q#-4$R`X9wEDvnibU5U?J3JLDyS8K@Vk1!G9%M9FTwiFB{a@#M=)tr zk8Dm`Hk*9BakX$~PSlj*FT8DWX&=X)u%QB~A@wFwQfM!FMEJ)NMFfHQ-u;-+3^^6f z(pW@C6ywfBUnK|glsMOgEdTp(+HdB~Fx zf`pC|Qx~h$IEc$TzVYFyOjaP}-f~mcu73=-v`OQ7KlNPY3evQVwYQ%cUcx^IXJU8n z8w1tBH8mX%8p*%vf;!aHIo=nV2!r3`U1e|${OO|cIDRe$qCin9-JQ&W&0%P}j&|1_ zOScOZfKYgG<>YA(69n$30ykn@^Q*qHnO3w5$nf4|*0ER&KouRS+I-?SjM*J&ge%0j zF&$82%Ujv`&U_**vq8sCJ#GkN!;f|aSy zl2=?|=E5@Bo$;{X;|7({-!fB1@5T{nQxzOZ)dG`YWBo!&uvJSq^YLOGjR#A*YySXD z540MmFBwW*SU_TIc3zG#MHDt7CfC%E^NXwOS;jfe}%Ik>>7)&vPg_vFb0JQ{ykZ(#l~jfC^B{LT426#oFsk!LUK z<08igR(^QN7OJ!3_ld)1oGQ2Thy*!YJU+ko5b<|!jh^t`mG%DsTru+i8M|UB0;faH>MLi~VGfK0;>Ki!VCzrhC zzXw084RRverxEqNCew|@8r-?bY7&Hi<9Nf11SsY@OgL>3&eDi=tjkrCr<@_~xdaEQ zx8E5}q6Z_cVSM*6-J@GU$=m#31XLgz@9FV^IG!`By>YF5;X;#d7Fl@dm@bM$VDrYk z;cEbcA$RBFHf95MolVDj?**}_0oDCKInQHg*Wl>VYbn|yKnQI_*UlJmTZRX+C(knn zCctZB)nd5&R0u#J(ACp3kLfCr*!Ld`jCp}IiSm{3hn#a!1?}Y!H{K+$EFdl?W)v+E z30(6~zZfclou8dQTZtA9zlU1*;ev#L1OdFr929G!m*fEBoa=$O=Scly4@80Xi~GuL z&2Ar#Gj0j{vFEp>pD0hxDwZS>mtjW_SOcU|z|+7y`NoI>7>b8}EY=33^xNS8^Vi-e zAnM0htFJrl_`qrUwngJ^&yDe}F=A1Q7mZbio4jQxktjljoqW2O^wh4vctK4%;`5I% z1GdGj-Z#(Qc1eg&NILJ{D$#^FUJKSu6GuqSfb;D*{2K%b1T$JxpC-*>x`6Y0OgHF6 zLm3RtTy%i)0lBz&1I9%M1pEX0&O~u&svtWQ_`We96o;E(xpwq(%Z-n-P$a&}iY1ddAxXAV;`ZJe&NS(p%ZpQT8`l{aoG8Y30(sWYvaMnR zIHuq)GpVO@c}tJQ3Q@WTM2BeW1{hS%a#P z0%|BaG|KMTd>hVqHnu6i3Uji*Bb5)r=G(pd#uusuT`C$ly1p>b6?JBK0`udm(2AVa zm3a;wwZ`g3eY(`NK8(;%m%uCI$wncE3j-Z-d12 zwb|R}IP_d%k2G)oV@QAs+vSP|0F>!t)uxBH0t5|%17zho>CLx~3Ew*%Z#X3t+D@8J zHv@02sbZaaU?EGf0r^vp)=pUj{{WZ%aJm7YQuCtog@G9mGKP?_{9(nU6N6X*u|8OE zi|BYBg7{zS6npRg02U65i+OOALbosF!?N>DK;JG5opM@*^`FqkZP6uGq8jXa$%MAB zaQASvN7}LW$4Jzie&S;RcEzLl7-c8I$LWl;uZh3639`ED{{S+>k?v3E#o3<^{^p4| zI_LXv?{WM802u4Ded2wiUZ37LbB(QEul&jQZ{q&|7+`=#LqE0@flHETG54EwXX_PT zBv(_~9v*#Uhnu3&2U!zJ5Zi>;#v+|}zFc`RQpK$I->xy+2TR}fuy|4jI)kh+@Ffth zI_DSmaQaPQJi`9~Va7@+L$}c|4dNx{7E&lO(@TKr*Y4Jhs-`oZ8(aqen2tJY!ekX~I_B7+slyv@tHU`S|$ z<5%~DG=}TjtN!N?jJ?9)^NP$~w)MVpBAc(V?*-v8K6$YfIuM8Kz$_=vec*lu`W?Mv z9T&&ZUNYjPlp1^(=Klb1`hGt-NC(1?=Q)9R6ME|d456mM$2#W@$;-*-<2BdJxF0`NlWBE>*ftz2p_Qrp?y{NjW;sigd@w1AjJWP6Egk2&6e&6q>4q9em@} z2C9r!I;CDt2$G$U(s6nJ0PZ|rTU)1syt&O(w8cIwKl3Bi)`7o&cpC*NZkP4zjBpYf z_Z6LruYHZG^EAyd3EZYnr;{ozrjpg*ObD~sLZWczV^s{G?5 z7eI%OKC*5`txZ0{`$fp@{&Vu5-b-jMuKrtKz%EE1WEhQMu?Q)<2LbHiCkiA5$m|Yf9@+ zLG^_hJb<1Jc=xOUbF@+>$9uvJIEdYT8~ely0}&y^1m2!H;}7hxTI;dv3)Mg%D?4iJ zcdh361l_P{F~DZDvs2-J*CHva(3ew3;acf*(DJ^lDuO8nrV`%(h+K|#kswfuV?}v#G(_yFF2))S?G3!UK8u5{TlSqYE?6^uNC;HY zO+{uOgf1DR<}vL$=4%5^N>O~M-M6{uz_lp$5Z0hs{o{v0SHft1J$Hmb1spvg&TwD? zh(2F#39Yw+lr(*AcewGu4&mRO_ifjlW9~4&U-ut$8+<)C3IY(QQRe-9_lE|dq}=0f zY*TiJpPme!QRdq?c=LwE4WbKN+I~M-tbqpIpzmKlysD5uGk=rU##12PdW?X${pA2i z``b6VvV+ftldqiLr0v--;-zS@EhB5{BlT#mng4gUZ*_6uGUo2K0#UU`PnQS7|5 zQ4KvE+$TE$QC;k94)N>VAfkJJwiN>eHqOU;lT-rH4}j;3K-%~_x{oheu}|h9`2D?S zGgY>HR_c)6C?m}ZzHRZ|0wd7VeMNos-WYB*JnNM{Kh7Y7Jp#(Sh;=`B$hd3H`-bsQ z?g8|N@8<+S(_9Ys{(a(oJi+Wotv>c(?;;(vc|HS<({mY`bW(i)CGv5CsSu0@1ys8~ zIVYBAqQRk4X3K{mvjVs=*mphSP`ofOhMrqz(|`$3EY*@}yq}XMDIh-YT{Yj+l{TCf z+o^#T?UwZ_OcLQX6J6As#pxV*fY$GuL#c2u7X;mK`SbY38X+A(d)@E!#JOg2CUjYIQ}vY2Rq(B3Pc z-#2Z#$d1UVU9k%79g3tzZm$W9mVn6+Q~aOK11o&@xBlZ1;Q(5kj+aSMZOu%66B6^z z3#L;>NmdeNFt zovxDa(TJrH-2;1n8K!Rm2LKWeTK@poytxit)BF=PV8HwxZwy3NtuD>;n?_$3YrZk$ z1Rt*%l1*d*R$h1J-3sfBTe&4;PmD?>TS$55j5~NA*(8zjey$EI!yiV79hP-26E;H;9YGZl{g|sq$kH5nT?CGkMQ}sTX`r?^vQDwxXl| z0L+6Rh2z)H?=A!sY)9jX#v~SqkG;a{Hq%m7iGDv=74?9owR`cuoHrteZTZMmB?#UL z{?WUmaraI*Nilhkg8GKm$#%HKu6i z3ytV1#5$aP`oxx-0ZfJ82Q!ROl}Z@@00YJoG$qqF>yKIR7`;C7(uct`&ZG}Zx!%6M zFsCw>gOV3mm~xxS^Mg~IdcY*pX0HV9eD&`9Zz-rJFcn^y6{ui1brU1hIt1}w$F zDL>=u8-h-d99$Jia;CN<*5>-SveJZVROx3I^@BO6Ycws8lk@R{qZ~r7SD*LJ0Xx7W zoqM8t$m$9D1Yoz`{C9@}D59-Z4tP7W)+AMWYl?7uxVGfsY=?Tbn&G`T3hNSWDK*zV z3GW4hgJl{nf+Rf#ITfI)UGr%8y2&@oM85`)gWt*^feTT@n{K*0!kYmUFjtQ{HR~dy zK;#{F{mI_(LDaBih&46G$8^K%+e$EiZu0O?!E?qYZkn@PLY&)xwE#%9SpsezOby?w zI;A?`K8Ff|ibW%NJIJL`>uau#IKnyr#-vX=_w$^40FY1>4K^e>$gLo#KrYdmNv{hW z2b|wyw2-LAk6SRIx=6Nk1L9YU)@t}5yFp{2LaW1h#)F7t#DaNeVs8veKm-rX+I>EA zdIXnZ&F|>JO~8%Y#+~68UQu+`@5%eZEh?$EzCYIx1pr7j*lyu~V2$qH=klH4PR3mX z&^~oBE>H&mz3;8{hY6zSzketG<*f{9dPr}}?*R?H1il{s0I7o(7B5zBo-#m$=m*r> zyOz-{)AF1r=OSuJT_*bf0J*e?NFTKE{NxaU1VZa*%p-N%_G;IE%Y=avSRp?=;RPYO zsqroeWFfh4{$K$iplj#E%209%*D|}r#5<8k)=BVq@So@F9bx1&lMGStMAsOl6#xp; z$LIOa7Dp@I_pkAq1orYi{{VgAe32oZE%W%oj5;}1HdBnU6*$y84VfKyc6M6mNx&s?tynnmG zm8k7G@#i9l1IUZRI$OB#Y-x;U1sJ{sdJHl)bx6B1VRqvyW1&SpQ6W*L#plnc% z_rEz|5+RFHFbBvuEAgP2^+j;gaqEVS6?fspHjwrQO=OJ=d}}%0Aq5G59M8PF8?u?q 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∈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 h^zSr8W*2T`Z^_ + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_campus_app.xml b/app/src/main/res/layout/activity_campus_app.xml new file mode 100644 index 0000000..dc45769 --- /dev/null +++ b/app/src/main/res/layout/activity_campus_app.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/app_bar_campus_app.xml b/app/src/main/res/layout/app_bar_campus_app.xml new file mode 100644 index 0000000..617c9a2 --- /dev/null +++ b/app/src/main/res/layout/app_bar_campus_app.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_campus_app.xml b/app/src/main/res/layout/content_campus_app.xml new file mode 100644 index 0000000..8101d31 --- /dev/null +++ b/app/src/main/res/layout/content_campus_app.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/content_popup.xml b/app/src/main/res/layout/content_popup.xml new file mode 100644 index 0000000..e89dc38 --- /dev/null +++ b/app/src/main/res/layout/content_popup.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_appsearch.xml b/app/src/main/res/layout/fragment_appsearch.xml new file mode 100644 index 0000000..db3775d --- /dev/null +++ b/app/src/main/res/layout/fragment_appsearch.xml @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_appsearch_list.xml b/app/src/main/res/layout/fragment_appsearch_list.xml new file mode 100644 index 0000000..ee1c433 --- /dev/null +++ b/app/src/main/res/layout/fragment_appsearch_list.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/layout/fragment_appsearch_listitem.xml b/app/src/main/res/layout/fragment_appsearch_listitem.xml new file mode 100644 index 0000000..f16fb83 --- /dev/null +++ b/app/src/main/res/layout/fragment_appsearch_listitem.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml new file mode 100644 index 0000000..d6f19a5 --- /dev/null +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_first_run.xml b/app/src/main/res/layout/fragment_first_run.xml new file mode 100644 index 0000000..8596249 --- /dev/null +++ b/app/src/main/res/layout/fragment_first_run.xml @@ -0,0 +1,20 @@ + + + + +