From e8f5ab07bde8537c847e4c6c5ceea597cde0f0f9 Mon Sep 17 00:00:00 2001 From: "e.bovendeur" Date: Sun, 14 Feb 2010 23:22:52 +0000 Subject: [PATCH] * Changed WBFS stuff to C++ classes * Fixed bug in http.c (where realloc *might* choose another address, thanks Dr. Clipper) * Added support to /wbfs/Game Title [GAMEID].wbfs files (thanks oggzee) * Fixed bug in cfg_cleanup when switching partitions * Added BGM class again (for playing background music, requested by dimok) * Added settings for background music again * Fixed bug in MEM2 class (returning an invalid handle when no memory could be allocated, thanks to dimok) * Updated DIP module to OpenDIP (report bugs with this one if you've found them, but report them here: http://github.com/spacemanspiff/odip-plugin) * Added initial code for cios 222 rev5 (THIS DOES NOT WORK YET! DON'T FILE BUGS ON THIS ONE!) * Added fatffs module by Hermes and Waninkoko (THIS DOES NOT WORK YET! DON'T FILE BUGS ON THIS ONE!) * Fixed bug in Settings, which resulted in a crash when the partition was changed. * Added caching for gamelist entries, so switching between different screens/sort options/display modes should be faster * Changed defines in ehc_module, in order to prevent clashes with new defines in rev5 --- HBC/META.XML | 4 +- Languages/czech.lang | 47 +- Languages/danish.lang | 47 +- Languages/dutch.lang | 68 +- Languages/english.lang | 41 +- Languages/finnish.lang | 47 +- Languages/french.lang | 80 +- Languages/german.lang | 68 +- Languages/hungarian.lang | 47 +- Languages/italian.lang | 47 +- Languages/japanese.lang | 77 +- Languages/korean.lang | 47 +- Languages/norwegian.lang | 47 +- Languages/polish.lang | 47 +- Languages/portuguese_br.lang | 47 +- Languages/portuguese_pt.lang | 68 +- Languages/russian.lang | 47 +- Languages/schinese.lang | 47 +- Languages/spanish.lang | 68 +- Languages/swedish.lang | 68 +- Languages/tchinese.lang | 68 +- Languages/thai.lang | 47 +- Languages/turkish.lang | 47 +- Makefile | 13 +- data/ehcmodule_frag.bin | Bin 70529 -> 0 bytes data/ehcmodule_frag_v4.bin | Bin 0 -> 68696 bytes data/ehcmodule_frag_v5.bin | Bin 0 -> 52120 bytes gui.pnproj | 2 +- gui.pnps | 2 +- source/homebrewboot/HomebrewBrowse.cpp | 3 +- source/libntfs/ntfs.h | 11 +- source/libwbfs/libwbfs.h | 5 + source/libwbfs/wiidisc.c | 37 +- source/libwiigui/gui_bgm.cpp | 250 +++ source/libwiigui/gui_bgm.h | 45 + source/main.cpp | 7 +- source/memory/mem2alloc.cpp | 3 + source/menu.cpp | 18 +- source/menu/menu_check.cpp | 4 +- source/menu/menu_disclist.cpp | 2 +- source/menu/menus.h | 3 +- source/mload/dip_plugin.c | 492 ++++-- source/mload/dip_plugin.h | 4 +- source/mload/fatffs_module.c | 2127 ++++++++++++++++++++++++ source/mload/fatffs_module.h | 3 + source/mload/fatffs_util.c | 291 ++++ source/mload/fatffs_util.h | 24 + source/mload/mload.c | 61 +- source/mload/mload.h | 2 - source/mload/mload_modules.c | 489 ++++++ source/mload/mload_modules.h | 30 + source/network/http.c | 2 +- source/prompts/filebrowser.cpp | 1 + source/prompts/gameinfo.cpp | 3 +- source/settings/Settings.cpp | 61 +- source/settings/SettingsPrompts.cpp | 324 +--- source/settings/SettingsPrompts.h | 2 +- source/settings/cfg.c | 17 +- source/settings/cfg.h | 6 +- source/sys.cpp | 6 +- source/usbloader/apploader.c | 2 +- source/usbloader/frag.c | 100 +- source/usbloader/getentries.cpp | 174 +- source/usbloader/getentries.h | 1 + source/usbloader/partition_usbloader.c | 8 +- source/usbloader/partition_usbloader.h | 24 +- source/usbloader/splits.c | 7 +- source/usbloader/splits.h | 14 +- source/usbloader/usbstorage.c | 23 +- source/usbloader/usbstorage.h | 1 - source/usbloader/wbfs.c | 645 ------- source/usbloader/wbfs.cpp | 260 +++ source/usbloader/wbfs.h | 28 +- source/usbloader/wbfs/wbfs_base.cpp | 156 ++ source/usbloader/wbfs/wbfs_base.h | 64 + source/usbloader/wbfs/wbfs_fat.cpp | 812 +++++++++ source/usbloader/wbfs/wbfs_fat.h | 64 + source/usbloader/wbfs/wbfs_ntfs.cpp | 28 + source/usbloader/wbfs/wbfs_ntfs.h | 17 + source/usbloader/wbfs/wbfs_rw.cpp | 159 ++ source/usbloader/wbfs/wbfs_wbfs.cpp | 204 +++ source/usbloader/wbfs/wbfs_wbfs.h | 31 + source/usbloader/wbfs_fat.h | 19 - 83 files changed, 6653 insertions(+), 1759 deletions(-) delete mode 100644 data/ehcmodule_frag.bin create mode 100644 data/ehcmodule_frag_v4.bin create mode 100644 data/ehcmodule_frag_v5.bin create mode 100644 source/libwiigui/gui_bgm.cpp create mode 100644 source/libwiigui/gui_bgm.h create mode 100644 source/mload/fatffs_module.c create mode 100644 source/mload/fatffs_module.h create mode 100644 source/mload/fatffs_util.c create mode 100644 source/mload/fatffs_util.h create mode 100644 source/mload/mload_modules.c create mode 100644 source/mload/mload_modules.h delete mode 100644 source/usbloader/wbfs.c create mode 100644 source/usbloader/wbfs.cpp create mode 100644 source/usbloader/wbfs/wbfs_base.cpp create mode 100644 source/usbloader/wbfs/wbfs_base.h create mode 100644 source/usbloader/wbfs/wbfs_fat.cpp create mode 100644 source/usbloader/wbfs/wbfs_fat.h create mode 100644 source/usbloader/wbfs/wbfs_ntfs.cpp create mode 100644 source/usbloader/wbfs/wbfs_ntfs.h create mode 100644 source/usbloader/wbfs/wbfs_rw.cpp create mode 100644 source/usbloader/wbfs/wbfs_wbfs.cpp create mode 100644 source/usbloader/wbfs/wbfs_wbfs.h delete mode 100644 source/usbloader/wbfs_fat.h diff --git a/HBC/META.XML b/HBC/META.XML index 70043d5e..7c5be6b1 100644 --- a/HBC/META.XML +++ b/HBC/META.XML @@ -2,8 +2,8 @@ USB Loader GX USB Loader GX Team - 1.0 r910 - 201002091456 + 1.0 r911 + 201002141632 Loads games from USB-devices USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times. The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller. diff --git a/Languages/czech.lang b/Languages/czech.lang index 0e1fda5b..938ef7e4 100644 --- a/Languages/czech.lang +++ b/Languages/czech.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: David Jelinek (djelinek@hotmail.com) \n" "Language-Team: r823 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n" @@ -188,9 +188,6 @@ msgstr "Zpet do Wii nabídky" msgid "Backgroundmusic" msgstr "Hudba na pozadí" -msgid "Backgroundmusic Path changed." -msgstr "Cesta pro hudbu na pozadí zmenena" - msgid "Big thanks to:" msgstr "Velké díky pro:" @@ -221,6 +218,9 @@ msgstr "Nelze smazat:" msgid "Cancel" msgstr "Zrušit" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Kanály" @@ -756,6 +756,12 @@ msgstr "Zamcení konzole" msgid "Locked" msgstr "Zamceno" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Zvuková smyčka" @@ -777,6 +783,9 @@ msgstr "Nejspíše má velikost, která není delitelná 4." msgid "Mount DVD drive" msgstr "Pripojit DVD mechaniku" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Hlasitost hudby" @@ -924,6 +933,18 @@ msgstr "Vyberte ze seznamu" msgid "Play Count" msgstr "Spušteno" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Cekejte prosím..." @@ -942,6 +963,9 @@ msgstr "Publikoval " msgid "Quick Boot" msgstr "Rychlé zavedení" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Nacítám WAD data... Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Prejmenovat hru na WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Vynulovat cítac spuštení" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Restartuji..." @@ -1014,9 +1044,6 @@ msgstr "Zárí" msgid "Set Search-Filter" msgstr "Nastavit vyhledávací filtr" -msgid "Set as backgroundmusic?" -msgstr "Nastavit jako hudbu na pozadí?" - msgid "Settings" msgstr "Nastavení" @@ -1348,6 +1375,12 @@ msgstr "z " msgid "seconds left" msgstr "sekund zbývá" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Cesta pro hudbu na pozadí zmenena" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Nastavit jako hudbu na pozadí?" + #~ msgid "The file is not a .wad" #~ msgstr "Soubor není typu WAD" diff --git a/Languages/danish.lang b/Languages/danish.lang index fd117815..7da1cdd0 100644 --- a/Languages/danish.lang +++ b/Languages/danish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: dorf[dk]\n" "Language-Team: dorf[dk]\n" @@ -188,9 +188,6 @@ msgstr "Tilbage til HBC" msgid "Backgroundmusic" msgstr "Baggrundsmusik" -msgid "Backgroundmusic Path changed." -msgstr "Sti til baggrundsmusik ændret" - msgid "Big thanks to:" msgstr "En stor tak til:" @@ -221,6 +218,9 @@ msgstr "Kan ikke slettes:" msgid "Cancel" msgstr "Annullér" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Kanaler" @@ -756,6 +756,12 @@ msgstr "Lås konsol" msgid "Locked" msgstr "Låst" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Afspil lyd i løkke" @@ -777,6 +783,9 @@ msgstr "Sandsynligvis har det dimensioner, der ikke er delelige med fire." msgid "Mount DVD drive" msgstr "Mount DVD-drev" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Lydstyrke" @@ -924,6 +933,18 @@ msgstr "Vælg fra en liste" msgid "Play Count" msgstr "Spiltæller" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Vent venligst..." @@ -942,6 +963,9 @@ msgstr "Udgivet af" msgid "Quick Boot" msgstr "Hurtig opstart" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Læser WAD-data... Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Omdøb spil på WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Nulstil spiltæller" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Genstarter..." @@ -1014,9 +1044,6 @@ msgstr "" msgid "Set Search-Filter" msgstr "Søgefilter" -msgid "Set as backgroundmusic?" -msgstr "Indstil som baggrundsmusik?" - msgid "Settings" msgstr "Indstillinger" @@ -1348,6 +1375,12 @@ msgstr "af" msgid "seconds left" msgstr "sekunder tilbage" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Sti til baggrundsmusik ændret" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Indstil som baggrundsmusik?" + #~ msgid "The file is not a .wad" #~ msgstr "Filen er ikke en .WAD" diff --git a/Languages/dutch.lang b/Languages/dutch.lang index d446850b..c1ca8611 100644 --- a/Languages/dutch.lang +++ b/Languages/dutch.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:22+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: glowy\n" "Language-Team: tj_cool, glowy\n" @@ -188,9 +188,6 @@ msgstr "Terug naar Wii Menu" msgid "Backgroundmusic" msgstr "Achtergrondmuziek" -msgid "Backgroundmusic Path changed." -msgstr "Locatie achtergrondmuziek gewijzigd." - msgid "Big thanks to:" msgstr "Grote dank aan:" @@ -221,6 +218,9 @@ msgstr "Kan niet verwijderen:" msgid "Cancel" msgstr "Annuleren" +msgid "Change Play Path" +msgstr "Verander afspeel locatie" + msgid "Channels" msgstr "Kanalen" @@ -756,6 +756,12 @@ msgstr "Console vergrendelen" msgid "Locked" msgstr "Vergrendeld" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Geluid herhalen" @@ -777,6 +783,9 @@ msgstr "Waarschijnlijk zijn de afmetingen niet deelbaar door 4." msgid "Mount DVD drive" msgstr "DVD Laden" +msgid "Music Loop Mode" +msgstr "Muziek Herhaal Mode" + msgid "Music Volume" msgstr "Muziekvolume" @@ -924,6 +933,18 @@ msgstr "Kiezen van lijst" msgid "Play Count" msgstr "Gespeeld" +msgid "Play Next" +msgstr "Speel Volgende" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "Speel Vorige" + +msgid "Playing Music:" +msgstr "Speelt nu:" + msgid "Please wait..." msgstr "Even geduld..." @@ -942,6 +963,9 @@ msgstr "Uitgegeven door" msgid "Quick Boot" msgstr "Snelle start" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "WAD data lezen... Ok!" @@ -960,9 +984,15 @@ msgstr "Verwijder update" msgid "Rename Game on WBFS" msgstr "Spel hernoemen op WBFS" +msgid "Reset BG Music" +msgstr "Reset achtergrond muziek" + msgid "Reset Playcounter" msgstr "Speeltellers resetten" +msgid "Reset to standard BGM?" +msgstr "Reset naar standaard achtergrond muziek?" + msgid "Restarting..." msgstr "Herstarten..." @@ -1014,9 +1044,6 @@ msgstr "Sep" msgid "Set Search-Filter" msgstr "Zoekfilter instellen" -msgid "Set as backgroundmusic?" -msgstr "Instellen als achtergrondmuziek?" - msgid "Settings" msgstr "Instellingen" @@ -1348,6 +1375,12 @@ msgstr "van" msgid "seconds left" msgstr "seconden over" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Locatie achtergrondmuziek gewijzigd." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Instellen als achtergrondmuziek?" + #~ msgid "The file is not a .wad" #~ msgstr "Dit is geen .wad bestand" @@ -1357,30 +1390,9 @@ msgstr "seconden over" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "Je gebruikt het NTFS bestandssysteem. Door mogelijke schrijffouten naar een NTFS partitie, is een spel installeren niet mogelijk." -#~ msgid "Change Play Path" -#~ msgstr "Verander afspeel locatie" - -#~ msgid "Music Loop Mode" -#~ msgstr "Muziek Herhaal Mode" - #~ msgid "Partition Format Menu" #~ msgstr "Partitie Formatteer Menu" -#~ msgid "Play Next" -#~ msgstr "Speel Volgende" - -#~ msgid "Play Previous" -#~ msgstr "Speel Vorige" - -#~ msgid "Playing Music:" -#~ msgstr "Speelt nu:" - -#~ msgid "Reset BG Music" -#~ msgstr "Reset achtergrond muziek" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "Reset naar standaard achtergrond muziek?" - #~ msgid "Unlock the app first." #~ msgstr "Geef app eerst vrij." diff --git a/Languages/english.lang b/Languages/english.lang index 88568640..7cd2e50c 100644 --- a/Languages/english.lang +++ b/Languages/english.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -188,9 +188,6 @@ msgstr "" msgid "Backgroundmusic" msgstr "" -msgid "Backgroundmusic Path changed." -msgstr "" - msgid "Big thanks to:" msgstr "" @@ -221,6 +218,9 @@ msgstr "" msgid "Cancel" msgstr "" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "" @@ -756,6 +756,12 @@ msgstr "" msgid "Locked" msgstr "" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "" @@ -777,6 +783,9 @@ msgstr "" msgid "Mount DVD drive" msgstr "" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "" @@ -924,6 +933,18 @@ msgstr "" msgid "Play Count" msgstr "" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "" @@ -942,6 +963,9 @@ msgstr "" msgid "Quick Boot" msgstr "" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "" @@ -1014,9 +1044,6 @@ msgstr "" msgid "Set Search-Filter" msgstr "" -msgid "Set as backgroundmusic?" -msgstr "" - msgid "Settings" msgstr "" diff --git a/Languages/finnish.lang b/Languages/finnish.lang index 63063559..a67382c1 100644 --- a/Languages/finnish.lang +++ b/Languages/finnish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: c64rmx\n" "Language-Team: \n" @@ -188,9 +188,6 @@ msgstr "Takaisin Wii Menuun" msgid "Backgroundmusic" msgstr "Taustamusiikki" -msgid "Backgroundmusic Path changed." -msgstr "Taustamusiikin polku muutettu" - msgid "Big thanks to:" msgstr "Isot kiitokset:" @@ -221,6 +218,9 @@ msgstr "Ei voida poistaa:" msgid "Cancel" msgstr "Peruuta" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "" @@ -756,6 +756,12 @@ msgstr "Lukitse konsoli" msgid "Locked" msgstr "Lukittu" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "" @@ -777,6 +783,9 @@ msgstr "Todennäköisesti sisältää ulottuvuuksia jotka eivät ole jaollisia n msgid "Mount DVD drive" msgstr "" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Voimakkuus" @@ -924,6 +933,18 @@ msgstr "Valitse listasta" msgid "Play Count" msgstr "Pelauksen määrä" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "" @@ -942,6 +963,9 @@ msgstr "Julkaisu:" msgid "Quick Boot" msgstr "" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Luetaan WAD:ia... Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Uudelleennimeä peli" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Resetoi pelauksen määrä" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Boottaa..." @@ -1014,9 +1044,6 @@ msgstr "syys" msgid "Set Search-Filter" msgstr "" -msgid "Set as backgroundmusic?" -msgstr "Aseta taustamusiikiksi?" - msgid "Settings" msgstr "Asetukset" @@ -1348,6 +1375,12 @@ msgstr "josta" msgid "seconds left" msgstr "sekuntia jäljellä" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Taustamusiikin polku muutettu" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Aseta taustamusiikiksi?" + #~ msgid "The file is not a .wad" #~ msgstr "Tiedosto ei ole .wad" diff --git a/Languages/french.lang b/Languages/french.lang index 92c8def3..648e2714 100644 --- a/Languages/french.lang +++ b/Languages/french.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Kin8\n" "Language-Team: Badablek, Amour, ikya & Kin8\n" @@ -188,9 +188,6 @@ msgstr "Retour Menu Wii" msgid "Backgroundmusic" msgstr "Fond sonore" -msgid "Backgroundmusic Path changed." -msgstr "Dossier fond sonore modifié." - msgid "Big thanks to:" msgstr "Grand merci à:" @@ -221,6 +218,9 @@ msgstr "Impossible de supprimer:" msgid "Cancel" msgstr "Annuler" +msgid "Change Play Path" +msgstr "Changer Dossier" + msgid "Channels" msgstr "Chaînes" @@ -756,6 +756,12 @@ msgstr "Verrouiller la console" msgid "Locked" msgstr "Clic pour déverrouiller" +msgid "Loop Directory" +msgstr "Répéter Dossier" + +msgid "Loop Music" +msgstr "Répéter Musique" + msgid "Loop Sound" msgstr "Son en boucle" @@ -777,6 +783,9 @@ msgstr "Il est fort probable que les dimensions ne soient pas des multiples de 4 msgid "Mount DVD drive" msgstr "Lancer DVD" +msgid "Music Loop Mode" +msgstr "Mode Boucle Musique" + msgid "Music Volume" msgstr "Volume Musique" @@ -924,6 +933,18 @@ msgstr "Sélectionner" msgid "Play Count" msgstr "Utilisation" +msgid "Play Next" +msgstr "Jouer Suiv." + +msgid "Play Once" +msgstr "Jouer 1 fois" + +msgid "Play Previous" +msgstr "Jouer Précéd." + +msgid "Playing Music:" +msgstr "Musique Actuelle:" + msgid "Please wait..." msgstr "Veuillez patienter..." @@ -942,6 +963,9 @@ msgstr "Publié par" msgid "Quick Boot" msgstr "Démarrage rapide" +msgid "Random Directory Music" +msgstr "Aléatoire" + msgid "Reading WAD data... Ok!" msgstr "Lecture données WAD... OK!" @@ -960,9 +984,15 @@ msgstr "Supprimer Mise à Jour" msgid "Rename Game on WBFS" msgstr "Renommer un jeu" +msgid "Reset BG Music" +msgstr "Reset" + msgid "Reset Playcounter" msgstr "Reset Utilisation du Jeu" +msgid "Reset to standard BGM?" +msgstr "Restaurer fond sonore standard ?" + msgid "Restarting..." msgstr "Redémarrage..." @@ -1014,9 +1044,6 @@ msgstr "" msgid "Set Search-Filter" msgstr "Filtre de Recherche" -msgid "Set as backgroundmusic?" -msgstr "Utiliser comme fond sonore ?" - msgid "Settings" msgstr "Paramètres" @@ -1348,48 +1375,21 @@ msgstr "sur" msgid "seconds left" msgstr "secondes restantes" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Dossier fond sonore modifié." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Utiliser comme fond sonore ?" + #~ msgid "Install not possible" #~ msgstr "Installation impossible" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "Le système de fichier NTFS est utilisé. En raison à de possibles erreurs d'écriture sur une partition de NTFS, l'installation d'un jeu est impossible." -#~ msgid "Change Play Path" -#~ msgstr "Changer Dossier" - -#~ msgid "Loop Directory" -#~ msgstr "Répéter Dossier" - -#~ msgid "Loop Music" -#~ msgstr "Répéter Musique" - -#~ msgid "Music Loop Mode" -#~ msgstr "Mode Boucle Musique" - #~ msgid "Partition Format Menu" #~ msgstr "Menu Formatage Partition" -#~ msgid "Play Next" -#~ msgstr "Jouer Suiv." - -#~ msgid "Play Once" -#~ msgstr "Jouer 1 fois" - -#~ msgid "Play Previous" -#~ msgstr "Jouer Précéd." - -#~ msgid "Playing Music:" -#~ msgstr "Musique Actuelle:" - -#~ msgid "Random Directory Music" -#~ msgstr "Aléatoire" - -#~ msgid "Reset BG Music" -#~ msgstr "Reset" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "Restaurer fond sonore standard ?" - #~ msgid "Unlock the app first." #~ msgstr "Déverrouillage nécessaire." diff --git a/Languages/german.lang b/Languages/german.lang index 053866db..a2a38e3b 100644 --- a/Languages/german.lang +++ b/Languages/german.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-09 16:02+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: ZEN.13\n" "Language-Team: Snoozer, wishmasterf, Bertilax, ZEN.13\n" @@ -188,9 +188,6 @@ msgstr "Wii Menü" msgid "Backgroundmusic" msgstr "Hintergrundmusik" -msgid "Backgroundmusic Path changed." -msgstr "Pfad geändert" - msgid "Big thanks to:" msgstr "Großen Dank an:" @@ -221,6 +218,9 @@ msgstr "Löschen fehlgeschlagen:" msgid "Cancel" msgstr "Abbrechen" +msgid "Change Play Path" +msgstr "Pfad ändern" + msgid "Channels" msgstr "Kanäle" @@ -756,6 +756,12 @@ msgstr "Konsole sperren" msgid "Locked" msgstr "gesperrt" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Schleife" @@ -777,6 +783,9 @@ msgstr "Höchstwahrscheinlich sind Breite und Höhe keine Vielfachen von 4." msgid "Mount DVD drive" msgstr "Spiel starten" +msgid "Music Loop Mode" +msgstr "Wiederholungsmodus" + msgid "Music Volume" msgstr "Musik Lautstärke" @@ -924,6 +933,18 @@ msgstr "Wähle aus Liste" msgid "Play Count" msgstr "Spielzähler" +msgid "Play Next" +msgstr "Nächster Titel" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "Vorheriger Titel" + +msgid "Playing Music:" +msgstr "Aktuelle Musik:" + msgid "Please wait..." msgstr "Bitte warten..." @@ -942,6 +963,9 @@ msgstr "Veröffentlicht von" msgid "Quick Boot" msgstr "Schnelles Laden" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Lese WAD Daten... OK!" @@ -960,9 +984,15 @@ msgstr "Update entfernen" msgid "Rename Game on WBFS" msgstr "Spiel umbenennen" +msgid "Reset BG Music" +msgstr "Musik zurücksetzen" + msgid "Reset Playcounter" msgstr "Spielzähler zurücksetzen" +msgid "Reset to standard BGM?" +msgstr "Auf Standard-Hintergrundmusik zurücksetzen?" + msgid "Restarting..." msgstr "Damit die neue Version benutzt werden kann, muss der Loader neu gestartet werden." @@ -1014,9 +1044,6 @@ msgstr "September" msgid "Set Search-Filter" msgstr "Suche" -msgid "Set as backgroundmusic?" -msgstr "Als Hintergrundmusik verwenden?" - msgid "Settings" msgstr "Einstellungen" @@ -1348,6 +1375,12 @@ msgstr "von" msgid "seconds left" msgstr "Sekunden verbleiben" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Pfad geändert" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Als Hintergrundmusik verwenden?" + #~ msgid "The file is not a .wad" #~ msgstr "Die Datei ist keine .wad" @@ -1357,30 +1390,9 @@ msgstr "Sekunden verbleiben" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "Du benutzt das NTFS Dateisystem. Wegen möglicher Schreibfehler auf einer NTFS Partition, ist das Installieren eines Spiels nicht möglich." -#~ msgid "Change Play Path" -#~ msgstr "Pfad ändern" - -#~ msgid "Music Loop Mode" -#~ msgstr "Wiederholungsmodus" - #~ msgid "Partition Format Menu" #~ msgstr "Partitionen Formatierungs-Menü" -#~ msgid "Play Next" -#~ msgstr "Nächster Titel" - -#~ msgid "Play Previous" -#~ msgstr "Vorheriger Titel" - -#~ msgid "Playing Music:" -#~ msgstr "Aktuelle Musik:" - -#~ msgid "Reset BG Music" -#~ msgstr "Musik zurücksetzen" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "Auf Standard-Hintergrundmusik zurücksetzen?" - #~ msgid "Unlock the app first." #~ msgstr "Entsperre zuerst den Loader." diff --git a/Languages/hungarian.lang b/Languages/hungarian.lang index 4a936cac..2ec19b76 100644 --- a/Languages/hungarian.lang +++ b/Languages/hungarian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-12-29 11:05+0100\n" "Last-Translator: Springdale\n" "Language-Team: Tusk, Springdale\n" @@ -188,9 +188,6 @@ msgstr "Visszatérés a Wii Menübe" msgid "Backgroundmusic" msgstr "Háttérzene" -msgid "Backgroundmusic Path changed." -msgstr "Háttérzene útvonala megváltozott." - msgid "Big thanks to:" msgstr "Köszönet:" @@ -221,6 +218,9 @@ msgstr "Nem törölhetõ" msgid "Cancel" msgstr "Mégse" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Csatornák" @@ -756,6 +756,12 @@ msgstr "Konzol Lezárása" msgid "Locked" msgstr "Lezárva" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Folyamatos hang" @@ -777,6 +783,9 @@ msgstr "Vélhetõen méretei nem oszhatók 4-gyel." msgid "Mount DVD drive" msgstr "DVD meghajtó felcsatolása" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Zene Hangerõ" @@ -924,6 +933,18 @@ msgstr "Válassz a listából" msgid "Play Count" msgstr "Indítások" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Kérlek várj..." @@ -942,6 +963,9 @@ msgstr "Kiadta" msgid "Quick Boot" msgstr "Gyors Boot" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "WAD adat olvasás... Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "WBFS játék átnevezése" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Elindítások nullázása" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Újraindítás..." @@ -1014,9 +1044,6 @@ msgstr "Szep" msgid "Set Search-Filter" msgstr "Keresés" -msgid "Set as backgroundmusic?" -msgstr "Beállítod háttérzenének?" - msgid "Settings" msgstr "Beállítások" @@ -1348,6 +1375,12 @@ msgstr "./" msgid "seconds left" msgstr "hátralévõ másodperc" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Háttérzene útvonala megváltozott." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Beállítod háttérzenének?" + #~ msgid "The file is not a .wad" #~ msgstr "A fájl nem .wad" diff --git a/Languages/italian.lang b/Languages/italian.lang index a3a7f419..d2bb6703 100644 --- a/Languages/italian.lang +++ b/Languages/italian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Cambo \n" "Language-Team: FoxeJoe, Cambo\n" @@ -188,9 +188,6 @@ msgstr "Torna al Menu Wii" msgid "Backgroundmusic" msgstr "Musica Sottofondo" -msgid "Backgroundmusic Path changed." -msgstr "Percorso Musica modificato" - msgid "Big thanks to:" msgstr "Grazie mille a:" @@ -221,6 +218,9 @@ msgstr "Impossibile eliminare:" msgid "Cancel" msgstr "Annulla" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Canali" @@ -756,6 +756,12 @@ msgstr "Blocco Console" msgid "Locked" msgstr "Bloccato" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Suono Ripetuto" @@ -777,6 +783,9 @@ msgstr "Molto probabilmente le dimensioni non sono divisibili per 4." msgid "Mount DVD drive" msgstr "Avvia DVD" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Volume" @@ -924,6 +933,18 @@ msgstr "Seleziona da un elenco" msgid "Play Count" msgstr "Giocati" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Attendere prego..." @@ -942,6 +963,9 @@ msgstr "Pubblicato da" msgid "Quick Boot" msgstr "Avvio Veloce" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Sto leggendo i dati del WAD... Ok!" @@ -960,9 +984,15 @@ msgstr "Rimuovi aggiornamento" msgid "Rename Game on WBFS" msgstr "Rinomina Gioco su WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Azzera contatore" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Premere OK per riavviare..." @@ -1014,9 +1044,6 @@ msgstr "settembre" msgid "Set Search-Filter" msgstr "Cerca Gioco" -msgid "Set as backgroundmusic?" -msgstr "Imposto come Musica Sottofondo?" - msgid "Settings" msgstr "Impostazioni" @@ -1348,6 +1375,12 @@ msgstr "di" msgid "seconds left" msgstr "secondi mancanti" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Percorso Musica modificato" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Imposto come Musica Sottofondo?" + #~ msgid "The file is not a .wad" #~ msgstr "Non è un file .wad" diff --git a/Languages/japanese.lang b/Languages/japanese.lang index 63bb0ba4..9c75bfd3 100644 --- a/Languages/japanese.lang +++ b/Languages/japanese.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: hosigumayuugi\n" "Language-Team: hosigumayuugi\n" @@ -188,9 +188,6 @@ msgstr "Wiiメニューへ" msgid "Backgroundmusic" msgstr "BGM" -msgid "Backgroundmusic Path changed." -msgstr "BGMのパスを変更しました" - msgid "Big thanks to:" msgstr "協力:" @@ -221,6 +218,9 @@ msgstr "削除できません" msgid "Cancel" msgstr "キャンセル" +msgid "Change Play Path" +msgstr "プレイパスを変更" + msgid "Channels" msgstr "チャンネル" @@ -756,6 +756,12 @@ msgstr "GXをロック" msgid "Locked" msgstr "ロックされています" +msgid "Loop Directory" +msgstr "フォルダ内でループ" + +msgid "Loop Music" +msgstr "ループさせる" + msgid "Loop Sound" msgstr "ループさせる" @@ -777,6 +783,9 @@ msgstr "4で割り切れない寸法があります" msgid "Mount DVD drive" msgstr "DVDを起動" +msgid "Music Loop Mode" +msgstr "ループ機能" + msgid "Music Volume" msgstr "BGMの音量" @@ -924,6 +933,18 @@ msgstr "リストから選択" msgid "Play Count" msgstr "プレイ回数" +msgid "Play Next" +msgstr "次へ" + +msgid "Play Once" +msgstr "一度だけ再生" + +msgid "Play Previous" +msgstr "前へ" + +msgid "Playing Music:" +msgstr "再生中" + msgid "Please wait..." msgstr "しばらくお待ちください" @@ -942,6 +963,9 @@ msgstr "発売元:" msgid "Quick Boot" msgstr "ワンボタン起動" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "WADデータの読み込み...成功!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "WBFS内のゲーム名を変更" +msgid "Reset BG Music" +msgstr "BGMをリセット" + msgid "Reset Playcounter" msgstr "プレイ回数をリセット" +msgid "Reset to standard BGM?" +msgstr "BGMを初期状態に戻しますか?" + msgid "Restarting..." msgstr "再起動します" @@ -1014,9 +1044,6 @@ msgstr "9月" msgid "Set Search-Filter" msgstr "検索" -msgid "Set as backgroundmusic?" -msgstr "BGMに設定しますか?" - msgid "Settings" msgstr "設定" @@ -1348,6 +1375,12 @@ msgstr "中" msgid "seconds left" msgstr "秒で完了" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "BGMのパスを変更しました" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "BGMに設定しますか?" + #~ msgid "The file is not a .wad" #~ msgstr "WADファイルではありません" @@ -1357,39 +1390,9 @@ msgstr "秒で完了" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "NTFS領域にインストール中にエラーが発生するとインストールに失敗します" -#~ msgid "Change Play Path" -#~ msgstr "プレイパスを変更" - -#~ msgid "Loop Directory" -#~ msgstr "フォルダ内でループ" - -#~ msgid "Loop Music" -#~ msgstr "ループさせる" - -#~ msgid "Music Loop Mode" -#~ msgstr "ループ機能" - #~ msgid "Partition Format Menu" #~ msgstr "初期化メニュー" -#~ msgid "Play Next" -#~ msgstr "次へ" - -#~ msgid "Play Once" -#~ msgstr "一度だけ再生" - -#~ msgid "Play Previous" -#~ msgstr "前へ" - -#~ msgid "Playing Music:" -#~ msgstr "再生中" - -#~ msgid "Reset BG Music" -#~ msgstr "BGMをリセット" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "BGMを初期状態に戻しますか?" - #~ msgid "Unlock the app first." #~ msgstr "先にロックを解除してください" diff --git a/Languages/korean.lang b/Languages/korean.lang index 1434b5a7..9afea14c 100644 --- a/Languages/korean.lang +++ b/Languages/korean.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: nextos@korea.com\n" "Language-Team: \n" @@ -188,9 +188,6 @@ msgstr "Wii 메뉴로 놀아가기" msgid "Backgroundmusic" msgstr "배경음악" -msgid "Backgroundmusic Path changed." -msgstr "배경음악 경로 변경됨." - msgid "Big thanks to:" msgstr "감사 :" @@ -221,6 +218,9 @@ msgstr "삭제할 수 없습니다:" msgid "Cancel" msgstr "취소" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "" @@ -756,6 +756,12 @@ msgstr "콘솔 잠금" msgid "Locked" msgstr "잠김" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "" @@ -777,6 +783,9 @@ msgstr "대부분 이미지는 4로 나누어져야 되요." msgid "Mount DVD drive" msgstr "" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "음량" @@ -924,6 +933,18 @@ msgstr "리스트로 부터 고르기" msgid "Play Count" msgstr "실행 횟수" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "" @@ -942,6 +963,9 @@ msgstr "출판자" msgid "Quick Boot" msgstr "게임 바로실행" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "WAD 데이터 읽기... 성공!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "WBFS에서 게임 이름 변경" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "실행횟수 리셋" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "재시작..." @@ -1014,9 +1044,6 @@ msgstr "9월" msgid "Set Search-Filter" msgstr "" -msgid "Set as backgroundmusic?" -msgstr "벼경음악 설정?" - msgid "Settings" msgstr "설정" @@ -1348,6 +1375,12 @@ msgstr "중" msgid "seconds left" msgstr "초 남았습니다" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "배경음악 경로 변경됨." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "벼경음악 설정?" + #~ msgid "The file is not a .wad" #~ msgstr "화일이 .wad 아님" diff --git a/Languages/norwegian.lang b/Languages/norwegian.lang index 67663bce..45f0803d 100644 --- a/Languages/norwegian.lang +++ b/Languages/norwegian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: raschi\n" "Language-Team: raschi\n" @@ -188,9 +188,6 @@ msgstr "Wii meny" msgid "Backgroundmusic" msgstr "Bakgrunnsmusikk" -msgid "Backgroundmusic Path changed." -msgstr "Bakgrunnsmusikk sti endret" - msgid "Big thanks to:" msgstr "Stor takk til:" @@ -221,6 +218,9 @@ msgstr "Kan ikke slette:" msgid "Cancel" msgstr "Avbryt" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Kanaler" @@ -756,6 +756,12 @@ msgstr "Lås konsoll" msgid "Locked" msgstr "Låst" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "" @@ -777,6 +783,9 @@ msgstr "Sannsynligvis har bildet dimensjoner som ikke kan deles med 4." msgid "Mount DVD drive" msgstr "Last DVD stasjon" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Musikk volum" @@ -924,6 +933,18 @@ msgstr "Velg fra liste" msgid "Play Count" msgstr "Ganger spilt" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Vennligst vent..." @@ -942,6 +963,9 @@ msgstr "Publisert av" msgid "Quick Boot" msgstr "Hurtig start" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Leser WAD data... OK!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Gi nytt navn til spill på WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Nullstill teller" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Starter på nytt..." @@ -1014,9 +1044,6 @@ msgstr "Sep" msgid "Set Search-Filter" msgstr "Angi søkefilter" -msgid "Set as backgroundmusic?" -msgstr "Bruk som bakgrunnsmusikk?" - msgid "Settings" msgstr "Innstillinger" @@ -1348,6 +1375,12 @@ msgstr "av" msgid "seconds left" msgstr "sekunder gjenstår" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Bakgrunnsmusikk sti endret" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Bruk som bakgrunnsmusikk?" + #~ msgid "The file is not a .wad" #~ msgstr "Denne filen er ikke en .wad" diff --git a/Languages/polish.lang b/Languages/polish.lang index d8f684ef..0efeee15 100644 --- a/Languages/polish.lang +++ b/Languages/polish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: ziom666 (zadania_prog@vp.pl)\n" "Language-Team: \n" @@ -188,9 +188,6 @@ msgstr "Powrit do Wii Menu" msgid "Backgroundmusic" msgstr "Muzyka w tle" -msgid "Backgroundmusic Path changed." -msgstr "Sciezka do muzyki w tle zmieniona" - msgid "Big thanks to:" msgstr "Podziekowania dla" @@ -221,6 +218,9 @@ msgstr "Nie mozna usunac" msgid "Cancel" msgstr "Anuluj" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Kanaly" @@ -756,6 +756,12 @@ msgstr "Zablokuj konsole" msgid "Locked" msgstr "Zablokowano" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Zapetl dzwieki" @@ -777,6 +783,9 @@ msgstr "Prawdopodobnie rozdzielczosc nie jest podzielna przez 4" msgid "Mount DVD drive" msgstr "Uruchom naped DVD" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Poziom glosnosci" @@ -924,6 +933,18 @@ msgstr "Wybierz z listy" msgid "Play Count" msgstr "Licznik" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Prosze czekac..." @@ -942,6 +963,9 @@ msgstr "" msgid "Quick Boot" msgstr "Szybkie ladowanie" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Odczyt danych WAD...Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Zmien tytul gry na WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Zrestartuj licznik" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Restartowanie..." @@ -1014,9 +1044,6 @@ msgstr "Wrzesien" msgid "Set Search-Filter" msgstr "Ustaw filtr wyszukiwania" -msgid "Set as backgroundmusic?" -msgstr "Ustawic jako muzyke w tle?" - msgid "Settings" msgstr "Ustawienia" @@ -1348,6 +1375,12 @@ msgstr "z" msgid "seconds left" msgstr "sekund pozostalo" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Sciezka do muzyki w tle zmieniona" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Ustawic jako muzyke w tle?" + #~ msgid "The file is not a .wad" #~ msgstr "To nie plik .wad" diff --git a/Languages/portuguese_br.lang b/Languages/portuguese_br.lang index c957289a..95afa7a6 100644 --- a/Languages/portuguese_br.lang +++ b/Languages/portuguese_br.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-23 18:52+0200\n" "Last-Translator: boto12\n" "Language-Team: boto12\n" @@ -188,9 +188,6 @@ msgstr "Menu do Wii" msgid "Backgroundmusic" msgstr "Música de fundo" -msgid "Backgroundmusic Path changed." -msgstr "Pasta Música Fundo modificada" - msgid "Big thanks to:" msgstr "Agradecimentos:" @@ -221,6 +218,9 @@ msgstr "Não foi possível apagar:" msgid "Cancel" msgstr "Cancelar" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Canais" @@ -756,6 +756,12 @@ msgstr "Bloquear Configurações" msgid "Locked" msgstr "Bloqueado" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "" @@ -777,6 +783,9 @@ msgstr "Provável que o tamanho não seja divisível por 4." msgid "Mount DVD drive" msgstr "Carregar leitor DVD" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Volume da Música" @@ -924,6 +933,18 @@ msgstr "Escolher da lista" msgid "Play Count" msgstr "Vezes jogadas" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Por favor aguarde..." @@ -942,6 +963,9 @@ msgstr "Publicado por" msgid "Quick Boot" msgstr "Inicialização Rápida" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Lendo dados do WAD... Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Alterar nome do jogo na partição WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Limpar Contagem" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "O Wii irá reiniciar" @@ -1014,9 +1044,6 @@ msgstr "Set" msgid "Set Search-Filter" msgstr "Usar filtro de busca" -msgid "Set as backgroundmusic?" -msgstr "Definir como música de fundo?" - msgid "Settings" msgstr "Configurações" @@ -1348,6 +1375,12 @@ msgstr "de" msgid "seconds left" msgstr "segundos restantes" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Pasta Música Fundo modificada" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Definir como música de fundo?" + #~ msgid "The file is not a .wad" #~ msgstr "O arquivo não é um .wad" diff --git a/Languages/portuguese_pt.lang b/Languages/portuguese_pt.lang index 97f573d8..387d6bb5 100644 --- a/Languages/portuguese_pt.lang +++ b/Languages/portuguese_pt.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2010-02-01 18:10-0000\n" "Last-Translator: Sky8000\n" "Language-Team: Sky8000 \n" @@ -188,9 +188,6 @@ msgstr "Menu da Wii" msgid "Backgroundmusic" msgstr "Música de fundo" -msgid "Backgroundmusic Path changed." -msgstr "Pasta Música Fundo alterada" - msgid "Big thanks to:" msgstr "Agradecimentos:" @@ -221,6 +218,9 @@ msgstr "Não foi possível apagar:" msgid "Cancel" msgstr "Cancelar" +msgid "Change Play Path" +msgstr "Alterar Pasta de Músicas" + msgid "Channels" msgstr "Canais" @@ -756,6 +756,12 @@ msgstr "Bloquear Configurações" msgid "Locked" msgstr "Bloqueado" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Repetir Sons" @@ -777,6 +783,9 @@ msgstr "O mais provável é que o tamanho não seja divisível por 4." msgid "Mount DVD drive" msgstr "Montar Unidade de DVD" +msgid "Music Loop Mode" +msgstr "Modo de Repetição" + msgid "Music Volume" msgstr "Volume Música" @@ -924,6 +933,18 @@ msgstr "Escolher da lista" msgid "Play Count" msgstr "Vezes jogadas" +msgid "Play Next" +msgstr "Próxima" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "Anterior" + +msgid "Playing Music:" +msgstr "Reproduzindo:" + msgid "Please wait..." msgstr "Por favor aguarde..." @@ -942,6 +963,9 @@ msgstr "Publicado por" msgid "Quick Boot" msgstr "Arranque Rápido" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Lendo dados do WAD... Ok!" @@ -960,9 +984,15 @@ msgstr "Remover actualização" msgid "Rename Game on WBFS" msgstr "Alterar nome do jogo (WBFS)" +msgid "Reset BG Music" +msgstr "Repor Música de Fundo" + msgid "Reset Playcounter" msgstr "Limpar Contagem" +msgid "Reset to standard BGM?" +msgstr "Repor Musica de Fundo predefinida?" + msgid "Restarting..." msgstr "A Wii irá reiniciar" @@ -1014,9 +1044,6 @@ msgstr "Set" msgid "Set Search-Filter" msgstr "Filtro de pesquisa" -msgid "Set as backgroundmusic?" -msgstr "Definir como música de fundo?" - msgid "Settings" msgstr "Configurações" @@ -1348,6 +1375,12 @@ msgstr "de" msgid "seconds left" msgstr "segundos restantes" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Pasta Música Fundo alterada" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Definir como música de fundo?" + #~ msgid "The file is not a .wad" #~ msgstr "O ficheiro não é um .wad" @@ -1357,30 +1390,9 @@ msgstr "segundos restantes" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "Está a utilizar um sistema de ficheiros NTFS. Devido à possibilidade de ocorrerem erros na gravação não será possível instalar jogos." -#~ msgid "Change Play Path" -#~ msgstr "Alterar Pasta de Músicas" - -#~ msgid "Music Loop Mode" -#~ msgstr "Modo de Repetição" - #~ msgid "Partition Format Menu" #~ msgstr "Menu de Formatação de Partição" -#~ msgid "Play Next" -#~ msgstr "Próxima" - -#~ msgid "Play Previous" -#~ msgstr "Anterior" - -#~ msgid "Playing Music:" -#~ msgstr "Reproduzindo:" - -#~ msgid "Reset BG Music" -#~ msgstr "Repor Música de Fundo" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "Repor Musica de Fundo predefinida?" - #~ msgid "Unlock the app first." #~ msgstr "Desbloquear aplicação primeiro." diff --git a/Languages/russian.lang b/Languages/russian.lang index e9fc0aaf..ae1ad96b 100644 --- a/Languages/russian.lang +++ b/Languages/russian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: nikolai_ca\n" "Language-Team: Kir, alendit, nikolai_ca\n" @@ -188,9 +188,6 @@ msgstr "Вернуться в меню Wii" msgid "Backgroundmusic" msgstr "Фоновая музыка" -msgid "Backgroundmusic Path changed." -msgstr "Путь к фоновой музыке изменен." - msgid "Big thanks to:" msgstr "Большое спасибо:" @@ -221,6 +218,9 @@ msgstr "Невозможно удалить:" msgid "Cancel" msgstr "Отмена" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Каналы" @@ -756,6 +756,12 @@ msgstr "Заблокировать консоль" msgid "Locked" msgstr "Заблокировано" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Зациклить звут" @@ -777,6 +783,9 @@ msgstr "Размеры картинки не делятся на 4. Поздра msgid "Mount DVD drive" msgstr "Монтировать DVD" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Громкость" @@ -924,6 +933,18 @@ msgstr "Выберите из списка" msgid "Play Count" msgstr "Запущено раз" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Пожалуйста подождите..." @@ -942,6 +963,9 @@ msgstr "Опубликовано: " msgid "Quick Boot" msgstr "Быстрая загрузка" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Чтение данных WAD... ОК!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Переименовать игры в WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Сбросить счетчик запусков" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Перезапускаю..." @@ -1014,9 +1044,6 @@ msgstr "Сен" msgid "Set Search-Filter" msgstr "Установить фильтр для поиска" -msgid "Set as backgroundmusic?" -msgstr "установить как фоновую музыку" - msgid "Settings" msgstr "Установки" @@ -1348,6 +1375,12 @@ msgstr "из" msgid "seconds left" msgstr "секунд осталось" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Путь к фоновой музыке изменен." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "установить как фоновую музыку" + #~ msgid "The file is not a .wad" #~ msgstr "Это не файл .wad" diff --git a/Languages/schinese.lang b/Languages/schinese.lang index ea3c387a..6a35396c 100644 --- a/Languages/schinese.lang +++ b/Languages/schinese.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: knife.hu kavid\n" "Language-Team: kavid\n" @@ -188,9 +188,6 @@ msgstr "返回 Wii 系统菜单" msgid "Backgroundmusic" msgstr "背景音乐" -msgid "Backgroundmusic Path changed." -msgstr "背景音乐路径已变更" - msgid "Big thanks to:" msgstr "非常感谢:" @@ -221,6 +218,9 @@ msgstr "无法删除:" msgid "Cancel" msgstr "取消" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "频道" @@ -756,6 +756,12 @@ msgstr "锁定控制台" msgid "Locked" msgstr "已锁定" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "" @@ -777,6 +783,9 @@ msgstr "图片格式错误,可能它的尺寸不是 4 的倍数." msgid "Mount DVD drive" msgstr "挂载DVD光驱" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "音量" @@ -924,6 +933,18 @@ msgstr "从列表中选取" msgid "Play Count" msgstr "游戏计数" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "请等待..." @@ -942,6 +963,9 @@ msgstr "发行" msgid "Quick Boot" msgstr "快速启动" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "读取 WAD 数据... 完成!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "改变 WBFS (硬盘)上的游戏名称" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "重置游戏计数" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "重启中..." @@ -1014,9 +1044,6 @@ msgstr "九月" msgid "Set Search-Filter" msgstr "设置搜索过滤器" -msgid "Set as backgroundmusic?" -msgstr "设置成背景音乐?" - msgid "Settings" msgstr "设置" @@ -1348,6 +1375,12 @@ msgstr "的" msgid "seconds left" msgstr "剩余秒数" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "背景音乐路径已变更" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "设置成背景音乐?" + #~ msgid "The file is not a .wad" #~ msgstr "这不是一个 WAD 文件" diff --git a/Languages/spanish.lang b/Languages/spanish.lang index 40dcb4af..a066c932 100644 --- a/Languages/spanish.lang +++ b/Languages/spanish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: SirPalax\n" "Language-Team: Penn, SirPalax\n" @@ -188,9 +188,6 @@ msgstr "Volver a Menú Wii" msgid "Backgroundmusic" msgstr "Música de fondo" -msgid "Backgroundmusic Path changed." -msgstr "Ruta de Música de fondo cambiada" - msgid "Big thanks to:" msgstr "Gracias a:" @@ -221,6 +218,9 @@ msgstr "No se eliminó:" msgid "Cancel" msgstr "Cancelar" +msgid "Change Play Path" +msgstr "Cambiar Ruta" + msgid "Channels" msgstr "Canales" @@ -756,6 +756,12 @@ msgstr "Bloquear consola" msgid "Locked" msgstr "Bloqueada" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Bucle de sonido" @@ -777,6 +783,9 @@ msgstr "Probablemente, las dimensiones no sean múltiplo de 4." msgid "Mount DVD drive" msgstr "Montar unidad DVD" +msgid "Music Loop Mode" +msgstr "Modo Bucle Musical" + msgid "Music Volume" msgstr "Volumen de la Música" @@ -924,6 +933,18 @@ msgstr "Elegir de una lista" msgid "Play Count" msgstr "Partidas" +msgid "Play Next" +msgstr "Oír Siguiente" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "Oír Anterior" + +msgid "Playing Music:" +msgstr "Reproducción Musical:" + msgid "Please wait..." msgstr "Por favor, espera..." @@ -942,6 +963,9 @@ msgstr "Publicado por" msgid "Quick Boot" msgstr "Inicio Rápido" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Leyendo datos del WAD... ¡Correcto!" @@ -960,9 +984,15 @@ msgstr "Quitar actualización" msgid "Rename Game on WBFS" msgstr "Renombrar juego en WBFS" +msgid "Reset BG Music" +msgstr "Reiniciar Música de Fondo" + msgid "Reset Playcounter" msgstr "Reiniciar Partidas" +msgid "Reset to standard BGM?" +msgstr "¿Poner la Música por defecto?" + msgid "Restarting..." msgstr "Reiniciando..." @@ -1014,9 +1044,6 @@ msgstr "" msgid "Set Search-Filter" msgstr "Usar filtro de búsqueda" -msgid "Set as backgroundmusic?" -msgstr "¿Poner como música de fondo?" - msgid "Settings" msgstr "Configuración" @@ -1348,6 +1375,12 @@ msgstr "de" msgid "seconds left" msgstr "segundos restantes" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Ruta de Música de fondo cambiada" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "¿Poner como música de fondo?" + #~ msgid "The file is not a .wad" #~ msgstr "El archivo no es un .wad" @@ -1357,30 +1390,9 @@ msgstr "segundos restantes" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "Estás utilizando un sistema de archivos NTFS. Debido a posibles errores de escritura en la partición NTFS, la instalación del juego es imposible." -#~ msgid "Change Play Path" -#~ msgstr "Cambiar Ruta" - -#~ msgid "Music Loop Mode" -#~ msgstr "Modo Bucle Musical" - #~ msgid "Partition Format Menu" #~ msgstr "Menú Formatear Partición" -#~ msgid "Play Next" -#~ msgstr "Oír Siguiente" - -#~ msgid "Play Previous" -#~ msgstr "Oír Anterior" - -#~ msgid "Playing Music:" -#~ msgstr "Reproducción Musical:" - -#~ msgid "Reset BG Music" -#~ msgstr "Reiniciar Música de Fondo" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "¿Poner la Música por defecto?" - #~ msgid "Unlock the app first." #~ msgstr "Desbloquea primero la aplicación." diff --git a/Languages/swedish.lang b/Languages/swedish.lang index 0bd68626..175997cb 100644 --- a/Languages/swedish.lang +++ b/Languages/swedish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2010-01-19 17:39+0200\n" "Last-Translator: Katsurou\n" "Language-Team: Katsurou, pirateX\n" @@ -188,9 +188,6 @@ msgstr "Tillbaka till Wii-menyn" msgid "Backgroundmusic" msgstr "Bakgrundsmusik" -msgid "Backgroundmusic Path changed." -msgstr "Sökväg till bakgrundsmusik ändrad." - msgid "Big thanks to:" msgstr "Stort tack till:" @@ -221,6 +218,9 @@ msgstr "Kunde inte radera:" msgid "Cancel" msgstr "Avbryt" +msgid "Change Play Path" +msgstr "Ändra spel sökväg" + msgid "Channels" msgstr "Kannaler" @@ -756,6 +756,12 @@ msgstr "Lås konsol" msgid "Locked" msgstr "Låst" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Loopa ljudet" @@ -777,6 +783,9 @@ msgstr "Troligtvis har den mått som inte är jämnt dividerade med 4." msgid "Mount DVD drive" msgstr "Montera DVD läsare" +msgid "Music Loop Mode" +msgstr "Musik Återuppspelningsläge" + msgid "Music Volume" msgstr "Volym" @@ -924,6 +933,18 @@ msgstr "Välj från en lista" msgid "Play Count" msgstr "Spelat" +msgid "Play Next" +msgstr "Spela nästa" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "Spela förgående" + +msgid "Playing Music:" +msgstr "Spela musik:" + msgid "Please wait..." msgstr "Vänligen vänta..." @@ -942,6 +963,9 @@ msgstr "Publicerat av" msgid "Quick Boot" msgstr "Snabbstart" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Läser WAD data... Ok!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "Döp om spel på WBFS" +msgid "Reset BG Music" +msgstr "återställ BG musik" + msgid "Reset Playcounter" msgstr "Återställ spelat-räknaren" +msgid "Reset to standard BGM?" +msgstr "Återställ till standard BGM?" + msgid "Restarting..." msgstr "Startar om..." @@ -1014,9 +1044,6 @@ msgstr "" msgid "Set Search-Filter" msgstr "Ställ in sök-filter" -msgid "Set as backgroundmusic?" -msgstr "Ställ in som bakgrundsmusik?" - msgid "Settings" msgstr "Inställningar" @@ -1348,6 +1375,12 @@ msgstr "av" msgid "seconds left" msgstr "sekunder kvar" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Sökväg till bakgrundsmusik ändrad." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Ställ in som bakgrundsmusik?" + #~ msgid "The file is not a .wad" #~ msgstr "Filen är inte en .wad" @@ -1357,30 +1390,9 @@ msgstr "sekunder kvar" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "Du använder NTFS filsystem. Pågrund av möjliga skriv fel till en NTFS partition, så är det inte möjligt att installera spel." -#~ msgid "Change Play Path" -#~ msgstr "Ändra spel sökväg" - -#~ msgid "Music Loop Mode" -#~ msgstr "Musik Återuppspelningsläge" - #~ msgid "Partition Format Menu" #~ msgstr "Partitions formaterings meny" -#~ msgid "Play Next" -#~ msgstr "Spela nästa" - -#~ msgid "Play Previous" -#~ msgstr "Spela förgående" - -#~ msgid "Playing Music:" -#~ msgstr "Spela musik:" - -#~ msgid "Reset BG Music" -#~ msgstr "återställ BG musik" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "Återställ till standard BGM?" - #~ msgid "Unlock the app first." #~ msgstr "Lås upp appen först." diff --git a/Languages/tchinese.lang b/Languages/tchinese.lang index d4035565..f40eeb13 100644 --- a/Languages/tchinese.lang +++ b/Languages/tchinese.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Miller Liang\n" "Language-Team: kyogc, Miller\n" @@ -188,9 +188,6 @@ msgstr "返回 Wii 系統目錄" msgid "Backgroundmusic" msgstr "背景音樂" -msgid "Backgroundmusic Path changed." -msgstr "背景音樂路徑" - msgid "Big thanks to:" msgstr "非常感謝:" @@ -221,6 +218,9 @@ msgstr "無法刪除:" msgid "Cancel" msgstr "取消" +msgid "Change Play Path" +msgstr "變更路徑" + msgid "Channels" msgstr "頻道" @@ -756,6 +756,12 @@ msgstr "鎖定控制台" msgid "Locked" msgstr "已鎖定" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "重複音樂" @@ -777,6 +783,9 @@ msgstr "圖片格式錯誤,可能它的尺寸不是 4 的倍數." msgid "Mount DVD drive" msgstr "掛載DVD光碟" +msgid "Music Loop Mode" +msgstr "音樂循環模式" + msgid "Music Volume" msgstr "音量" @@ -924,6 +933,18 @@ msgstr "從列表中選取" msgid "Play Count" msgstr "執行次數" +msgid "Play Next" +msgstr "執行下一個" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "執行上一個" + +msgid "Playing Music:" +msgstr "播放音樂" + msgid "Please wait..." msgstr "請稍候..." @@ -942,6 +963,9 @@ msgstr "發布者" msgid "Quick Boot" msgstr "快速啟動" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "讀取 WAD 數據... 完成!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "變更WBFS上的遊戲名稱" +msgid "Reset BG Music" +msgstr "重置 BG 音樂" + msgid "Reset Playcounter" msgstr "重置執行次數" +msgid "Reset to standard BGM?" +msgstr "重置回標準 BG 音樂" + msgid "Restarting..." msgstr "正在重新啟動" @@ -1014,9 +1044,6 @@ msgstr "九月" msgid "Set Search-Filter" msgstr "關鍵字篩選" -msgid "Set as backgroundmusic?" -msgstr "設定背景音樂" - msgid "Settings" msgstr "設定" @@ -1348,6 +1375,12 @@ msgstr "的" msgid "seconds left" msgstr "剩餘秒數" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "背景音樂路徑" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "設定背景音樂" + #~ msgid "The file is not a .wad" #~ msgstr "這不是一個 WAD 文件" @@ -1357,30 +1390,9 @@ msgstr "剩餘秒數" #~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible." #~ msgstr "您正在使用 NTFS 文件系統。由於可能一個錯誤寫入到一個 NTFS 分區,這時候是無法安裝遊戲的。" -#~ msgid "Change Play Path" -#~ msgstr "變更路徑" - -#~ msgid "Music Loop Mode" -#~ msgstr "音樂循環模式" - #~ msgid "Partition Format Menu" #~ msgstr "磁區格式化" -#~ msgid "Play Next" -#~ msgstr "執行下一個" - -#~ msgid "Play Previous" -#~ msgstr "執行上一個" - -#~ msgid "Playing Music:" -#~ msgstr "播放音樂" - -#~ msgid "Reset BG Music" -#~ msgstr "重置 BG 音樂" - -#~ msgid "Reset to standard BGM?" -#~ msgstr "重置回標準 BG 音樂" - #~ msgid "Unlock the app first." #~ msgstr "請先將此應用程式解鎖" diff --git a/Languages/thai.lang b/Languages/thai.lang index dfe2027c..ac90695d 100644 --- a/Languages/thai.lang +++ b/Languages/thai.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Nitro_subzero \n" "Language-Team: Nitro_subzero\n" @@ -188,9 +188,6 @@ msgstr "กลับไป เมนู Wii" msgid "Backgroundmusic" msgstr "ดนตรีเบื้องหลัง" -msgid "Backgroundmusic Path changed." -msgstr "เปลี่ยนที่เก็บ ดนตรีเบื้องหลัง" - msgid "Big thanks to:" msgstr "ขอขอบคุณ:" @@ -221,6 +218,9 @@ msgstr "ไม่สามารถลบได้:" msgid "Cancel" msgstr "ยกเลิก" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "แชนแนล" @@ -756,6 +756,12 @@ msgstr "ล๊อค Console" msgid "Locked" msgstr "ล๊อค" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "เล่นเสียงซ้ำ" @@ -777,6 +783,9 @@ msgstr "ดูเหมือนว่าขนาดจะหารด้วย msgid "Mount DVD drive" msgstr "เชื่อม DVD ไดร์ฟ" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "ความดังเสียงเพลง" @@ -924,6 +933,18 @@ msgstr "เลือกจากรายการ" msgid "Play Count" msgstr "จำนวนที่เล่น" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "รอสักครู่" @@ -942,6 +963,9 @@ msgstr "เผยแพร่โดย" msgid "Quick Boot" msgstr "บูตแบบเร็ว" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "อ่านข้อมูล WAD... สำเร็จ!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "เปลี่ยนชื่อเกมส์บน WBFS" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "เคลียร์การนับจำนวนที่เล่น" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "รีสตารท์..." @@ -1014,9 +1044,6 @@ msgstr "กย." msgid "Set Search-Filter" msgstr "กำหนดเงื่อนไขการค้นหา" -msgid "Set as backgroundmusic?" -msgstr "เลือกเป็น Background music?" - msgid "Settings" msgstr "กำหนดค่า" @@ -1348,6 +1375,12 @@ msgstr "จาก" msgid "seconds left" msgstr "วินาทีที่เหลือ" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "เปลี่ยนที่เก็บ ดนตรีเบื้องหลัง" + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "เลือกเป็น Background music?" + #~ msgid "The file is not a .wad" #~ msgstr "ไม่ใช่ไฟล์ .wad" diff --git a/Languages/turkish.lang b/Languages/turkish.lang index b128baaa..5c6f7cb0 100644 --- a/Languages/turkish.lang +++ b/Languages/turkish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-05 14:13+0100\n" +"POT-Creation-Date: 2010-02-15 00:12+0100\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: omercigingelini\n" "Language-Team: omercigingelini\n" @@ -188,9 +188,6 @@ msgstr "Wii Menüye dönüş" msgid "Backgroundmusic" msgstr "Arkaplan müziği" -msgid "Backgroundmusic Path changed." -msgstr "Arkaplan müzik Yolu değişti." - msgid "Big thanks to:" msgstr "Teşekkürler:" @@ -221,6 +218,9 @@ msgstr "Silinemiyor" msgid "Cancel" msgstr "Iptal" +msgid "Change Play Path" +msgstr "" + msgid "Channels" msgstr "Kanallar" @@ -756,6 +756,12 @@ msgstr "Konsolu Kilitle" msgid "Locked" msgstr "Kilitlendi" +msgid "Loop Directory" +msgstr "" + +msgid "Loop Music" +msgstr "" + msgid "Loop Sound" msgstr "Döngüdeki Ses" @@ -777,6 +783,9 @@ msgstr "Muhtemelen 4 ile tam bölünemeyen boyutları var." msgid "Mount DVD drive" msgstr "DVD sürücüsü bağla" +msgid "Music Loop Mode" +msgstr "" + msgid "Music Volume" msgstr "Ses Seviyesi" @@ -924,6 +933,18 @@ msgstr "Listeden seç" msgid "Play Count" msgstr "Oynama Sayısı" +msgid "Play Next" +msgstr "" + +msgid "Play Once" +msgstr "" + +msgid "Play Previous" +msgstr "" + +msgid "Playing Music:" +msgstr "" + msgid "Please wait..." msgstr "Lütfen bekleyin.." @@ -942,6 +963,9 @@ msgstr "Yayıncı" msgid "Quick Boot" msgstr "Hızlı Başlatma" +msgid "Random Directory Music" +msgstr "" + msgid "Reading WAD data... Ok!" msgstr "Wad verisi okunuyor..OK!" @@ -960,9 +984,15 @@ msgstr "" msgid "Rename Game on WBFS" msgstr "WBFS'deki oyunu yeniden isimlendir" +msgid "Reset BG Music" +msgstr "" + msgid "Reset Playcounter" msgstr "Sayacı sıfırla" +msgid "Reset to standard BGM?" +msgstr "" + msgid "Restarting..." msgstr "Yeniden başlatılıyor" @@ -1014,9 +1044,6 @@ msgstr "Eyl" msgid "Set Search-Filter" msgstr "Arama Filtresi Ayarla" -msgid "Set as backgroundmusic?" -msgstr "Arkaplan müziği olarak ayarla?" - msgid "Settings" msgstr "Ayarlar" @@ -1348,6 +1375,12 @@ msgstr "./" msgid "seconds left" msgstr "saniye kaldı" +#~ msgid "Backgroundmusic Path changed." +#~ msgstr "Arkaplan müzik Yolu değişti." + +#~ msgid "Set as backgroundmusic?" +#~ msgstr "Arkaplan müziği olarak ayarla?" + #~ msgid "The file is not a .wad" #~ msgstr "Bu dosya .wad değil" diff --git a/Makefile b/Makefile index 61c9458d..263d9178 100644 --- a/Makefile +++ b/Makefile @@ -25,13 +25,13 @@ SOURCES := source \ source/unzip \ source/language \ source/mload \ + source/ramdisk \ source/patches \ source/usbloader \ source/xml \ source/network \ source/settings \ source/prompts \ - source/ramdisk \ source/wad \ source/banner \ source/cheats \ @@ -40,9 +40,16 @@ SOURCES := source \ source/menu \ source/libfat \ source/memory \ - source/libntfs + source/libntfs \ + source/usbloader/wbfs \ +# source/libhfs+ \ +# source/libhfs+/hfscommon/BTree \ +# source/libhfs+/hfscommon/Catalog \ +# source/libhfs+/hfscommon/Misc \ +# source/libhfs+/hfscommon/Unicode DATA := data -INCLUDES := source +INCLUDES := source +#source/libhfs+/hfscommon/headers #--------------------------------------------------------------------------------- # options for code generation diff --git a/data/ehcmodule_frag.bin b/data/ehcmodule_frag.bin deleted file mode 100644 index 0ec128bfff187878a7e7b44a416f14530219e523..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70529 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

@~V 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 Tie9v99B?Dy>@Q8~dF1;)lrmbk literal 0 HcmV?d00001 diff --git a/data/ehcmodule_frag_v5.bin b/data/ehcmodule_frag_v5.bin new file mode 100644 index 0000000000000000000000000000000000000000..d62f50a80649d057cc9ae0922ab52209bb47d7db GIT binary patch literal 52120 zcmb5W34B!Ly+8b%W!7wyOn_NVl9@T#$OH%pJ1D~p#>t$7RV$nIgv4?}P$yt%7LGhVDM$=PyXWjChHg{`zn)j{LcOM=JzB5MJhg3hlkD74}YCWKJ-&dJj=q23B)Nd}%LiUfqj#hW+Fi>#u=vAd^3z-1eR%(GTF>7MS(A`A zf8raxU$PO4nUI`IZ**EN9d=pXf6}GZec`YxgMNSiP`r!YKbUsk7`YnJ8KKK+gR?E4+T zzmAmw$cL?8*}o#0%?5b1NC4=(Y;| z^vpTaO=nof8Sq~I1S$3UX_?ce>1fKLdsG8bmW-!xNSPZDFJGu&{JRp2i>Qp8mcQba z@GI<{#_E$NNGTi7E@jW~r6g`FWfHt385Nsq!jnNVdKlS(@@!DA zlAu0SKAF7!CE&z7Yk1}Vv9=T)vxcRq)^O-$WqIt4~bo$nF?V@6gga zXnK2`_3lm>&?}vLlF9@*ckZC>T39GejnEoqAE50BI`m+^pm#BTAKLs&rgxi|?%md4 z_HH|}!?UA7pM&!`*ZE1is&T?qFy;>8e~SlDRsy;K${mk zqbA1bkK&05eZ{|CwyNirZ4Z4#sq#nSU-FXkjnY=dA*@Kq!tBrkN`;auFtZB8f|-`U zfo@LlxGjVHwf_R_i2Acu(HlslwKjNb62{ge-qi_R>m~2<1S>VjRjN_(dPyAkBYQ8O z6B)GRZQIy(gvFR`r`tSr>us^Ni_6yQb8Ip5c~7V8WpacHHyJby`=nKhLt5pJCi0bO zBB_3{$l%LM@RoCZTyO>HS&?nK*q(zqGrJheIo~lsw_%`<3zXh9AefhK?BP6}RSa{= zA4y!2Zu1l<&gXPh1%XI}6FXUFM6b%dyfoi@hdWDg1isXzxP%5~i9N;KnMw~T5l#l6s z*<_Dnga4JYL|D`dINO$Bj!i>lf*W^pa;%TH&v7oc9JQOe`57c}K-IZASu&9J${@w> zUR|F7xqj;+mp`pOX>F;91K$UL@42|rcP5iby#L7BvczX?sqqm~ki=Tyu~uv-^*gK) z=1xM(VSQMxCdbwXX>Df)b;F~sHwKxZHavZ#Jw1H+6Pj-l@(t_~(qCY%Ca?b$qsVUM zyfYG+6-;##QZCVTjTDm5^#V46XOJ10qB1VM-#5UfR^*96>E8#s6`Q*gEp@nE_q$<7uJ06~7gI=HRb!-yQr_)GRO}!Lz^S^{zD6?+0}wQ#_=E=`r@0dJH`}m6VWP z^9xxXnkT(0GnR?A|2_lw*PDivs?d)PW&sne(@5ej=?97vn5mOa(0hUjeP6c5bVzwu z`mXlntn{+>(l~Ok|$d7D@>g5F}WfD7;N)iKp@ru{e$pYhLuM`a(Q0z*Mzxy=fA)r^?TAQ)n zw3?>|&0`;yFqikYdRrgD`d=IkKxLrnX8?`41(? z#e1q4?Y?1#0c-P#BBq$RxKaC+JG>naqMkW{{Eq&bt*9x#<4Pc(;@5Q}R`R4rypN23 ze}uM^{|LUuOn?ZvxJYW&U_vg=1-`z0ah6a~6CN~;V$KuJe=JwT1oEZ(4C+dVs#8jpra|-d@;Xj!_A*HM270i`n~stj z)ktcsVjZp|z56?@VP+53d?VKQQC!EcjxBh9-TIYAto5uhq#d@l%=F>C_MYn1D^PB| zHEcVJd`t1%ba&lqJ~RM|Nz^0$$XTMk1dNWLrD^Ksx_+%cPoh6Lp%;+a>W`e^7nrs0 zdFrvyx3qFERHjPgst*RA_dkxBhW(G9;pZ{_$5D?-Js3Ku<-0VVkEm}K5p`@j0+8)>CP?| zILwaxMm?+5^G8J#Dro85jwW%C9X_f4emWqn{zeg-Jgqj=YHvD%xpJwmVm&`uO3q>B zsjSpWWsF!>kFMR`z78@#PQcvW*M1&SfH`1|7}Vp^Lq&{i7fD2?eoGO-E4HW(k&!v6 zDcCIA2g%U;(&igjPLf}zSYG!fp%iVMlJ1u=Cg2cJzowMQ4)t-`8wI^l?1TJJNbR`g zolCx>Zj;t24*$v}q04{K+FEh>y>?6cYCQp-aP3{~rzpk)TMgYAN>QuVdtbuY+U#AL zu(kGkzmS;JdIirpQozI1)yNLYeU(dIKA~6s zO8YWEx8CRiRfw}vC51~7vrng%p{GZ%;)_7vW@$2mODdyZ(Ra5t7RS}(wO7i3mW{3cQ|n1+j-l%_akQAH`*SCnHF z+qmr7QuGGe6jJS4Y;^pzZO98*0uRa1C^9t}DD#Mv;kJOvrw{UDX>Lm}ZIHiyO-l33 zl?BP{nxOgSYxODVg4U_~^a8=%M#qpE8?D>2^hCJMB3YC&SEtWPadYSzl?Sfvs7;q$ zTK{G!ZV%C(9#zVy92Y=7?Y$Dc)?}9qp8PJE+zC0yBHS6SKIvla3~Lt|zvCS;xeijf zRhTMxT;S;=Q~ZG?YsO`0ivT$uaN`E`*Sb?OigoK36Ws$)R}zbGwGi#^UN*Z25T33^h>|h#k}+u`dZq@Ko%`oHdiDq z{lZMa1^IYG%`AE!>cu$deQ%AHKGe0mLU0N5uO^fKj&)c2(jWUdxf!zNOr*Ss)mx?d zgo-}KqemTo#`}!6?}2)hE62r7-vZ`5Jgo(9jiA-MDb?aoLyb*)zwd>&wEOy+ zN!tA$v^N#CKa1Lo$Nq??4bauHgxi*7l?<|rkNpwl%aD36`tz#xy_V`i;#m?~dN3uq zCX=HFFlR3Cp{=-jfopMVOL6Xr3eh+4RRNHVkYH}jB#|F9j69Bd^6Q`@X{~NXtJYeJ z1_g5Mmv~DLWlEWAo>!c1(gPj={@|f_Irbfu3vwtw)kOw$uT;>rg|_zMdf3`B6>Gl< zeDc$WDZd1b*n>G`g1UiSg+%5L@Ouen^{<-T%HL`E-*95|$SpWg0h}=iR;)@kq#t-( zNbdpeP|O*7d4L;lAGiaxK6zrW=cJ!kU2c$U&ulp$R_(@^7DPf z{%hOabJO=R)d$pR%5DB{oXJ&wV!Psh>TF?kgKQ@ac7YtVlP1nt*Jrd{k<*%%IP2uu z{(WbQ)$ADKKX}T5e0ewX9WXkYWU(pWSS3T}J8P9I)$Cc!-1LLQ|KjOC*j6fRb%VeA zEK6rf)yeigBUVM4Tm{&1sX2p*VyAU$M;G+YJy=nh!W4BzNa)uqmgBkz>0vO|1^ouh zdpG8!IA(CJk3biQo7fFh!vh?QBg48|CYR@_C_i+B3;g`MOFv+J(_et!3y`A&-zPEG*qyeI?0?6 zyHHbVUPQXG(07OXuu>Sz5s8P8J=`BvhWDmB$-TCZ$V>M7n;ud=vOnT~`820&67Kc? z^z>jQ)5%q^{;wxKkoc5kCBFG&}<9% zfUVV$zj{ejnj$+OM=X{myLs6rK$9Hm$NMzUNhX*B>iQRVC;Mj5g7mLQ7I&vib9{|b z_MvB_47`ysH)OEXc-X7Sp}&LgY1SIZv*5`UCpFttICr*n8*Eh6-qT{4HEvfi4}D|Y zu3{cqq%7CpwJQraTc2i_!<1_Zer78di+ z6slVf2@^cz&x8rXcB4Z(aMGu5_C%5&z0#6+N6@trEL#RlElxYZIO(@f*W2MRDXTF9+9kE-8Z%at3zCp&Y*Yc) zOitB)t0(53;+CdMwOAl?O_xttn1I7cVm2E&35c8lW@>WAiSV+t1AL#({?*%!a=F}O z|EgRjH|yThokA1q1MYyemJjhOnH7(xY6f5Fq`U=J_{0#UNrKMydNEmUQnBJo$$8MD zYggtlv-q`F{Lh{LR48?m5O`Jcr&yV25#@H{>N*h)We6Fdp5TMY?|5Jh@vm}q+Afez zo2iPI&EC?)RgDuGuh&YP$Gqa=jrO}}9auMwt$U8HAaEdp*SNyP6#Rx)6wymGe?m z1aNC4#C8|x=aT~T-(rGNM<{LTVI$mr{#hMpaWS=iA^o>>?U$2;M=gu-Q5M=EN2xvZ zN~WB=;}Y2jp(WAAJb?{n3u!%kMCUgqtSH0K`fSN1Uzo*&($@6*51fBXD2=i)Za;aJ z()VfL6g;SAGFh$h3&RB8Vv-sx1|?zO@ini3!etfmw6K z-+L}!;HofNYd4gWb2_cAtpe=T=X0b?VcwdLgsI5=ky7P&z~6tC$g?wk!-DF#NjG|Y z?N2IG$oLxvIKg$3&Zlr7)jlK}J=&fWq144hv|h>JThXjt;L%hS0myDp~|yoBjdW|CfIk1}KCQkzLJ`hSuz8(w`Y zy(Zno%Ep@X5|?5O{75#coX=ItC5UXUVxVKbhp}pFgw{*xH?14@*TFYn^Oww;X41K3 zB@^@869j$Jji+>vr$j&_G}(;m1dyw9Tlsu>$rC{<`IbWL<>Wm(dFTnu|0IE*CGRfc zr%q z4ZHM4F4b!FNlD-8%wM-864H@g*&5Q>UL)rfOVt|NN$7$TJc;TnmKtlTDL=U6v0x5) zT4sXTwt9t-H*HHEqV_bbP1WMU!t7i#Q{HXliJ8wN0as`5?i$`?HfEXvOy^mVagng~ zbNr6hJ*0Uicqz|Q5q5;vs8zKBaHYa+2EG}D3L%R=4gF}!HCxhm-`ommQn+LhBj_RN z{8h4e$oA+otSis7umd#05=>V~6|>>hsTJ{SQ=u&{WP%3UYqn064KtNY1=DJ;f;9>j zP4=$76uq&2Wn(9<3f!2oyK^HQ$C-0n!@budlf%pG3 zF&N4a$@YklEn2j;e^Z9G%TjIYJ;e5!%G~u>kifg0RRa zus*Yil$qWom4-?{W+CH0lK3P9tL}EISP{00t>M+u1g=&n!1o~Fb@;?!=)Qp` zHA{tFx>s>F^~u?r9nuC^ch}dhRq~37Fjo=h8p+RBTvtSoyk-dg4#Vghis;7kAUAws z_D)a1944@Dx-s!VAt^4P+`uCv&ktrXc$R1HM6TxpC(4b9|Ca9bB;mX8vpGth*r_{T zyR?{4>Dwbi7cGMI$uJtjFE?D>s3;y-$S7ViVkhsESEF?zM-?$jX78+ziUom#ibp8z z;gEYq7pNWXUcsQ@HyamRFh;ybmI>+FiF>A^v6Xt;|57v_dO?P9e1e|Hh> z{t;+7}zfoTzW^QJpikgZvpJb*-U9VPYl^v!mr(Vkw(G&(4LjlBp-A*K7Ic<1*|4DQ&qm%ns!_ZpVu|K6s?;k!Jtb z&L2U)jRDt0-m#$pstsdhd_Rk>ihkp7EuPNrFicP9f(WTAP-hEY@)pH);f2CHVHRvx zPpjqdId6-5yxY$3-p07W+XN|+_kKBU^0p@O)XW&kbMz3!2HA0qnsLk9vqGtwcFX&l zh%w+M-cj>?!o%=slfjbs2* zj_~fcn9x*}gr@QhZ!uD_N~9A0U*2MB3RO~5T>UhE;VovlTP4d2^+;WouaadRJ<{p~ zmDITn?zfnr9okocp&n(XpiF+Z$$*?Sxp)@3(+$X5lZ|IbcUpCQH|aA`e}7+ka7wqn zFYQ^T+aS32v-_yE;oiQCU=HqU2eLjdkHOycoVCTd9{2C#`U$RI;`%MF1g<~gdKcG4 zT$geE71w`TTP9D2t=U}UN@2R<33!zrmsz&LPEnUi^LyhTr>Ll=+d+2wO#c2G`Dah$ zPkc82kdO|pZ>yV9Yg=wBCW;sSgV>f;O)-Duw7zNMmR0aM!9tKct=e4XIgpWuE&iV+ zuBh3F9my&tb*ANMs&4!X=l@w;2dWcmif(B@oWsZ9)0#Cs)i=r$2(j*_m= zUMYrVG$le@W>_IEDc&gKTL^sw5*nfyL}v^(km4voU;gG|VSO66f>oa!w})6^7kAFG z05^`>1y85a!1Va73F2GrnI4G94K5w5H(!`YkAF5jB=Iht+<+W+VEt=6jLPIT1~^wN zKt7&L>wU?7uhJY62Ojr1^2*DYxSo%`O*MsAiy8lRwX%4331PN-_&|hu5nQki3>^l2 zvbic@PZ#mlCr$QrMhN6JH(4b@LrHd0=~ro9maSSTMMHntxy%ec@s6N3tb5Dk>128W zR!gBURcVGcQvr+`m(K|_kYsY~Z3@d|a;W0OpgRek1MgWer-Jh8h0KCLi6HpW z*}^~xc%vXJ42WjIH>;eDo10(XVraU*`o+48rLUwH_-0h!@BFX&OWP<_{yHG}Nv4<_W4P$_UT$L(rfRlg3rU=4C%?wg{L z2fc8tq7ln-jU73Kmu9ALpmm`tNStvDIr*g1mHSHY4JJoAh3JP*E8PQFxECX$UJ zEdCkHdgs0V11}=->hJ&c>lgrOez1ail`dMjD5yI{m9FX2cob^2CVKR zBqketsurJ}MKnhsdqOhNWF}1>1BR707HKk>hG+0y!wNS@Ft(=z9jN&|f*yE5)bBO? zQY7`wO;aD;{HV8^?J;6*S%EL;{LGCJ$tG%-O>zwMf%qh}zp6a3>pnnd*nn z94T&kGdfJR9Q2V#ADKR#Tpu;XIGe?9OE5LlY&)ZD8F?30 z=4&5d_U~*CX#Im^8P!92gD1Mr&~Vt7X0`{+vPa-A|DMXNds(@miAE%pK3dkpLANSI z`8Vk(K|>Ou#tWUuK7cyK>A_b4`paR!hC2xZ1My2tO9;h{n#w& zCA#(mSEEB3@Gy$q7n0$39vhTiYCI;}n!e}heAErPHpA9hiEMLtCX-g>1dU)5(L*P$m8e0%3udXECTUZTvK-<*3_fNyKGUsZkJZ70l0Sc>e$fFqdMuXE?#zEMRHQL=HJee?$E4FD=U{O)OLDW zafmvf)vH4^!EGMI3q*NDHmvN{RqEmla6_VaUpJ5TsDwrB#?j3a?F@e)EmX>YAKhEl z|L?j?VBrl-Ce=UVDB{nqefv>ZRzWA8^Mun7B9%E1hm(@&Cv+D088^C+4jHWCX`j!B)nouatN0Ov^@aOxb_mcXyIK zMWowM-L#Luk_&0>`hUWYS3%_o(Dx?=zMGkKSkSqX!eqte$r#jwZhNb`6kEqsNGMdw zK2w?z=K$HdV5urWPtH|VE8QJAnXVq4-V?A?KjBIW9+vo6tmaLDDH?ytHADKS&8vRp zj-zoVD5x_K5oFFx*JnW{F|vrY^qB)Z)^e^qtB+zNSG~D#%7*8|X38Z3(4I9d8d{B3 zn{{@t*$zFH3#3sybz<2-U&FMyC1Fguf7}izv8+=s6z?XXUeA| zOm%ZrNo#?i%kR)TGo9T;nC#6uvmRE>!_+4b{{m=U0ldyXffVPJ9e_ixV%Mi-ngfpN zy|hn4n$OBQtL1=AO!7{j-3*(e;__9>OEPEbD*{IJIzM1BR|YJKNA9Xt@?J$;m9e^M zn@vD8RBQIOwW#wzE3{YeHpY{#@`x#frIb=2p?q7E_M^`zEU3r=5C6;fJTze*3NR13 zr3IR7j0o!Uh+|M07k5)CzI(MlfbsrKcjS{m@f28#4VSSiyH$ zI&#(Efz=-xIqPOTX~?(h)_l;_wQoY2$K?O1JwTkPFnU(jr^_Ywhw;Mf6K_VNTlc~Wu&@76fZH$dHsRlPJcNkqG)pkbei=h9)R$8Lf zS%NxCgjup+P0tWaDUG-|c{HR`mEnOga!f=)~E1q%@4F_!%MG;+S6qec5R zXZ%}b(5`*^3%+GTI~g09THQ2rik9att!FtXc@|$;$$+u(k`BD5Kr+g(6e31HrNe}o zEJ|ldmfuIX4Bt47ejRrH4CuUGT(!8i;fkHGr23k&&{UrUZhxc4P`$ZZU%9+BM<~E* zzOU8UW31j>xwgh;XflmxD~z4wMO9Gnbq%V zxMJ&Q5f;P{!Errb;MGNlz4%zIM!omnsJ9XIHh!kw&hdJmk=CZ_MSc3<2CT5Lq&2u6 zzZ+6xSD(aa9O{nomJmTfTN?d6jYbL7ug@ymD^&|Ub)ARkS_ z45AL2KWvRnMj19{j!u@X0~t4ciQunPrkKE4>eI@)iN}+F1Du5&XEJO!lfiS&d|+*v zV#Vb_xxIM*kkaO&l0vfdf$tc?iEL7k@UjAy|Hxr`bavYWp#pI(>47aQ&A~kQI~>4^@Hh?3P}nUb7q(w;aQ)9 zhnvEq$FOD+VsxB!7SNcos9{acvt$Au9y7c#`W{_0XD^$A#r2CCEcC5anAw|f$e6IJ z+?b#LZ#cC4|AfOc|CewG59}5u3wfTRenZ&7gu?3tw(_u&3p+=Sjp`SyiwDnhgGaFu zc$6aW#7B713{Au%8bL8y&`!=VJt9{4LEYGI02?Nzm%VxJV|p#+RY+hog~pQ^Qyh%q zW53aplWNaH!qM=#mUZxtv+lym!(E0J`#-clwU}zGh42*UlBFoCM}N#k;It84uR)lP zz7+0*J#-&1;Cd-~WN7t>1)3(J_Zkwg`p#jdvvK|9cT#asDuamMya`AMY8hn0MHXZ1sjY3|%2@}kMMJ$xJW^m{BA--qz4u|>T90d?UNL?G)*;okIVfM+AxBUOSMan*T`Z1b1`c`?21BRbyE53$0Sk&=Hh zUc_01`@?_LzKbdNsh3-?^rlhTOItww^TE-H`uoV&5LhZq~>9PjPrZU52c#fZ*fM5{2K1sIQ^+pK;QJAPhF?c!;_5;dTwLWftF z9}sLuAtRg6(|xUC1fD5!#sOFjpUdR79ZBc5T{3eIix10M8waR8&bHIBs)uhAX&Vj- zG00WILe<#1c0R8+WtyfkXZcpUW0h?^%B{FV>@r=)1Wc+oC#u^c4B?CoxW#P3@cTN2cLI%!V*q zD>EAsDT{Rn`SYf%Aop7?;oaQ-|EdGshk1H_Bb>cOV|>8LGV=e%9fY)3ygBM zVBEEB*Y{}D`B&j~({-}R9H$%UUthc&sVNIKM3+1BUpPE2V#+qM;V>mK`_ zO5C&dtldN3(>m-O|AxDvV{OO(;LdeKcT~ZrV?3ruKOZb&f?c@3=YQbBp?-avJ@ixw zY3XiT+mhI0e=K{?+Q(LQ^li)TIJ<4-4*RxlPiM_n{i|fe0roKJ2i48r_~JKWuuWrE zob3ngmBF246)4!)@J}_Krc?jDeOvp9)Y@qOILgws(NPu1v%S>T>@_0h^Rc#mF9VOG z9{xu*uJdwn&dbLcuP*U$+ZFGML`$0&vg?C_Sara|gdJ@!1Qpc&O_6MC*d|h*sm{FB z2dm-6W@?SK#ahpmu?e9ys?VNE&ZTw0ikdJ21NGZHZT2?Un*;XX7gTdcJM%}4a9x7Dp+_J%7k7T9Cx%nlvK%5GENzI6n* zc#)Z*OpLRC+m(mC4>$iW{$!FI70K4-t^J?@Ucl6p;6grvDJuK~^vqBlr)BCqwJ%Eb3$6 z8Nu=ll>v`{U(+@jJbnNd_8!<~;NFV+-MHXev3(EMtGMFHR4RgXdu-@c>Pr~<8FmyD;qAxZ z>rT-q6m2^)`!L;MoiMl_V|;@oSuYk;6a;$ZQrK>&U75lDI(^74S&N|KK|UdMQ$pEN zx)xEclQM(3)FM1ojXmsE-2GVdKgb4zuz_J z$o9jyOMnmb4f_vqorUi*Jn)pZ#uq~$B2^_}#~^dhL`7lsa6*ol*x8 z)WL9!zj{4+U+^CM{;~E8YD92VZ<$qsx4RV@dped}0_ad7Fy~x?R!AoD9yo`=4fM@jWNxZ9l_aD zHcD1%ITorbrOLMTm@Q74jW*7`?Wx7i_H9S%rb-piqr52`*?r0VFVNA&s>}%M857BV z25qdD+_D$7=(qhVl{!(Uv9=VP(Hnaa7&s6_Bj(ZNuDzH~QF2d9u!Va5GtF$Y$D=bL6 z2KIynv6b#F?9xL@`1$gk*b{;=js6Owht0#oNFCdLtk^-veB-ce#Y(fr^J*W~V7Xn| z{{Ifk>nEg#G*~j*{#E_%I0U~GY;MbgJ?Z+`$z>Z6K@EH12&~bNS-*s|A80lU2EMSF zR9{#3OJAUnQomNrv}`DX{dm7_ZkJF-_e1m;ATj8q)!O_r&R^Db_pvuai^Vny1!)m9A&0s-3jgD|+o3hh z4h0aSXx(;X*+OZNGEc5b;S04D-o%-!W7qxCZ1`oW05zRRab%7M`$$w>#}Qa2=zCeq zI;k``vm@5W3yz2my$MLgTCepncqz|u#f*xb?keK9L1Fiue@1nN^7PY0CUcsMkdUZ; zPj<-K2@mC-m7$!@>`+eFDp^Cea31zPIwb7D$G#9|_-*(ZwgMa4v%?12Rnep`Z-)alU^cv7K#90#Os zb2TEaOw@qrz$r1^CQ2n7h;ww|`(dr*L2)u2@5E@ICE9pFlg_hR3<9EoH_e#Nzx&&X z9aU5hv@A^~uWm{vRq%nUw>AegQh`$@ zS6P(rQfo7L%w{5QB9_!xvBm~}P?yfu;v$=jN={y$(xa?W)=BfBmosseM$D@XLI>~k zkaTAcA2CQ(E;D%TXmY+(>4LQpPqU;7dRB-yLe57Bjb(wKn66!$QilC1Jk{_M72-+8 z>4T0*u%|IT6|(S~?ylL)$=~h~* z#o056>){BoCkNrJ?T6lUuVBDjI^l1@4q}&CS?e>)h)NM= zDKW$uImywhqhsHZEcS9l7Xd@YUXU^Yp9VY~1&42tjPALL1JGUJW8{^J!_6x_!aNx# zOnf$0@z(yF7?J`S$3{ePEi9|>uOZeA{BEi3>q?Fx@s_oaK+5=pLUOES7K7*awC85T zu>6l}g!qtte<7oO5$ivSn1IpYb(%%Ko5pOM-?-8#3$lYw?gJJO#OTYyHlGT`3D%?ZL@(hYKitv%rIjjt;#r(fd#imF&Qw*wl$hl0mEQ7ibMTp|$u*%{N=| z2JJtkn`GLr=vv1Z=w6L+dW*5pv0*HCB97hJ#nGshgh7HgpV})!0coiZc9?NY(L*Y7 zlritZLk9kGFCFdj`Ngnrck7geD94B9XtD6xKA^%zeFm=X$xLWt}26Eh4T}HhPbV6Dk!}d@SzlGbf{P=jzVV-7RPiwh&~5= z?gM;8e6invk6W^j!)Frhtz^}Dp_8y%etfpDzg=t7AZ2QM066rF#+7Mw`rZA3_p)x- ziUGeyTyN}zbshVa592yYVTuc|#hQk^JPzM~gzb=&r?pA-<2%OZ-77gX|3FEdeYw5X zvCJXQXv3avjASeDT+rS;f{Q#=v7*vqJ7s%K`&Nc;nbJ2(4CW%wJi9JO~!_XB@v1RcfQpVe&yd=W({AGmrg`Q?yIcgjE} zxle=M7lZeOg{#*`N~ABg=I3u+vY-5$+O2q(W1lbiUX-)PKnYK8`l5XMLpa9?v$vd< z(mb(ex>y%5cXS2no(BrEi^kGMS;Yyz3tv+ks`J_X-SJFVZNEI8bD`wZykSdk&%NJhW!dINJX6HnjL zp2{zOG9i0Z{EpUvu|IRdg52ZrwA%CHR4dx^{E27m3(=3P0=>6rF(?-8J@mPE|IK%| z8Z@vbl)));GS-|HK?Dln_oZsU7`AqT7SM5A9Ub}k&2~zevy3ZE&85-Gh`ckC7|!J& zBR!NSxYAYQAQ=|4=M0=i!?}noq-xa8BWS5OgS9yq@_`Le2Z)mfmR%ch;dB9m*ekeUwp1}9FT#kF|%)AMR@zg;Sp3(C2(26#k4 zm$9?VjWx1VO#^?;N2I$mSdfYe+>6Kta7_vOy=~HDjdr=PgQpynA}t7O5YCg}hap49 zC&Ly@uGc|F@k;67?bzXc{R>j2)(bwEF`n~P>;n|27j!@e*rt5(+IeLaDscCVHfDM@ zOL)~1yuSl@t~e2vGBqlPkq;lKO-Bu`A|mIZP4w(~u3UtZQ|MSBm0XX&+YiXxj7O(u zq0xFO-a28aO;cdAjdQ@CVf0h1MT{?2BNsHF=3TNYq)*Yg)ZC4iiz6({g?{8>FHxS9 zBV;Oe>>*!?eYE=F%5koNXcEMl;H-<$dc@;t&zM!53xgSERK0{fRf;`OKd2uX#tI3i z;z(}HuVtX8(AJ+5ID(ySE=cRZ%wZj*xHQEkBBs|vL_$xY82TZw4sjL(Ipg@zVp&7a zYfJt~WPG+%8sbWx7ba`5DZos%NGy1feJSU-!bSdP6d}aUKk98Gba|KH74-f-(c1RL=p6HHhts-0U-E!zJG@e@nhl z@2S6kyq=?y-i;IHQg!TOP|H07)>Ooow%&1e!@$o=3SOMNm%#>-%HXbdP5J6_IT8iiH?Q(R0=Ezeev6 zis36>EngBX^$pO6ZS^G)ol-$@L}@|W_x9=L82#T&d^+B{yD{oQq^}g_;Y>sQP+ij% ziV2b(7|tZDlFehKBiH&=F3kPcV7bT?XcU2f^aSw5Hjbf$ZKQNS z^Btm;n-j3R$(6I8?4#{05ct4*xc?zbrBcIy{sxYspP8d@)2Y-!o_H;>~?5cfTOCc9p#e$b` zT4aBg^Ii?Bb;;Q#r?L^JsZrqP1Z}#KTLQZ>h#zr~0SEokL(>luRn#a=`OtnNA@#c9tET@w_`afdNr0M339%a zg%iLSbuwmE!@27rJOS4<{99FPqPRK628|T=um3`ZcVKJ=RxCZmMAPwRlGHl1tifFd zo%w`WOkSh(h7bmJ2gcy5Aowex_OthJjh?W$9s^u~F{rUA#ru%fc_Zz<@w8jd&qDOW z_0_31=^0pp*`*ikS`EQeZYt+#>ALasMK{vN>%q z9sgD^{>|dbxzVRdsEx)BTU^;U($a3EF*nkfi8QS*B-NMEzu)K!&M=~paf(jRZ*CTh z`B7h-XVY_fcx6lbjLl_xIVD{EL@!_6SkXy*>s(zdcsfzvSity3oaY7OV%9e#-~>|N zlqeU`8~0)_ewt5=&@(u{ae(dBOJDRov6tKY0Zt`uvzxYD!Pz^y&^p1UWQW!%IjXg} zy!n_1a?8+nsO<@B?zzoZ4sgMhwrh4LcAT%+@_}NLmMe}y?s{R=pll)CG2&>%`9nky zwp_tEv1@x7e4E@$`WPp%r|)GB=;ks4OD)p=SC+*5>$`~G5xdkNW_7dNjE^f2e{tJKfECa7M7u9e6AjaC-d=cB5&BvO{qg;&kasx(R z+wMKUp~Qhc&IxbD0iA89z~qOPbfdi<|0=YX9Y@4fCBx@vaBQjUB&*hay$AYQyd3AW zGPaXljMCgk;IV#{?$CfAT8!$SV>f@`+iz>55V7ysaz%qmA%#jJck>lnQcAb~467qe zgGd^M$Y^ZK2fa*`;Ay`K`=N@{Q9fsP>jXdIai!nsqWGvF;_(5;0_J{);=4LB`Uv#s zk>xPUW1g1a5<+`!{Y96iv{LNlrEh7*l&%2f{mtd=WY`}q!PGq?lrAu}1?O8Gf3kG$gGqm6GU_PFws?%WS4az$C$=x>O z3kaMXMyd4RBz%RH9KTbv-&|U9MYKuk4 zGyVQUr(Y~4H+So4vKHXrd>Pk|aji?i;sL+{<1hs?aCY@Yoa3jv_9yN49W_HCS4Xb> zZHtQED_dmXC4;9wQ)pegl!DfHebBj_>%i|}*LB_1ZRmjvcPJCN-Vyj-8dJl#I!Pzq z-=e4X)r-&JR4oxFQfM(qmc)pdwV(U4C_Nz;)nAHcNsn*5DCehL3v8=D60@Lhi$IlO z(bqc79h#Zym7;_nL)cevG?xv<5X zzObd)ys)Le<-eK^dpg-w&w+c0`Yxt=Z{F_ejlNyIjKAx&F4dcvj5jUu@qX?Rk1e*f zS=IOI`?5TY;C)U9IR6$W@oq*e03v?0lXx9CiPs^mg+9y&*8pyT;2L#?w5FHC$(^g0 ztOLAqf$KT#Qw8uUt$*7yo$v?^(>UEsr@s&7LMT@ftW~Wzr8u9;Yi(t1&8b+CHtkH> zwhseV|4-tUpbt57f`0sFX}{^(JYa_u;3{D4G`3GKVT1*~f0H-1dxgmneyezEU2T7% zu>}EJlUr7?bLH+pxc+c^^CO;(4ZcH;Skpz{8Q(d&Qu(T{ZcKMpc7D~xGh|i%8rv@a zdh9cD%noiW=`4%s(%);BNaCSGzb5CuXDlNlF7f!F6H!lZXAiXUUUC6d7e+7fGXfzj$-? z5?=12>-HXh_3Ck4gS2)S71#K4t%T2B-juIlh&Punhs&rK3(?>x^7`% zruIt?u}&i+5xG>_-J9md>7E{@*DQz!P0-L_M+VKkDkjPL4VS!kC!A6z?#B~T1hroC+po0GXm4si9x=4KS{tx8ALm)L9zm3et@ToX3vR4F zaK{sIt}PWE^*r5U7|0IHKV;A^4A{GATtrsle)lC8AvK4LUFjm}&cNO@L$4V$z$n;( zx!U-Ks9sLgCxgrTGBw)&!fj&E=*|0mB`@GPx*e((^ zsuc%~{-4Hi3V<-9H>WR~<#?Q@d(aZK;`ENPfHgk5H@$-CN-s4go>yn|Vy7eR^&!m4 z5Ve+1`=@OPXv3+skrg#`kytr+H`{CK%R)31BHFJ17?c`RYPd_yK4j=M`k#!$e*3IZ zWe)Ps8mTuk&dj!4_Gx(@Eg}OrCuPD0VY$I8AS1!9D=ft2qxgsSU*mcc*MHzTduQpL z^MH3a@y~kH!?lYvuOp{JTzH#P@9Siv7Jl4m--zJ4EQCCRiPDI&PDv zX+7XG6SG>ht+-EFEiqQvEaV5OZ6DLqn*}R*#To16?C(WbauocEM=2+w^I zH?M6%%(vE?Oj>7?IES&X-&Qa?S2^N;?(}6BlZw^U>Y=dGYkTZDwL$qeD(8EcrkOaw z3{tY1*Uc(v!iIRZ|KM4J!0o z1v4`@!T`dDPygou_*LRKuLEasS#a7Ut04BYX?>K_#$1W$t<{LDIu&DkIC|zJAlcw3 zb>Ji$|4+{1bPRm=v4{$668kut4JU*=6yp#n7>jT*XeqSBHjipZ)rnX?SdWH)QLwx9 z4Hz&^&4x7&ul$%^m}HMqOtuLAAiv$Vn;853_8NMM zcJk9(djYzNemrMZHMedA z1=G$HY4rrGtrztnR~J?fpTFv?O#3*=gyfGU); z4H44Bu{E}}!aPWKZ1USNg405i&S}_#c?tfk@tyJXY@Z^kJNM)CXr0~HM6M1eBXbyv zgH0}A;iq_i3Tu5hxjUsnX#C=<@XmcBzc+i+Ef9p;^ir}Fx&htTT9h;? z7n&3(P!uRg(nXTC(9jkri-ItYEc#AqLAoHIhyzpwMICoLprhb8lN9|;3!-6ZuY!yy z3N1_f`<|PW!VL4yyzl3o-ygrvn|@Bude8El?K#hRp65_x)Ej8gGCgI^BU(-%<0JBc z28!>eV^<#7AOfW=*gCc}L>3-p-Yfe@|7! zX+0|R`El(Cw<-mii$+O&z;E2SiO}|CZt{q#BnevYRXvq^yh=fCJ_7QW)Jp2Hz!;@uIoj}k$ji*U|z19u+ajABFW12Gyp?DmxxWZr-yHuG3~AiQ7xi~06d->zy}ErhS`4VRKJT~J^Ra_uP?$}|o-8QQ{}=$}{6 zQ8+Z;S3orJ;v~s6Q`F-|ipqe2p50E+3xo4*`I}iK8_b5JBqVED>2b?Z3p;f5Sbg)b z5o{t=qa&k@a*qLxkP_s4ufwI)2Lo^U#h`KzD?jJDsHKO)|(~L-!L_ z$8q}KIoEN?-dDp3jR-B5JLU} zY@5WK&}jQ)7*x=W#13+9Vx`G68{!Oe+Tv8+xZ)#tC!*F1Y}7Ltdei9}2W|J6>%8H> zLUrJ!K*+7A7`heo9%$dV04`MfgzY5eFUi z`8!t-qPc+QjLbYf%I`Ixq8qGaze;c>;D}51c zn)9t>^1@6hp^FF{A%h}t;y&Hqc?0~*(DvqhZ{8V<=-5$sS>ROXXc5Nb3iDGfq76wn zNq&Pl6VJVW=&rpCaJZbkj1A7*dth5i0xS8R(qwk_M( zxX&y{EJR8!d2EfM7QEB7@>e$big5z;>zsbj8E2l9F=>0ycDd6YN4H6f&!vehbBha@ z79Zt$-dUp4GA+)gEfk$cR<~Q@S6%_8mR*%76IFv(_atarTcp0h4M7GIPUR5?wy`7s z9DF3WK4_T9@-{V@F=2(taK^>m9Qy2F=`|8nKeEB+G)ygjmq1v+$Cl{J1%0}Ri=4M$jn~L zOioP^;kAsPw~Ku#@`x{z1ZgB|ytXYNzTFeoAl*givzn{~NQk-gw0VG_IgT={tx8lB zGDev(%*dRV8AsD$M&Nos;9ZLyo@6#XWh~+DYN}zG1KU1zA8|X`eVghPfI-7niBGai zj{TD2=lTZL1!3J)gZC_b%Qp0g_PG0~`#{Zc^-(pOeqhsa$5F@eie{X>znHo`yq9OHQx&is*V2vZ$a$tv>rGVsj} z|L%zKFoYdMbgV}(&Qoj$AtppqND>}vzzuf6#a>WcZ1 z{b%fkp`*v@nltxO8$r8Itie3K0sR49>Rh3&8EewUXZ9lG8QaIKoSc`=&B3cFM-f8y zaq1j6pnO5hh2*hS{nNCv{$c&&{){w}Fvs6LaYesYOYPrFxTG$NI=59TV|oyW8l#@} zC`;lPCI&NEJ^7~1^gNlC=Tl(FDWK+H($G`NHl$5w+c zGjS{vgM7vV-w{Q$LHo1lCg>ChNg37*y2e=QLk(m%fK7>R&IWXn8ZZ)iEY;uz!b>mL z$eIfI646a7TC;^s!*|c3%`(G?VStu9e!IL{c4i~uHVbjTL7dz$0&6nj+$Dt0aAswr zY#3GhT!Igk7$_}UB)$Q-AEk{8hS8HgDFg0h=e!J_)(85y)GE9pt&%=dgRo>m`O}sxgt)07^^?R*eCyJ`-B?_%z3CF7ub0?NxBCihVjfJL7kxPR;X&*DdT zJ0p&>iW<;*y86{iB9H8Q2D{+}y&|%uPNG`?y)mf=w_|-z*P@??(Y_I69^EP=^9XYv zv;y{Nn5W1(fEzs}YT#~=CMCN2v18L{ow7zs@C?FNhZRdY>@oL{-rC&iL~TOrBv~Jm z5rkQ`0XIP}T90HF*GPHjX|2T$w|}cooZFO4$0Y(3;XqxkZo{M$9!7IKa9kj{TO16Ol2lxfmOR@jrRfzp{M8p1#Bh?C@(EwX1Nz~5gRMm-y}T}oo>6o3WgyUfNPXv99S{^)v=i)V~pyDx-bV%O6l zn-!09aY7B+gtCHs+C~YRcHD3jcb8<%MM+OP)2bEsYHOo3T8kP=ovZeTU{8K`8`_K( z4-b_3hEU_bJR9VD59QaTB#`obZ`vmA+lyCDlA87a6M7VwhrDqwGkR@$on#D7oYfK^ zun|b2%YX+#+AFrZtpm4<={sdwnyLWbQ)5J9dZgJ5`4oxo(Gj#~7NE9Mz?dk#DQd|s zsYTiJ6t%*w*%x9>U`*T#I%-?chDq2P?~A2Rhi-rdG_P`)nk$_@-gzHaHfx?yJ)dVT zxyyV?Cp1>h8qAz`7x^U40keiM=am!O3zO(%Nunq=)ccio2v^qh)cjBM;aaNvWW!Fb zuwp?4v#f4e>$5@kf=|;<=NxAvB;2*aXn4w}Y1k>G3%vuUQ4oGW%&~`Xm-H6qR;KIu zyT2pn+s^g-cR~seC$Z~)sFyxKj|<%*9fAD>kfQk2eyq^&+rAyJK?eMSYX7by2aw;H zqWx_Bk@W{d^lQOyI+pZ%*91M)w5Mi|eQu3}w+;h`a~&kzYNS;btf*A`$L))Sa~yPn zVfO?L0HG2VIvRkbkFKVx40wqy-1XfSk&j9he4ZOPXKg(J-46sO>$;BBLsVK)D;h?* zF4l|8^#6A+9OIG|)dbUGt6WS>kI zinK2xEmp0y&&f*wN@Ttx}6BkBMtWBH?tjUk5am^GZ&H$bi$%bZv zI~)504PK;6f*v^9p!NYD(E(z&(#Tk2CkA|weSjvtfm+&bK&h&Ocqa^)8Z_Tw?>UFI z(FPHJnS?c<#LgPvnBKn8Dd1=Cp-dwyMVTsRHaiey9%kist?(@=HIbBhvqvbE3;4)B zA~p;JEd=*j>{!kPsccdrXt3yckv-nWaK$T6$WDGi8wT(fITzuH?#wX!nQF`dn#qcU z_V0p}1fA<6kjy>HYDw%JZ{>XChX;F~vp;w&BO>8ENG8# z+rc#~GuM4J)H;w^PvtS^HsF2;qbaIRj8}!|>;KU}Nz?-%t9Dv3dI0ri#0$;>W)5f; zkZ<#aB+(5b%`x+qlkz}Zei{u5M!G##;7z3c=W8)E8YyCM&V%kjXbl)r@-bvu`p%B; z2xmt#>K2Rgn8>x&^dcQxYTFQ@W}^U^0k*+&$%s)o3&^+F|0E?BSiGp1k-;iuMAwA4 zsK7QrPtQ18=l?p{+K)Lbw5LuY8qgm%s{KaezQrpeZLlxg(12G?8hmo0MGj_$`5iBC z!?kq+)##3Tt8xQ%--uHH?ygx?BY7uA0$EmD70MOH@Zgem!kG*SPqKqW`UVKE8Gv@= z+~bqnb{mLX33!ijzGw0>%!Ib&lVc>LkQ3~nbH0Vu6ja;;_9uaVd`0fX$eg7OoB2x( zWDb9~3vZ!e9m#PP)RLDdvrA%et4nvSX^>Wns-aoXx!e5Yi4X$CuB9%0@kQ*!)L6Pv zq+zOM&U3Z$CY*S|V*|Y|-9MH<5)A2f*)+;5Q@TUvDDd@zHbyyKR(snz5ESZa58)zI zHpr^wX~HgAgYSAE^Bqrpb%Fdptpvq+7i#pbcZUm{Hs1Q;3yuPZzEN&JXaB7MQct+2 zVOSj~pLh|8%u%{0aNb{E@{xhwg7%jf*f8cV>^QFE08Ml^cJFP(I_**7-5PKS-l)WU z6jy^@MEFU&zp2B0rJs(9vGjDcf(<2d%Sg`xPC?KIViWLZ30#wj3mCe>5QO<1Y&MRB0UuswTit5D;Qjv||@S3a4 zn&PuK=WcJIeCz6E&L%d7`K(?nvT7P4Yw8JC*jQT;C_56+H$}xf_KvdKbe*%e={h3d z(iDH$pFehm`Hd1Cg_|^Sqs(~#)Ntg*%)sa&+5%K120}%z5jO;bnpllK0A;~^xRtIB z=J|%8dP%j?sYXj=#XeREs))JR&Zy9u-3?+_q;h%#xk>#MS|dT%~4mMJKiQGoT+( zuZ>&C%n_C7&Cj&#Ah5;A8G?{8{vIqo!>ZAPHb8g|fp9N;Z@xj`>#q@dTU;*{&18;k zA@KdsM@H-*V0!o6H40`H=Q9n+<9P!W(So}tDUr#zIjK?3T&a~0#Ykqwf_4fYF- zaz}}?iHWo~9SUf8>6Eu9A)a?qD`Q{przHOu3d7Zc3^%MUES=qylbmNkV$E{zAx z^1{**%)R`j`;^quZ{b?74EiXSIpLbS@`6EIxzD0jQkCD9Uo1KIk4hxxhmt)4#t7ND z8^10&=bR16e$YKY^_2Rgso6NA8L$IV+8|&IiGJF#e+CoI9?V^dA;|8>2Mh=oS}RaY zAtQ!SwiNIX*<%R4fV*QGp(&M|D{V-l3!%>${Xv)N3pJ(s(gN%Zbm2@NU2?YY#BI9H zZWeFn;gy>Z=yL|9aHCbwtmelQ#*#g|D;oJz>?B~C#1{phA5%!dN}{Q!4PsNUSAjiX zvW|B5ONLYtF+Rxac=0N8@?^KlCyf^YuY;S&9FbVm)9Pk?v>}u~3AexhaB@k>71pX% zY|MU~S_m$1{RNa4YS`UC6A3k};+1c0$1K?&IIV_t~V)fTyj2mezd9-OlGB z)ERgv-sc2n?G=}nu;XgQz^R1X8-aaZC$JN9&c}|*+5{Y<7Ue>t!_Dw|QMEXUJ}9xy z+1DRA+)t?6WS6+H30&cGE8bF46`gQBR0%D?l~q`qV~8A0_d(LD29_@qYDMH;3FhQ% zlB}5n#kImqscWE_c1@cMZ>2&%tv)%6?3^CS%2SYWrVUa2jQx^=c2b8MpWE$(s%{;Z zn1gbsYS)&;iktBUSZE_%q?P7<+3z;wLYxj^)sMmbJg9k~EE{^uhiyC%La6o!!pVPU zzJc0F+xOVdI>5`US0LVMO7^fsM%U>8g^B7s>>TRYjXg0DW!-0s#GaVqIFk>_Xxx+} zVn?OAmDn?s#TWB+j&nZ9LbG_!DuqcFNU{3SHP#3Jzh9xUit~Vj(!#3k$%r zV1PE-?+qvJ!qHwQGzp4gBxGO2en#-LP?SMqR?LSir+6hDEAk}Aiaq97+T)kRoKBUM zSR&RaKahUNTn+7Un%HE_==A;Qh3jehwd^XYhG--o4crQJUy;+!CL8Jf;3Y(S9MPRZ zZsE+)9y%z}M_UJ()ZpL}+XnhVOA4rBtO~o`09&}PAJQBU z(yY-*gjAqklT=-|kV=76bV^XIxK1o!e&D$ydYNIaQdG}XvhTxO_4Dmb4F>l+?h!DL z2}bCD=?OfJ9`L`D+sB?N^C9nFanmf^QU-7aNL$y4uy0h995vUsx>w3@%b1JzHte`% zbWzioHOlv;AC_1`d)Spu6LYCXY)pokv`|Kh z)4rXQvK)F^q*As1a(JYvpCy8Xq6R6xAj(=&5P)z5AZ&Yvs>jOM6^V0iFtsTVx5gAf zZH64CX$!^wfIHE^i&Qwr;*K4ogKmoyTF;aM^Jobz)cJzJ`-t;F_cyRXfgCAr%#Wnk3TJnj2k%yVzZiQ~??)S}awbI!A<4VCx&>ChC z`9g4i@_t)L1LiZqbfJMxQW#CvTp!+&#a-rL;FIL$dN)>p?+T;MAGF9u07oH|Tyk3L zF_L&Ik!%DXQZMf2FFTtdCpE;p7iD3kDdIK}xT_cW*n=XBW1R1C_M^L|M&ZsDSaO)t zj@xZXBW;<3JCtJr?z0iJopi`wpC3&ZpE3W(iA#p{WPbH>Y6x_{pS9#&R~YcbZ*HQM zN9GAOXX|ytnGC4F!IeMy^cFf7wfKE+cpN)M9qnN-xI~A4vQ)_k=;KFO!kI&7;=^{`O zyTCPetEUIE;#yAwRuch6II}zSYcu!0tYm@3f|^8L;Er$s8_|Kr0O))Os8hZdbXQ*4 zL}lS_%S3jCo+>anY}B96bWt<5fXcLT`O3qh3E-0&vNC1LRQ$ifIc1TF4-;-L%Mheb z6>|9%=S*BFaDY)gki7S-UO{yFEx~QyL%MSY@MYDCUsi6BL_mX7oycVf)PSsog|>0^ z(s>u=LFX6Y#%h$z`_4AnqMQd>l)#Pk88pZdZmf%SqFR|PQAf|a$i~&m1#Ya1wF=wt zc^7Mg@WMIO37G-U{iw&oSw?WCQQbWJV@SQSw1WQ|_(wL#p?OM8c(3Y%8f4(Tg3B|w z0b?Ax;}zale1lw|R)Aw(i5&5Uj%NVL(ciM}58w~)YiakJ@XH%%Lem_r;$7sHXqU(U zx+mu6*k1l2(B-$Pmkg$`|9t|}$2Y|gx?T2mHY#&(jr=7A)&uCxr*P{|&V)Ugu6R&V z$eXNGR|0|Y8C5S|9^Q~w+BOl+Jh(tx^s>{QM6Djgts7}~32LQ=zdYbCfFJiuSii2i z;z^FI40#f)33^1bR|sF~gfFKer9$}9@8{sBd|!|hS#BZ4{kn;+wlquiacIg4dqbDA%A-i$GddvqEGy)A>b25cqbIQ*J0ll!%Yg#Po z1IjfmGVnnZtj8DX)h*I zvqZKnbpDwF!z#}zFn(DWCb7W2T3zy69c5X?G&^>$u3bHYloAwKJdA11w{yRWT#p+A z@fK07v>F<`af*UwO-)|LI`X<=y(kn4CM+VH`o)|>G}no-} zG?=SF?ZHXR8f&g@qYUD5!%73BxBCLxlIJZmOY)f$1qHE;9bG=9pl>HyRC`Ec|ESD?gL<69ZHD{XkKFJTtN< z>dbD6BBlcZ{=^SEF<|EeY{7U?&FboPg~P*wq31P{8&C?8|;z zqzc%H0XrvPy90K0z&;ePJpuc&-xjL^c4ENJ3E1v{T^+Cw1#C~izU;Rps(_ssuyX>o zJ78A_>_Y+D6RIBEd+@jppZCB<9CkM05}x$#+ucd;L@vmB)7?6|FH@G>UBS1d1Xl#XO5% z@l?RQ1MWWt++SJrn8o6tNZ`vs{5e+jo(hfucc7O!+muW=7RUFx^d;WY#)JvOJFX^Xv<1)8^dyt#LWxft>A8vEKihCUInu@tifY?MX z4|`&kK;@dcL#(H`YHoouZt759urrR!WBS|U5U(F2(b41S%nhisikt3C;U?qkL*B8k z2etG9yUweICX5uO#U6*-vA;Hmx#~l5&h*}ROw$sxQ~tE*5af``8MNxX`S|xK#4s7`R^RO%5eaAFX3#S0sMvX zz0PGgmFOYLx4a578|B-^ zO1Q> z@7_*nMauQi;YgiT6D?0j$q6aN2$3V@joT?lA?49HgrD&tr35LHMo3X=?7U*MXKnlh zlxyHDD;5|gn1*niY{H7s+}p!w(-`>&+%(G=j$84jDN6DtaV60!uCkL&QS)3Tjd--> z0lLPLEWAl!;3feQ>AVathf#c(mga|#raSoL1#wZxUB*X&3PJIpL-6y3@lS9!$XN{5 z!Z7HI&w-o$O!}hZ5*fK?jGU$F6jx99X3r!~{=+t!dubTWt&3W*h2rwTO+X}RRq-(x z8yDgu;g-Z3F}8a!(m{@lhmX&cq?(&WQ< zUv(X~J>uJHT1RI-#jY}cfLU>i9fH@7XpE9zuAoY@BDju1AD^%r66ub5(x?2lnE4a! z@jK}{swyQBBdOzQgqX=q0NhWKG{V?D+}rORt2i?>)S%yep9%fG>nq5-Vq~w41Kc|n za^@v7xk-AFJ#7T~vZHXGlNANx=IE&v57^VDY}7;l2o7tFrcox51@By0pJ3{&PXI5X zIwrA`QLYWSsF4eeTrk!;GSIUsG9yvK==k3wB!!&}sg!ZL2_~g(h$)zEv}o-5j*WW7O* zQI8SVezR|kwg1Rj*vXhT^H+o!Cg>nRZAvl?5f7Jaw8YXMn$(tYmSDSqGh-a7+t0?E zJp<#d9yZ>DvnJTQ;^wzS=@oo`lr}b|6F2)Gw;vl#^Dn^I=9MJT?eFL%JY;5h?3*1u zdU3}sy|m+oUewWr-nmapx4*5IcU-}k9Lt$jh~j)0jpN(*kuUkp!vAE>%HhFCXi74* z?-5G5>|NWwo!l$)za}X4vrudrBYVI<3)#sl-t5RAX**bk|c5B)~iB3;E&}m zX-xe0c)N>8V+_FhEr!knv3!?DiMKj7Jpnsf2(-BkwMRK0u|Mp5 z(Z18!algv`b*d^wH9Wlar!-ZNnw?J%rz0b{h$$K`8xkvSYco)@FXa4`BGDX2*?1MzXoyPtqRl) z+}nM1U= z=pIw3D8UjfNr3cCG@#iZci`*;Dtok@=)!1ERgDO5y#^Q!98J@sBX$~~MF-zOS}W%l zKJfkUNVUJkzE_!cxq=#cks1ec{xeIj77`CshfwXCUUgxlA%L|FG~%%pLV1=mh#1V zhI1m#C(bJk6l8>G`%iYz{*Y#N3X?|L58Hp@XCj~RNb`pCa6QEwLz-9Z6+#+I%J^|K zWISHw9|)w`A>b(xljz@G;EGtQx&Q@m5Ew{TF_HmIBJ@J{4*Yy{6dr zr{cB+I(DN%uvV19EP^Sy3&&m$S_XZqnp;cwhq`}uzUnM@rEnXwp5gHHpz{}K>q{)@ ze?MJKGcU)}*v~GwmdoGu6x)8oT(|wk@e8@(_AMF7A!dnIY~;9gJ~i%TFiyH!2|TS& z0-n1`jk-MWD-6G*@=^ggyuTvnrkg`N-`dvt{oZSXV|1W>cD?6#6?&?n5u2M#i#3t7 zhMS`~K`S*gKuC^+b}z^!Q^gUp=(tF~xm27Qk;gS8V8j_|+af`uP>{{VO=LQqCFb=W zJI*UDz&hu#(Zk6oZQ#tss?41HQ8>5!4bBg`6{-0ujKQi=wCzE(@j=o?;89N#Y?p5z z$$6SaPDC!)_ly&{hTE;h9g|m{mE8;ft~tG}9Zzfgt<5n@(ArGD-+N8|j@J<=&w}!1 z63A#S1z?ayV1T}UG)eAwm0!tCDtWi$dhs~TY)IJNn%HnERr4}u;hLP7gPx3NdK*1) z-N`9j4wuKx8q^$qid$fQKVvp4t)opixj`q`I#VfT4aGmEd5Yj%=0ax*^Z}#@+~(Ia zpXbY6%lZ4VSf#n2MsNYW?Gq zUIbdM@vd=+TdvFW%}m=YaQ5uL==yb5t~J-5IXRbEs4HZm%~{ND)L&yfQU^j_YSw2 z9W{*No&)ci)iX0b)AI;t1AaNFQJj_L{FXV!ZHS>yJ6I)`YoL!qV>nX?iJ9w=kAUpW zU@aN7oeo!tX3iH=T=57!sX5U=b0+54?DgjQQ=)O;-8gwOB8bXn9K~_2COSmpKh5Oet>SI`1G$R9hEtgnZqCB2t~b92)oMv>~dvJ=RZu6^9OM*%B=w|1-QS8cXp@2 z)WS^d>FN3q{ZjfyXW#jotL4^__rz{I&OOfMIHg(df(F{%^L*CZy86lc9L zo@N$(al`hy`PtJF>+8(RskHgoudeIPurW0FS$a0=&e#vpLBcnm15;4w@Ge!)W4iHn zw-9!8u-2XgD0cUJ5SaT%1?|Ys8^lwdoAx|cC-CJJBK{S$RH>t>&CHF(k>(wzRHJCk zdCp{(dj5+3jY0o*_v}Fb&go5Y@~@L?nRrJ9Wn<>hILkYJX4W`Toay*hK6sp-b|h=g zAH!P+<~^soQfY3E{by2wfy&3+xC8pa4GqrQdfQsEzIc~$bMlioTX7^;r#r)$gjU*t z+xT0S=NzS3gjI07eH7}WbXMxlXpHvCKsu50uqM)ecsP2?SDi}VKi*zxAC*9Sk3*LR zoi-kOM0xz6(+gZzQfS8&*J1oW94|YKn-a%i=WEU@X^j0fS2AR6uTWd&90R{yuqH1V zK1Xs~h*#<=hqMvxNO6=quHe-B8Q-82Psy2$I%2Lp#g(ix*PgT(==>DU zTGGN*^X1@A`@nT2U1$UTlU;DM^NRDebUK-_U$MUiIKJXaK@8c~5~#-6H|$sVz3BP1 z&T^y?;J~khhI;I;D@XWIm_K>>DSQ&? zL4Jfm<~YoM?5Z>bk0%hRl<)Q`h25#Udm~^VA#1MViXnmjePDIy?tYZ44%kQY_@5|x z`dXMZJ>9RY#e8{<%n!^JoM)4apb0M`__Tbzcc9ZSB|Kv8lyFOfInEoNC~=CX21hgq zK84_u`+c4teN-YXNIl%Zp0vC7-nzTHyJszaZ@7gQLnu$We4QtZr1Q*yZighj*e4Nu zGvJF$q|GYtHBqP~R1$9;Y8mVlGdrx&mK~6*>OWO)Dv8)Z+~6q>?sa=*LMW;PTGPx;D)$)Kle+BePoD)%sMS$%N zZ#3a2z$s$_`Y8xJb?Iq@k34lM-fN1ex73?yPl#_gw0p)PZnzLPbSmSI@#<0~qsV#j z2XecQue4Q?Dx81JFL?=9Pk%z6O(XZet;&33B?GKgl(dIZ4WS1Jrp>xG*+C#?h?UC$7?r zBP9S60G8K@o(2Q~y&E`VCqgC~w}(}sz|01i_j*FuU>~FfJdo)T#zhzA36aY9p$fWj zy`*&lPa6qkgAsC${|W0#2uci%ChzIY2JZwoU2grz5gUGQ>4&n=#n@>j{Z ze#-MzL^p}WGmMSN0$$XeiL~KZ>F8@$Z|-I#2|cYtSwnhrd{pb0RBi9NgS5{eExDr| z3inpHiGGk`d?&_tcu$l+TU7$+eUZ@JdfxW5GcqEwDi54kU*ny#P39e~5!Ox2o_I-{ zI5`>ih}IbSxi37aH2){$AVLlW$l>=XYvLo?K1z7Qd(`*?^#b2)dkkNitdHUgO(8&2RYY|+jZS~2d1Z~^4G?K5eZHr+S^uO=$JZ*g#{t)Dxht}d$hxR^b zn~NBVpU!W$%|@<_bvDv$MQ+Qi55g4&*AnY2xMssuYMlvJbeqFAL-=Y;_H=%fZ92Xi zX`PN3Y1=SpW!@7nZ!@H61$#)E-ybR1(zZc?aCN{A55xxtY`N8h?_@Zc{YI#xY`lV( zq~`Dst(@R-qCJN0TdfC z7O0MIShnMIs;UErkdC(0#E!qD#&mp{ozQW@Ski$vrd5RAOK4RBy_c*fgnzB4r~6M7 zC5C;o3?>FNdG)VMIrnw z35Pjj@9DYzXM{DvI4Eie;(Xu2{I;j(>)ky)r>uA<`J0~Zo1mBJhQh?b;5}9?_Hgkr z>twV$6SUJx+a&bBfOOitqa`?BG{) zp+QZN5-Oyf#$U`H-H{DrMfyU%1OMIpIa>gSq@;>E zl91NQe{PFM+K_ZH@{^@2g|xod+x@1Fmf_7txnBFq`4N0n-lmCfJ|B9ESNL%u$4`hYf%axdQi6m~xmh7#B ztJyAmL1dkvdphe`xPOnYv;3>s^}$$+z7bY4udtdu6Ijg}zWjQ;mjBAXVqFKPPeM=I z=eBCVKgIeRj15Vf(Z9O2X#;B!8(52&z*;mQuokJTze4)3HtNiL%(}zlY5vvpHStkx zFDLYPUoyT&74rMB%KaAMdr`lYsNWLQbsPUXTNO$h1RkA6^jyEJW%_STcxVlJ%U4+| zk)x(H$yR}w5vb<|Bab!oiEKB&9;@Dt)@j0OhZ{ZLE7rwGOK$lz)>61q5!U2i!{B<+ zzly>2oUqb`AYG0PdjGI$J#5@Xo#*q&8V1NdW3}V!Sgda|tPlHF&g}VoHjEW!G7J}0 zK;{5%W?9~3{1)}OKYI?JZtQ?-Z1zL^X!Okl{*v(={E4<))H2eVi#)fsJuIwzVQq7* zGvJ@y_MoudMWZe<+ccprjPVLx$lr(A^!WJu_tFle z+U;NU;A#|HB;7N&W4GLPJ#{*3x51XeJbDA@6~-Pn0|6Z&7r{V8uD#TxYV@bsZ@t%R${aEzqG zeO;8_)oQhE6Z{Iqj!g$u2XT0r7wM@E*7$p>up?r;rehGGdf)iO4mIl2kMv4M7(zmf zSshA49ho8c$|8)4Ew**U=i`yzN<)`WtNYHogN~%55j$)AO5}<4G=ODQs-q)XrE)7Af$LMP><=xPtp3RwlpEM zAqD#p>dR%1Y0oq~FMKx$c?B7E3+@57WFdZZc2aw)EeUQ_iX8ugh1OE-aoNM$V~l@6 zj?u;w_^;27Yu6gv;2LZ^g8!QAVeL$+qJ3cY(DnhwneF|J8?Y0FXB*o?36JjA)!54u zv6p`c#T%{IJCZQB9*3=ld4lX8{{4i;-b7>G&~L-M4D&I}H5kkxn(z){PojV9+jr=V zaAS|6x5LJsMD{8AS=iXa=>4!sey_s(4(3T1Qsx%p4XW_`@3WQXKQtbN>pkPg`2V)? zIR3wB{0#pOXG_k%3Uko-C-`2%H?=Uof!Rg)Y6849Pe6u+#mQ_S!S}(_PPj0+yLfA) zy}UL1aoZ`xkLLes*aUgSkI4BIX9cxYN+e;xRRhhp;BxumE`A#5-FgYSq#&W80422h z`rF(hThOR*Xe5qhlZE`kVrY+)P`AOsA)GBn)1GTpG5j@wAE$HbbC7H$yeLCJN7>oclf7FG(v{^{D!=rGnj!<_1=#YtbY|!fv-Lklne#ij~#gJ)=d-S4hXOMt(#APz9`3Ci_$)f z)!H3?Ui?_<^tB0e#76$-F?8fc{ztBPGBwGKef}e4M@_2YnlJSHvOZux7qI^luxkVM zu7KT}?&X00-GKeM-)^}T@Ne_mC!z!X-v;d7{I>i3Etdk}9|r7=e)~jNz`rG6?+MsX z1njba{dB;7HDFf+>_9%hZ1($G+5+KC0soDxX*0Ep$_kg37Wp|4016tQz5RQ{QJFS! zdHy36h-e>jSwdiSI}#4zovY;qnYj27!bv>&^`;qFShQ?pMWL%~WJPINWuiawj{hVb z`Zm)td{!@GKT5U{pMXZw2W>le6cvjNFWDSlKg>%#ulIC(eK?YiceuuOulU z4qlO8QCU{*SXiVjFRCa)sCiblO*>=a%!#?$XxF_G6qFV@%AKf|*0mTPRsPdtWlJmn zlXQUFf=NY{ma@f`M(0%=CBQf@$ue#WAsI+5ki|iz*7rU2a5H2yJ#eQdv}fk4Wks zSzv=F|ix(CZ>U5X`_eiz0pb$B0bIO(@V>lLN+%uVLF$#Xff&40#<`x5&K!Lk$BP4xy6))O%E?z_FN2-bY-E3$>2L zD=<6*<^H4k7huc@69$7ht2eP9-gg1(uCaN~k_nt#ix+B1j@n1c%N7Zf%UtwGS$UE6 zj;hWebBxO9?TOx=^9SFNuD2^I%UATS69g{zNP!8sw0yBP5yQ+vCZ@Kiyu7UZ_F&>1 z6_s~ZU`pB2#g*B!rUJ}{yYlOeNW1+hDJ*x|jEqSW7fhO%yI@Mj>;>dQ|BTlza#WQr zMW@_dtKM9+k2qYVey}fgmo8mMaz)D*kcFo=2f=;EGn%9z;yRxWpe%%6{TTFJda?`Rl`)@GEJmKCJkb8{h^LZH_u2T6t{ z5JSno`A`@E#8+9SEhsIkDAEe4mpfghMcP7FML`8t7FTJhwhVKh%6Al^UlwBXa29GS ziV86GwH2ebwfER)$nHq+Z!wG%Mh+7M69z+Y z>i#eTUhn`C0^y7(r18_Xop|hs3wylUzZr+5PAW z1W{`DioI(06QJ+>XFqY~e-=yPQ16svzfDw5}1^>iZ7HbZ|X9@w9;aM}M z4Ievp)VSeEh^FrJ^`2ZvLjPA3<^Kw8LRz(Zix1``%n_JZU|xgyNklRtKdFTLZ!2Nt*d~dp5d*7zMxP8C&rzhXvjN<@9~?_ijvW&^pOa4BD&s6_|qof8cy9{v2VTgZ}^W6CeHW zwM6_H;PBSn--`c$u;#nN{#`!tJ1Fb-FoF7$x`^LUyPGghni#*?k8#yB047ZBChlI- zq(qpc&wrrP@BVk#2Yyz&4_t=%{*Lm##qxmq4|x~nQB@$Z7>|NDH0pudLTj)VM$yyv(7mH*=Ue=TBf3e!|xHH~&by_Ft{) IzcJna1)P+T5C8xG literal 0 HcmV?d00001 diff --git a/gui.pnproj b/gui.pnproj index 1f7a403d..9fe30e28 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/gui.pnps b/gui.pnps index 9c9f0964..02896194 100644 --- a/gui.pnps +++ b/gui.pnps @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/homebrewboot/HomebrewBrowse.cpp b/source/homebrewboot/HomebrewBrowse.cpp index ea3bb3b4..4791a517 100644 --- a/source/homebrewboot/HomebrewBrowse.cpp +++ b/source/homebrewboot/HomebrewBrowse.cpp @@ -19,6 +19,7 @@ #include "homebrewboot/BootHomebrew.h" #include "network/networkops.h" #include "menu.h" +#include "menu/menus.h" #include "filelist.h" #include "sys.h" #include "network/http.h" @@ -33,8 +34,6 @@ extern void ResumeGui(); extern void HaltGui(); /*** Extern variables ***/ -extern GuiWindow * mainWindow; -extern GuiSound * bgMusic; extern GuiImage * bgImg; extern u32 infilesize; extern u32 uncfilesize; diff --git a/source/libntfs/ntfs.h b/source/libntfs/ntfs.h index 3df8ed75..ff2af30b 100644 --- a/source/libntfs/ntfs.h +++ b/source/libntfs/ntfs.h @@ -139,12 +139,6 @@ extern const char *ntfsGetVolumeName (const char *name); */ extern bool ntfsSetVolumeName (const char *name, const char *volumeName); -#ifdef __cplusplus -} -#endif - -#endif /* _LIBNTFS_H */ - /* typedef struct _FileInfo FileInfo; @@ -160,3 +154,8 @@ struct _FileInfo typedef int (*_ntfs_frag_append_t)(void *ff, u32 offset, u32 sector, u32 count); int _NTFS_get_fragments (const char *path, _ntfs_frag_append_t append_fragment, void *callback_data); +#ifdef __cplusplus +} +#endif + +#endif /* _LIBNTFS_H */ diff --git a/source/libwbfs/libwbfs.h b/source/libwbfs/libwbfs.h index 9c8508f7..2b21de19 100644 --- a/source/libwbfs/libwbfs.h +++ b/source/libwbfs/libwbfs.h @@ -11,6 +11,11 @@ extern "C" { #endif /* __cplusplus */ +enum { + WBFS_DEVICE_USB = 1, /* USB device */ + WBFS_DEVICE_SDHC /* SDHC device */ +}; + typedef u32 be32_t; typedef u16 be16_t; diff --git a/source/libwbfs/wiidisc.c b/source/libwbfs/wiidisc.c index 6857935c..ce1c38d4 100644 --- a/source/libwbfs/wiidisc.c +++ b/source/libwbfs/wiidisc.c @@ -154,27 +154,32 @@ static void do_files(wiidisc_t*d) partition_read(d,apl_offset, apl_header, 0x20,0); apl_size = 0x20 + _be32(apl_header + 0x14) + _be32(apl_header + 0x18); // fake read dol and partition - partition_read(d,apl_offset, 0, apl_size,1); + if (apl_size) + partition_read(d,apl_offset, 0, apl_size,1); partition_read(d,dol_offset, 0, (fst_offset - dol_offset)<<2,1); - fst = wbfs_ioalloc(fst_size); - if (fst == 0) - wbfs_fatal("malloc fst"); - partition_read(d,fst_offset, fst, fst_size,0); - n_files = _be32(fst + 8); + if (fst_size) { + fst = wbfs_ioalloc(fst_size); + if (fst == 0) + wbfs_fatal("malloc fst"); + partition_read(d,fst_offset, fst, fst_size,0); + n_files = _be32(fst + 8); - if (d->extract_pathname && *d->extract_pathname == 0) { - // if empty pathname requested return fst - d->extracted_buffer = fst; - d->extracted_size = fst_size; - d->extract_pathname = NULL; - // skip do_fst if only fst requested - n_files = 0; + if (d->extract_pathname && *d->extract_pathname == 0) { + // if empty pathname requested return fst + d->extracted_buffer = fst; + d->extracted_size = fst_size; + d->extract_pathname = NULL; + // skip do_fst if only fst requested + n_files = 0; + } + + if (12*n_files <= fst_size ) { + if (n_files > 1) + do_fst(d,fst, (char *)fst + 12*n_files, 0); + } } - - if (n_files > 1) - do_fst(d,fst, (char *)fst + 12*n_files, 0); wbfs_iofree(b); wbfs_iofree(apl_header); if (fst != d->extracted_buffer) diff --git a/source/libwiigui/gui_bgm.cpp b/source/libwiigui/gui_bgm.cpp new file mode 100644 index 00000000..9c7ae641 --- /dev/null +++ b/source/libwiigui/gui_bgm.cpp @@ -0,0 +1,250 @@ +/**************************************************************************** + * SettingsPrompts + * USB Loader GX 2009 + * + * Backgroundmusic + ***************************************************************************/ +#include +#include "gui_bgm.h" +#include "menu.h" + +GuiBGM::GuiBGM(const u8 *s, int l, int v) + :GuiSound(s, l, v) +{ + loop = 0; + loopMode = ONCE; + currentPath = NULL; + currentPlaying = 0; + + //shouldn't be needed but + //fixes some kind of weird bug in ogg system + GuiSound::Load(s, l, v); +} + +GuiBGM::~GuiBGM() +{ + if(currentPath) + delete [] currentPath; + + ClearList(); +}; + +void GuiBGM::SetLoop(bool l) +{ +} + +void GuiBGM::SetLoop(int l) +{ + loop = false; + loopMode = ONCE; + + if(l == LOOP) + { + loop = true; + } + else + loopMode = l; +} + +bool GuiBGM::Load(const char *path) +{ + if(!path) + { + LoadStandard(); + return false; + } + if(strcmp(path, "") == 0) + { + LoadStandard(); + return false; + } + + if(!GuiSound::Load(path)) + { + LoadStandard(); + return false; + } + + return ParsePath(path); +} + +bool GuiBGM::LoadStandard() +{ + ClearList(); + if(currentPath) + { + delete [] currentPath; + currentPath = NULL; + } + + strcpy(Settings.ogg_path, ""); + + bool ret = GuiSound::Load(bg_music_ogg, bg_music_ogg_size, true); + + if(ret) + Play(); + + return ret; +} + +bool GuiBGM::ParsePath(const char * folderpath) +{ + ClearList(); + + if(currentPath) + delete [] currentPath; + + currentPath = new char[strlen(folderpath)+1]; + sprintf(currentPath, "%s", folderpath); + + char * isdirpath = strrchr(folderpath, '.'); + if(isdirpath) + { + char * pathptr = strrchr(currentPath, '/'); + if(pathptr) + { + pathptr++; + pathptr[0] = 0; + } + } + + char * LoadedFilename = strrchr(folderpath, '/')+1; + + char filename[1024]; + struct stat st; + + DIR_ITER * dir = diropen(currentPath); + if (dir == NULL) + { + LoadStandard(); + return false; + } + u32 counter = 0; + + while (dirnext(dir,filename,&st) == 0) + { + char * fileext = strrchr(filename, '.'); + if(fileext) + { + if(strcasecmp(fileext, ".mp3") == 0 || strcasecmp(fileext, ".ogg") == 0 + || strcasecmp(fileext, ".wav") == 0) + { + AddEntrie(filename); + + if(strcmp(LoadedFilename, filename) == 0) + currentPlaying = counter; + + counter++; + } + } + } + + dirclose(dir); + + snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s", folderpath); + + return true; +} + +void GuiBGM::AddEntrie(const char * filename) +{ + if(!filename) + return; + + char * NewEntrie = new char[strlen(filename)+1]; + sprintf(NewEntrie, "%s", filename); + + PlayList.push_back(NewEntrie); +} + +void GuiBGM::ClearList() +{ + for(u32 i = 0; i < PlayList.size(); i++) + { + if(PlayList.at(i) != NULL) + { + delete [] PlayList.at(i); + PlayList.at(i) = NULL; + } + } + + PlayList.clear(); +} + +bool GuiBGM::PlayNext() +{ + if(!currentPath) + return false; + + currentPlaying++; + if(currentPlaying >= (int) PlayList.size()) + currentPlaying = 0; + + snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s%s", currentPath, PlayList.at(currentPlaying)); + + if(!GuiSound::Load(Settings.ogg_path)) + return false; + + Play(); + + return true; +} + +bool GuiBGM::PlayPrevious() +{ + if(!currentPath) + return false; + + currentPlaying--; + if(currentPlaying < 0) + currentPlaying = PlayList.size()-1; + + snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s%s", currentPath, PlayList.at(currentPlaying)); + + if(!GuiSound::Load(Settings.ogg_path)) + return false; + + Play(); + + return true; +} + +bool GuiBGM::PlayRandom() +{ + if(!currentPath) + return false; + + srand (time(NULL)); + + currentPlaying = rand() % PlayList.size(); + + //just in case + if(currentPlaying < 0) + currentPlaying = PlayList.size()-1; + else if(currentPlaying >= (int) PlayList.size()) + currentPlaying = 0; + + snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s%s", currentPath, PlayList.at(currentPlaying)); + + if(!GuiSound::Load(Settings.ogg_path)) + return false; + + Play(); + + return true; +} + +void GuiBGM::UpdateState() +{ + if(!IsPlaying()) + { + if(loopMode == DIR_LOOP) + { + PlayNext(); + } + else if(loopMode == RANDOM_BGM) + { + PlayRandom(); + } + } +} diff --git a/source/libwiigui/gui_bgm.h b/source/libwiigui/gui_bgm.h new file mode 100644 index 00000000..f1731fb9 --- /dev/null +++ b/source/libwiigui/gui_bgm.h @@ -0,0 +1,45 @@ +/**************************************************************************** + * SettingsPrompts + * USB Loader GX 2009 + * + * Backgroundmusic + ***************************************************************************/ + +#ifndef _BGM_H_ +#define _BGM_H_ + +#include "libwiigui/gui.h" + +enum +{ + ONCE = 0, + LOOP, + RANDOM_BGM, + DIR_LOOP +}; + +class GuiBGM : public GuiSound +{ + public: + GuiBGM(const u8 *s, int l, int v); + ~GuiBGM(); + bool Load(const char *path); + bool LoadStandard(); + bool ParsePath(const char * folderpath); + bool PlayNext(); + bool PlayPrevious(); + bool PlayRandom(); + void SetLoop(bool l); + void SetLoop(int l); + void UpdateState(); + protected: + void AddEntrie(const char * filename); + void ClearList(); + + int currentPlaying; + int loopMode; + char * currentPath; + std::vector PlayList; +}; + +#endif diff --git a/source/main.cpp b/source/main.cpp index 64919f01..870260e3 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -31,6 +31,7 @@ extern "C" #include "settings/cfg.h" #include "language/gettext.h" #include "mload/mload.h" +#include "mload/mload_modules.h" #include "FreeTypeGX.h" #include "video.h" #include "audio.h" @@ -255,7 +256,7 @@ main(int argc, char *argv[]) ios249rev = getIOSrev(0x00000001000000f9ll); //if we don't like either of the cIOS then scram - if (!(ios222rev==4 || (ios249rev>=9 && ios249rev<65280))) + if (!(ios222rev==4 || ios222rev==5 || (ios249rev>=9 && ios249rev<65280))) { InitTextVideo(); printf("\x1b[2J"); @@ -409,11 +410,11 @@ main(int argc, char *argv[]) if ((Settings.cios == ios222 && IOS_GetVersion() != 222) || (Settings.cios == ios223 && IOS_GetVersion() != 223)) { - printf("\n\tReloading IOS to config setting (%d)...", ios222 ? 222 : 223); + printf("\n\tReloading IOS to config setting (%d)...", Settings.cios == ios222 ? 222 : 223); SDCard_deInit(); // unmount SD for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS USBStorage_Deinit(); - ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223); + ret = IOS_ReloadIOSsafe(Settings.cios == ios222 ? 222 : 223); printf("%d", ret); SDCard_Init(); load_ehc_module(); diff --git a/source/memory/mem2alloc.cpp b/source/memory/mem2alloc.cpp index 83d2cb7a..c6898b4a 100644 --- a/source/memory/mem2alloc.cpp +++ b/source/memory/mem2alloc.cpp @@ -154,6 +154,9 @@ void *CMEM2Alloc::reallocate(void *p, unsigned int s) s = (s - 1) / sizeof (SBlock) + 1; { LockMutex lock(m_mutex); + if (i + s + 1 >= m_endAddress) + return 0; + // Last block if (i->next == 0 && i + s + 1 < m_endAddress) { diff --git a/source/menu.cpp b/source/menu.cpp index 74025b74..5f19330d 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -15,6 +15,7 @@ #include "prompts/ProgressWindow.h" #include "menu/menus.h" #include "mload/mload.h" +#include "mload/mload_modules.h" #include "network/networkops.h" #include "patches/patchcode.h" #include "settings/Settings.h" @@ -39,7 +40,7 @@ GuiWindow * mainWindow = NULL; GuiImageData * pointer[4]; GuiImage * bgImg = NULL; GuiImageData * background = NULL; -GuiSound * bgMusic = NULL; +GuiBGM * bgMusic = NULL; GuiSound *btnClick2 = NULL; struct discHdr *dvdheader = NULL; @@ -131,6 +132,8 @@ static void * UpdateGUI (void *arg) { for (int i=0; i < 4; i++) mainWindow->Update(&userInput[i]); + if(bgMusic) + bgMusic->UpdateState(); } else { for (int a = 5; a < 255; a += 10) { @@ -280,20 +283,17 @@ int MainMenu(int menu) { if (strcmp(headlessID,"")==0) ResumeGui(); - bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, Settings.volume); - bgMusic->SetLoop(1); //loop music - // startup music - if (strcmp("", Settings.oggload_path) && strcmp("notset", Settings.ogg_path)) { - bgMusic->Load(Settings.ogg_path); - } + bgMusic = new GuiBGM(bg_music_ogg, bg_music_ogg_size, Settings.volume); + bgMusic->SetLoop(Settings.musicloopmode); //loop music + bgMusic->Load(Settings.ogg_path); bgMusic->Play(); while (currentMenu != MENU_EXIT) { bgMusic->SetVolume(Settings.volume); + gprintf("Current menu: %d\n", currentMenu); switch (currentMenu) { case MENU_CHECK: - currentMenu = MenuCheck(); break; case MENU_FORMAT: @@ -516,7 +516,7 @@ int MainMenu(int menu) { gprintf("%d\n", ret); if (reloadblock == on && Sys_IsHermes()) { - patch_cios_data(); + enable_ES_ioctlv_vector(); if (load_from_fs == PART_FS_WBFS) { mload_close(); } diff --git a/source/menu/menu_check.cpp b/source/menu/menu_check.cpp index add798b7..da61e674 100644 --- a/source/menu/menu_check.cpp +++ b/source/menu/menu_check.cpp @@ -65,7 +65,7 @@ int MenuCheck() { if (Settings.partition != -1 && partitions.num > Settings.partition) { PartInfo pinfo = partitions.pinfo[Settings.partition]; - if (WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector, partitions.pentry[Settings.partition].size, (char *) &game_partition) == 0) + if (!WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector, partitions.pentry[Settings.partition].size, (char *) &game_partition)) { ret2 = 0; load_from_fs = pinfo.part_fs; @@ -121,7 +121,7 @@ int MenuCheck() { menu = MENU_FORMAT; } } - + ret2 = Disc_Init(); if (ret2 < 0) { WindowPrompt (tr("Error !"),tr("Could not initialize DIP module!"),tr("OK")); diff --git a/source/menu/menu_disclist.cpp b/source/menu/menu_disclist.cpp index b0e5d965..03a76c41 100644 --- a/source/menu/menu_disclist.cpp +++ b/source/menu/menu_disclist.cpp @@ -89,7 +89,7 @@ int MenuDiscList() { char theTime[80]=""; time_t lastrawtime=0; - if (mountMethod != 3 && load_from_fs != PART_FS_FAT) { + if (mountMethod != 3 && WBFS_ShowFreeSpace()) { WBFS_DiskSpace(&used, &freespace); } diff --git a/source/menu/menus.h b/source/menu/menus.h index 269d998e..b08dd60d 100644 --- a/source/menu/menus.h +++ b/source/menu/menus.h @@ -2,6 +2,7 @@ #define _MENUS_H #include "libwiigui/gui.h" +#include "libwiigui/gui_bgm.h" #include "language/gettext.h" #include "prompts/PromptWindows.h" #include "menu.h" @@ -12,7 +13,7 @@ extern void ResumeGui(); extern void HaltGui(); extern GuiWindow * mainWindow; -extern GuiSound * bgMusic; +extern GuiBGM * bgMusic; extern u8 shutdown; extern u8 reset; diff --git a/source/mload/dip_plugin.c b/source/mload/dip_plugin.c index b154cf50..9c8f11f9 100644 --- a/source/mload/dip_plugin.c +++ b/source/mload/dip_plugin.c @@ -1,122 +1,374 @@ -#define size_dip_plugin 3224 +#define size_dip_plugin 5920 -unsigned char dip_plugin[3224] __attribute__((aligned (32)))={ - 19, 119, 228, 85, 18, 52, 0, 1, 32, 34, 205, 172, 32, 32, 13, 57, 32, 32, 8, 197, 32, 32, 8, 153, 32, 32, 91, 129, 32, - 32, 0, 73, 32, 32, 40, 117, 32, 32, 54, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 119, 233, - 160, 19, 119, 233, 117, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 71, 120, 234, 0, 2, 23, 70, 192, - 71, 120, 234, 0, 2, 39, 70, 192, 71, 120, 234, 0, 2, 55, 70, 192, 71, 120, 234, 0, 2, 47, 70, 192, 71, 120, 234, 0, - 2, 21, 70, 192, 71, 120, 234, 0, 2, 7, 70, 192, 71, 120, 234, 0, 2, 45, 70, 192, 71, 120, 234, 0, 2, 41, 70, 192, 71, - 120, 234, 0, 2, 49, 181, 0, 75, 7, 176, 137, 147, 0, 70, 104, 35, 0, 33, 0, 34, 0, 147, 1, 147, 2, 240, 0, 252, 157, - 176, 9, 188, 2, 71, 8, 70, 192, 227, 0, 0, 0, 181, 16, 28, 3, 34, 32, 28, 12, 72, 13, 28, 25, 247, 255, 255, 210, 33, - 32, 72, 11, 247, 255, 255, 202, 73, 10, 34, 1, 104, 11, 66, 19, 209, 253, 34, 32, 28, 32, 73, 6, 247, 255, 255, 196, - 28, 32, 33, 32, 247, 255, 255, 188, 75, 4, 104, 24, 188, 16, 188, 2, 71, 8, 70, 192, 13, 0, 96, 0, 13, 0, 96, 28, 13, - 0, 96, 32, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 10, 203, 70, 154, 75, 20, 176, 137, 37, 0, 28, 7, 28, - 14, 70, 145, 70, 108, 70, 155, 70, 168, 70, 91, 96, 35, 70, 67, 96, 99, 96, 163, 70, 83, 96, 227, 28, 56, 70, 75, 28, - 49, 97, 35, 247, 255, 255, 162, 70, 104, 28, 57, 28, 50, 240, 0, 252, 78, 53, 1, 40, 0, 209, 8, 176, 9, 188, 60, 70, - 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 45, 15, 217, 223, 231, 243, 208, 0, 0, 0, 181, 112, 176, 136, - 75, 8, 28, 6, 28, 13, 70, 108, 147, 0, 96, 97, 146, 2, 247, 255, 255, 129, 28, 49, 28, 42, 70, 104, 240, 0, 252, 45, - 176, 8, 188, 112, 188, 2, 71, 8, 168, 0, 0, 0, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 143, 144, 4, - 145, 3, 146, 2, 41, 0, 209, 0, 224, 126, 10, 82, 70, 145, 35, 128, 34, 0, 1, 27, 70, 147, 34, 255, 147, 1, 3, 210, 171, - 6, 146, 0, 70, 152, 224, 7, 154, 3, 68, 179, 69, 90, 217, 62, 154, 5, 24, 179, 10, 219, 68, 153, 154, 3, 70, 91, 26, - 214, 70, 74, 2, 83, 154, 2, 66, 154, 216, 87, 35, 0, 147, 5, 36, 0, 159, 4, 34, 128, 68, 95, 28, 56, 28, 49, 1, 18, - 240, 0, 248, 103, 44, 0, 209, 47, 40, 0, 208, 45, 155, 0, 28, 6, 66, 152, 217, 1, 38, 255, 3, 246, 10, 242, 70, 146, - 36, 0, 75, 43, 70, 66, 96, 19, 35, 0, 96, 83, 96, 147, 70, 83, 96, 211, 70, 75, 97, 19, 28, 56, 28, 49, 247, 255, 255, - 38, 70, 64, 28, 57, 28, 50, 240, 0, 251, 210, 52, 1, 28, 5, 40, 0, 208, 192, 44, 15, 217, 230, 45, 0, 208, 188, 176, - 15, 28, 40, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 154, 5, 25, 147, 154, 1, 66, 147, - 217, 1, 155, 5, 26, 214, 32, 128, 1, 0, 33, 32, 247, 255, 254, 251, 28, 4, 40, 0, 208, 18, 33, 128, 1, 9, 70, 74, 247, - 255, 255, 59, 28, 5, 40, 0, 208, 15, 28, 32, 247, 255, 254, 217, 231, 216, 26, 211, 0, 155, 28, 28, 147, 5, 30, 99, - 65, 156, 231, 163, 37, 1, 66, 109, 231, 208, 37, 0, 231, 206, 154, 5, 28, 56, 24, 161, 28, 50, 247, 255, 254, 214, 28, - 56, 28, 49, 247, 255, 254, 206, 231, 228, 70, 192, 208, 0, 0, 0, 181, 48, 28, 13, 28, 20, 6, 195, 209, 18, 75, 15, 66, - 152, 217, 19, 33, 0, 75, 14, 24, 194, 75, 14, 66, 154, 216, 1, 75, 13, 26, 25, 66, 161, 211, 5, 28, 8, 66, 169, 216, - 10, 30, 99, 67, 152, 224, 0, 32, 0, 188, 48, 188, 2, 71, 8, 35, 192, 4, 91, 26, 25, 231, 232, 28, 40, 30, 99, 67, 152, - 231, 244, 1, 127, 255, 255, 240, 0, 0, 0, 3, 97, 127, 255, 19, 97, 128, 0, 71, 112, 70, 192, 181, 48, 28, 4, 72, 15, - 28, 13, 104, 131, 104, 193, 176, 129, 24, 91, 24, 154, 105, 3, 43, 0, 209, 15, 104, 67, 43, 0, 209, 7, 28, 32, 28, 41, - 247, 255, 255, 13, 176, 1, 188, 48, 188, 2, 71, 8, 28, 32, 28, 41, 247, 255, 255, 27, 231, 246, 28, 32, 28, 41, 240, - 0, 249, 246, 231, 241, 70, 192, 19, 119, 240, 0, 181, 240, 79, 27, 35, 1, 28, 4, 96, 59, 176, 129, 33, 32, 247, 255, - 254, 127, 104, 227, 43, 8, 208, 8, 28, 32, 240, 0, 250, 246, 35, 0, 96, 59, 176, 1, 188, 240, 188, 2, 71, 8, 105, 163, - 37, 197, 104, 24, 104, 89, 247, 255, 254, 109, 105, 163, 1, 173, 104, 27, 28, 40, 33, 8, 104, 92, 104, 30, 247, 255, - 254, 100, 75, 10, 4, 36, 64, 30, 67, 52, 78, 9, 96, 44, 28, 40, 33, 4, 96, 52, 247, 255, 254, 73, 28, 48, 33, 4, 247, - 255, 254, 69, 35, 0, 96, 59, 32, 0, 231, 217, 70, 192, 19, 119, 240, 40, 0, 0, 255, 255, 0, 0, 49, 136, 181, 16, 73, - 20, 28, 4, 104, 139, 104, 202, 24, 154, 105, 11, 43, 0, 209, 18, 104, 75, 43, 0, 209, 11, 33, 32, 247, 255, 254, 175, - 40, 0, 219, 3, 105, 162, 75, 12, 66, 154, 208, 10, 188, 16, 188, 2, 71, 8, 33, 32, 247, 255, 254, 185, 231, 242, 33, - 32, 240, 0, 249, 149, 231, 238, 75, 6, 34, 1, 112, 26, 120, 91, 43, 0, 209, 238, 247, 255, 254, 10, 231, 235, 70, 192, - 19, 119, 240, 0, 93, 28, 158, 163, 32, 34, 205, 172, 181, 240, 70, 87, 70, 70, 180, 192, 28, 6, 120, 0, 176, 129, 28, - 15, 70, 144, 40, 224, 208, 24, 77, 145, 35, 0, 98, 43, 28, 3, 59, 112, 43, 143, 217, 13, 28, 48, 28, 57, 70, 66, 240, - 0, 250, 180, 28, 4, 176, 1, 28, 32, 188, 12, 70, 144, 70, 154, 188, 240, 188, 2, 71, 8, 74, 135, 0, 155, 88, 211, 70, - 159, 77, 132, 106, 43, 43, 0, 209, 2, 105, 43, 43, 0, 208, 230, 28, 56, 33, 0, 70, 66, 240, 0, 249, 10, 106, 43, 96, - 59, 28, 56, 70, 65, 247, 255, 253, 212, 36, 0, 231, 223, 104, 107, 43, 0, 209, 2, 105, 43, 43, 0, 208, 211, 36, 0, 231, - 215, 104, 107, 43, 0, 209, 2, 105, 43, 43, 0, 208, 203, 28, 56, 33, 0, 70, 66, 240, 0, 248, 239, 28, 56, 70, 65, 247, - 255, 253, 187, 36, 0, 231, 198, 104, 115, 36, 0, 96, 171, 231, 194, 104, 171, 231, 217, 104, 115, 36, 0, 96, 43, 231, - 188, 104, 43, 231, 211, 104, 115, 97, 43, 43, 0, 208, 6, 28, 40, 28, 49, 48, 24, 49, 8, 34, 6, 247, 255, 253, 166, 105, - 115, 36, 0, 97, 107, 231, 171, 105, 43, 231, 194, 104, 114, 35, 36, 84, 234, 36, 0, 231, 164, 104, 235, 104, 172, 70, - 154, 105, 43, 43, 0, 209, 0, 224, 170, 32, 0, 34, 0, 70, 83, 67, 35, 209, 2, 42, 0, 209, 0, 224, 142, 28, 3, 30, 90, - 65, 147, 96, 107, 28, 56, 70, 65, 247, 255, 255, 70, 28, 4, 231, 139, 35, 1, 34, 37, 84, 171, 104, 43, 43, 0, 209, 0, - 224, 132, 104, 113, 104, 178, 28, 56, 247, 255, 254, 214, 28, 4, 34, 0, 35, 37, 84, 234, 44, 0, 208, 0, 231, 120, 28, - 56, 70, 65, 247, 255, 254, 201, 231, 115, 104, 115, 72, 70, 64, 24, 247, 255, 253, 139, 28, 4, 231, 108, 76, 68, 33, - 64, 28, 32, 247, 255, 253, 106, 34, 0, 28, 33, 224, 3, 50, 1, 42, 64, 209, 0, 231, 90, 92, 163, 43, 0, 208, 248, 34, - 64, 28, 56, 247, 255, 253, 80, 28, 56, 33, 64, 247, 255, 253, 72, 36, 0, 231, 83, 35, 36, 92, 234, 42, 0, 208, 0, 231, - 116, 84, 234, 35, 37, 84, 234, 105, 43, 96, 42, 96, 106, 96, 170, 96, 234, 98, 42, 70, 154, 43, 0, 209, 0, 231, 59, - 105, 108, 247, 255, 253, 73, 70, 80, 28, 41, 28, 34, 56, 1, 49, 24, 240, 0, 248, 206, 28, 4, 231, 53, 104, 113, 104, - 178, 40, 208, 208, 59, 28, 56, 247, 255, 254, 133, 28, 4, 40, 0, 208, 0, 231, 42, 35, 37, 92, 235, 43, 0, 208, 0, 231, - 37, 231, 171, 105, 43, 43, 0, 209, 0, 231, 26, 35, 2, 231, 55, 104, 107, 43, 0, 209, 3, 105, 43, 43, 0, 209, 0, 231, - 17, 104, 115, 104, 178, 7, 155, 67, 19, 74, 24, 36, 0, 64, 19, 96, 235, 231, 14, 104, 107, 43, 0, 208, 17, 75, 21, 36, - 160, 98, 43, 2, 36, 231, 6, 105, 43, 43, 0, 208, 0, 231, 108, 96, 106, 36, 0, 230, 255, 28, 48, 70, 66, 240, 0, 249, - 175, 28, 4, 231, 122, 105, 43, 43, 0, 209, 234, 230, 239, 2, 201, 2, 82, 231, 192, 70, 66, 28, 48, 240, 0, 249, 162, - 28, 2, 30, 83, 65, 154, 231, 78, 70, 192, 19, 119, 240, 0, 19, 119, 234, 32, 127, 255, 255, 255, 19, 119, 233, 160, - 255, 255, 128, 0, 0, 5, 49, 0, 181, 240, 70, 87, 70, 78, 70, 69, 180, 224, 70, 128, 28, 14, 70, 148, 42, 0, 208, 51, - 33, 3, 28, 2, 64, 10, 35, 4, 26, 155, 28, 24, 64, 8, 69, 96, 216, 49, 40, 0, 208, 49, 36, 0, 70, 67, 85, 30, 52, 1, - 66, 160, 216, 250, 69, 132, 208, 32, 70, 99, 26, 27, 8, 159, 70, 153, 0, 187, 70, 154, 43, 0, 208, 17, 4, 51, 6, 50, - 2, 49, 67, 26, 67, 10, 28, 21, 70, 67, 67, 53, 24, 26, 33, 0, 0, 139, 49, 1, 80, 213, 66, 185, 211, 250, 68, 84, 69, - 209, 208, 6, 70, 67, 25, 24, 52, 1, 112, 6, 48, 1, 69, 164, 216, 250, 188, 28, 70, 144, 70, 153, 70, 162, 188, 240, - 188, 1, 71, 0, 70, 96, 231, 203, 36, 0, 231, 211, 70, 192, 181, 112, 76, 17, 28, 6, 104, 32, 176, 130, 28, 13, 98, 2, - 97, 6, 100, 1, 97, 65, 33, 68, 247, 255, 252, 121, 28, 48, 28, 41, 247, 255, 252, 117, 75, 10, 34, 2, 104, 24, 104, - 35, 73, 9, 147, 0, 35, 1, 247, 255, 252, 128, 28, 41, 28, 4, 28, 48, 247, 255, 252, 119, 176, 2, 28, 32, 188, 112, 188, - 2, 71, 8, 19, 119, 240, 44, 19, 119, 240, 48, 87, 70, 83, 2, 181, 240, 176, 133, 28, 4, 28, 15, 146, 3, 40, 2, 216, - 75, 77, 47, 104, 43, 43, 0, 208, 74, 78, 46, 104, 48, 40, 0, 219, 1, 247, 255, 252, 71, 74, 44, 0, 163, 88, 152, 33, - 1, 247, 255, 252, 81, 96, 48, 40, 0, 219, 66, 104, 48, 40, 0, 219, 49, 104, 40, 28, 57, 34, 6, 48, 32, 247, 255, 252, - 61, 104, 40, 169, 3, 34, 4, 48, 64, 247, 255, 252, 55, 104, 42, 36, 4, 28, 19, 51, 32, 96, 19, 104, 42, 35, 6, 96, 83, - 104, 42, 33, 68, 28, 19, 51, 64, 96, 147, 104, 43, 96, 220, 104, 40, 247, 255, 252, 33, 104, 43, 104, 48, 34, 2, 147, - 0, 73, 22, 35, 0, 247, 255, 252, 45, 104, 42, 28, 19, 51, 32, 96, 19, 104, 43, 96, 92, 104, 42, 28, 19, 51, 64, 96, - 147, 104, 43, 96, 220, 176, 5, 188, 240, 188, 2, 71, 8, 32, 1, 66, 64, 231, 248, 75, 11, 78, 8, 96, 43, 35, 1, 66, 91, - 96, 51, 231, 179, 44, 0, 209, 186, 72, 8, 33, 1, 247, 255, 252, 5, 96, 48, 231, 180, 70, 192, 19, 119, 240, 44, 19, - 119, 240, 48, 19, 119, 236, 140, 87, 70, 83, 1, 19, 119, 240, 64, 19, 119, 236, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 233, 45, 64, 128, 229, 159, 113, 80, 229, 151, 112, 0, 235, 0, 0, 45, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, - 64, 128, 229, 159, 113, 60, 229, 151, 112, 0, 235, 0, 0, 39, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, - 229, 159, 113, 40, 229, 151, 112, 0, 235, 0, 0, 33, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, 229, 159, - 113, 20, 229, 151, 112, 0, 235, 0, 0, 27, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, 229, 159, 113, 0, 229, - 151, 112, 0, 235, 0, 0, 21, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, 229, 159, 112, 236, 229, 151, 112, - 0, 235, 0, 0, 15, 232, 189, 64, 128, 225, 47, 255, 30, 230, 0, 8, 16, 225, 47, 255, 30, 230, 0, 7, 240, 225, 47, 255, - 30, 230, 0, 3, 144, 225, 47, 255, 30, 230, 0, 3, 176, 225, 47, 255, 30, 230, 0, 3, 208, 225, 47, 255, 30, 230, 0, 3, - 240, 225, 47, 255, 30, 230, 0, 4, 80, 225, 47, 255, 30, 225, 47, 255, 23, 239, 0, 0, 204, 225, 47, 255, 30, 180, 124, - 181, 0, 247, 255, 252, 254, 188, 2, 188, 124, 71, 8, 181, 112, 176, 136, 104, 133, 28, 1, 75, 34, 71, 24, 70, 192, 70, - 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 114, 28, 1, 32, 4, 223, 171, 71, 16, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, - 75, 8, 104, 27, 71, 24, 19, 119, 224, 16, 19, 119, 224, 20, 19, 119, 224, 24, 19, 119, 224, 28, 19, 119, 224, 32, 19, - 119, 224, 36, 32, 16, 0, 213, 19, 119, 224, 12, 70, 192, 70, 192, 19, 119, 229, 58, 19, 119, 229, 108, 19, 119, 228, - 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, - 19, 119, 228, 202, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, - 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, - 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, 58, 19, 119, 228, 120, 19, 119, 229, 220, 19, 119, 228, - 120, 19, 119, 228, 120, 19, 119, 230, 24, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, - 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, - 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, - 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, - 102, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, 24, 19, 119, 228, 120, 19, 119, 228, 120, - 19, 119, 228, 196, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, - 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, - 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, - 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, - 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, - 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, - 230, 24, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, - 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, 70, 19, 119, 229, 170, 19, 119, 228, 120, 19, 119, 228, 120, - 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 158, 19, 119, 228, 120, 19, 119, 228, 120, 19, - 119, 228, 120, 19, 119, 228, 212, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, - 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, - 120, 19, 119, 228, 246, 19, 119, 228, 254, 19, 119, 229, 2, 19, 119, 229, 10, 19, 119, 229, 14, 19, 119, 229, 44, 19, - 119, 229, 48, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, - 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 229, 156, 47, 100, 101, 118, 47, 117, 115, 98, 47, 101, 104, - 99, 0, 0, 0, 0, 47, 100, 101, 118, 47, 117, 115, 98, 50, 0, 0, 0, 47, 100, 101, 118, 47, 115, 100, 105, 111, 47, 115, - 100, 104, 99, 0, 0, 19, 119, 236, 112, 19, 119, 236, 124, 19, 119, 236, 96 +unsigned char dip_plugin[5920] __attribute__((aligned (32)))={ + 0x13, 0x77, 0xe6, 0x11, 0x12, 0x34, 0x00, 0x01, 0x20, 0x22, 0xdd, 0xac, 0x20, 0x20, 0x10, 0x11, + 0x20, 0x20, 0x0b, 0x9d, 0x20, 0x20, 0x0b, 0x71, 0x20, 0x20, 0x5d, 0xc1, 0x20, 0x20, 0x00, 0x49, + 0x20, 0x20, 0x2b, 0x4d, 0x20, 0x20, 0x39, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x77, 0xf6, 0x20, 0x13, 0x77, 0xef, 0xe0, + 0x13, 0x77, 0xed, 0xd5, 0x13, 0x77, 0xf7, 0x20, 0x00, 0x00, 0x08, 0xa0, 0xe1, 0xa0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x71, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x73, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x83, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x69, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x79, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x5b, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x6b, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x5b, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x89, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x5b, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x79, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x55, + 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x4f, 0xb5, 0x10, 0x1c, 0x03, 0x22, 0x20, 0x1c, 0x0c, + 0x48, 0x0d, 0x1c, 0x19, 0xf7, 0xff, 0xff, 0xec, 0x48, 0x0b, 0x21, 0x20, 0xf7, 0xff, 0xff, 0xd4, + 0x4a, 0x0a, 0x23, 0x01, 0x68, 0x11, 0x42, 0x19, 0xd1, 0xfc, 0x22, 0x20, 0x1c, 0x20, 0x49, 0x06, + 0xf7, 0xff, 0xff, 0xde, 0x1c, 0x20, 0x21, 0x20, 0xf7, 0xff, 0xff, 0xc6, 0x4b, 0x04, 0x68, 0x18, + 0xbc, 0x10, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0x0d, 0x00, 0x60, 0x00, 0x0d, 0x00, 0x60, 0x1c, + 0x0d, 0x00, 0x60, 0x20, 0xb5, 0x70, 0xb0, 0x88, 0x4b, 0x08, 0x1c, 0x06, 0x1c, 0x0d, 0x46, 0x6c, + 0x93, 0x00, 0x60, 0x61, 0x92, 0x02, 0xf7, 0xff, 0xff, 0xcb, 0x1c, 0x31, 0x1c, 0x2a, 0x46, 0x68, + 0xf0, 0x00, 0xfe, 0xe8, 0xb0, 0x08, 0xbc, 0x70, 0xbc, 0x02, 0x47, 0x08, 0xa8, 0x00, 0x00, 0x00, + 0xb5, 0xf0, 0xb0, 0x8b, 0x0a, 0xcb, 0x1c, 0x07, 0x1c, 0x0d, 0x92, 0x01, 0x93, 0x00, 0x26, 0x00, + 0xac, 0x02, 0x4b, 0x0d, 0x1c, 0x38, 0x60, 0x23, 0x23, 0x00, 0x60, 0x63, 0x60, 0xa3, 0x9b, 0x00, + 0x1c, 0x29, 0x60, 0xe3, 0x9b, 0x01, 0x36, 0x01, 0x61, 0x23, 0xf7, 0xff, 0xff, 0xa9, 0x1c, 0x20, + 0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x00, 0xfe, 0xc6, 0x2e, 0x1f, 0xdc, 0x01, 0x28, 0x00, 0xd1, 0xe8, + 0xb0, 0x0b, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0xd0, 0x00, 0x00, 0x00, 0xb5, 0xf0, 0xb0, 0x89, + 0x90, 0x05, 0x91, 0x06, 0x92, 0x07, 0x29, 0x00, 0xd0, 0x79, 0x23, 0x80, 0x0a, 0x52, 0x01, 0x1b, + 0x92, 0x02, 0x26, 0x00, 0x93, 0x04, 0xe0, 0x6f, 0x9a, 0x06, 0x1b, 0x94, 0x9a, 0x02, 0x02, 0x53, + 0x9a, 0x07, 0x42, 0x9a, 0xd8, 0x01, 0x23, 0x00, 0xe0, 0x02, 0x9a, 0x07, 0x1a, 0xd3, 0x00, 0x9b, + 0x93, 0x01, 0x9b, 0x05, 0x22, 0x1f, 0x19, 0x9f, 0x42, 0x17, 0xd1, 0x1c, 0x4b, 0x33, 0x42, 0x9f, + 0xd9, 0x01, 0x23, 0x00, 0xe0, 0x02, 0x23, 0xc0, 0x04, 0x5b, 0x1b, 0xdb, 0x4a, 0x30, 0x18, 0xb9, + 0x4a, 0x30, 0x42, 0x91, 0xd8, 0x01, 0x4b, 0x30, 0x1b, 0xdb, 0x4a, 0x30, 0x42, 0x93, 0xd8, 0x01, + 0x23, 0x00, 0xe0, 0x02, 0x42, 0xa3, 0xd9, 0x00, 0x1c, 0x23, 0x4a, 0x2c, 0x43, 0x93, 0xd0, 0x02, + 0x9a, 0x01, 0x2a, 0x00, 0xd0, 0x2a, 0x9a, 0x01, 0x19, 0x13, 0x9a, 0x04, 0x42, 0x93, 0xd9, 0x01, + 0x9b, 0x01, 0x1a, 0xd4, 0x20, 0x80, 0x01, 0x00, 0x21, 0x20, 0xf7, 0xff, 0xff, 0x31, 0x90, 0x03, + 0x28, 0x00, 0xd1, 0x02, 0x25, 0x01, 0x42, 0x6d, 0xe0, 0x32, 0x21, 0x80, 0x98, 0x03, 0x01, 0x09, + 0x9a, 0x02, 0xf7, 0xff, 0xff, 0x85, 0x1c, 0x05, 0x28, 0x00, 0xd1, 0x0b, 0x9a, 0x03, 0x9b, 0x01, + 0x1c, 0x38, 0x18, 0xd1, 0x1c, 0x22, 0xf7, 0xff, 0xff, 0x33, 0x9a, 0x05, 0x1c, 0x21, 0x19, 0x90, + 0xf7, 0xff, 0xff, 0x1a, 0x98, 0x03, 0xf7, 0xff, 0xff, 0x0b, 0xe0, 0x0c, 0x1c, 0x1c, 0x4b, 0x14, + 0x42, 0x9c, 0xd9, 0x01, 0x24, 0xff, 0x03, 0xe4, 0x9b, 0x05, 0x1c, 0x21, 0x19, 0x98, 0x9a, 0x02, + 0xf7, 0xff, 0xff, 0x66, 0x1c, 0x05, 0x2d, 0x00, 0xd1, 0x0a, 0x9a, 0x01, 0x9b, 0x02, 0x19, 0x36, + 0x18, 0xa4, 0x0a, 0xe4, 0x19, 0x1b, 0x93, 0x02, 0x9a, 0x06, 0x42, 0x96, 0xd3, 0x8c, 0x25, 0x00, + 0xb0, 0x09, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0x01, 0x7f, 0xff, 0xff, + 0xf0, 0x00, 0x00, 0x00, 0x03, 0x61, 0x7f, 0xff, 0x13, 0x61, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, + 0x00, 0x7f, 0x7f, 0xff, 0xb5, 0x00, 0x4b, 0x07, 0xb0, 0x89, 0x93, 0x00, 0x46, 0x68, 0x23, 0x00, + 0x21, 0x00, 0x22, 0x00, 0x93, 0x01, 0x93, 0x02, 0xf0, 0x00, 0xfe, 0x1c, 0xb0, 0x09, 0xbc, 0x02, + 0x47, 0x08, 0x46, 0xc0, 0xe3, 0x00, 0x00, 0x00, 0xb5, 0xf8, 0x4e, 0x26, 0x27, 0x01, 0x1c, 0x04, + 0x60, 0x37, 0x21, 0x20, 0xf7, 0xff, 0xfe, 0xec, 0x7b, 0x22, 0x7b, 0x63, 0x06, 0x12, 0x04, 0x1b, + 0x43, 0x13, 0x7b, 0xa2, 0x02, 0x12, 0x43, 0x13, 0x7b, 0xe2, 0x43, 0x13, 0x2b, 0x08, 0xd1, 0x30, + 0x7e, 0x22, 0x7e, 0x63, 0x06, 0x12, 0x04, 0x1b, 0x43, 0x13, 0x7e, 0xa2, 0x25, 0xc5, 0x02, 0x12, + 0x43, 0x13, 0x7e, 0xe2, 0x01, 0xad, 0x43, 0x13, 0x68, 0x18, 0x68, 0x59, 0xf7, 0xff, 0xfe, 0xd0, + 0x7e, 0x22, 0x7e, 0x63, 0x06, 0x12, 0x04, 0x1b, 0x43, 0x13, 0x7e, 0xa2, 0x1c, 0x28, 0x02, 0x12, + 0x43, 0x13, 0x7e, 0xe2, 0x21, 0x08, 0x43, 0x13, 0x68, 0x1b, 0x68, 0x5c, 0xf7, 0xff, 0xfe, 0xc0, + 0x04, 0x24, 0x43, 0x27, 0x4c, 0x0c, 0x60, 0x2f, 0x1c, 0x28, 0x21, 0x04, 0x60, 0x27, 0xf7, 0xff, + 0xfe, 0x9b, 0x1c, 0x20, 0x21, 0x04, 0xf7, 0xff, 0xfe, 0x97, 0x23, 0x00, 0x60, 0x33, 0x20, 0x00, + 0xe0, 0x04, 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0x3d, 0x23, 0x00, 0x60, 0x33, 0xbc, 0xf8, 0xbc, 0x02, + 0x47, 0x08, 0x46, 0xc0, 0x13, 0x77, 0xf7, 0x20, 0x00, 0x00, 0x31, 0x88, 0xb5, 0x10, 0x4b, 0x09, + 0x69, 0x1c, 0x2c, 0x00, 0xd0, 0x02, 0xf0, 0x00, 0xfb, 0xe3, 0xe0, 0x07, 0x68, 0x5b, 0x2b, 0x00, + 0xd0, 0x02, 0xf7, 0xff, 0xfe, 0xfb, 0xe0, 0x01, 0xf7, 0xff, 0xfe, 0xbc, 0xbc, 0x10, 0xbc, 0x02, + 0x47, 0x08, 0x46, 0xc0, 0x13, 0x77, 0xf7, 0x28, 0xb5, 0xf0, 0xb0, 0x85, 0x4b, 0x80, 0x90, 0x02, + 0x91, 0x03, 0x68, 0xdd, 0x68, 0x99, 0x18, 0x6d, 0x18, 0xad, 0x95, 0x00, 0x69, 0x1b, 0x2b, 0x00, + 0xd0, 0x13, 0x4b, 0x7c, 0x68, 0x1b, 0x2b, 0x00, 0xdd, 0x00, 0xe0, 0xe8, 0x4b, 0x7a, 0x68, 0x19, + 0x29, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xf7, 0xff, 0xfe, 0x6f, 0x4b, 0x77, 0x22, 0x00, 0x60, 0x1a, + 0x23, 0x01, 0x4a, 0x76, 0x42, 0x5b, 0x60, 0x13, 0xe0, 0xd9, 0x4b, 0x74, 0x4a, 0x74, 0x68, 0x1b, + 0x42, 0x93, 0xd1, 0x00, 0xe0, 0xa5, 0x2b, 0x00, 0xda, 0x00, 0xe0, 0xa2, 0x4c, 0x6e, 0x68, 0x23, + 0x2b, 0x00, 0xd1, 0x06, 0x21, 0x80, 0x20, 0x00, 0x01, 0x89, 0x22, 0x20, 0xf7, 0xff, 0xfe, 0x44, + 0x60, 0x20, 0x20, 0x80, 0x01, 0x00, 0x21, 0x20, 0xf7, 0xff, 0xfe, 0x32, 0x1c, 0x04, 0x28, 0x00, + 0xd1, 0x03, 0x23, 0x01, 0x4a, 0x65, 0x42, 0x5b, 0x60, 0x13, 0x4e, 0x64, 0x68, 0x33, 0x2b, 0x00, + 0xda, 0x02, 0x21, 0x00, 0x91, 0x01, 0xe0, 0x26, 0x1c, 0x35, 0x27, 0x00, 0x68, 0x32, 0x21, 0x80, + 0x1c, 0x13, 0x33, 0x10, 0x02, 0x5b, 0x02, 0x52, 0x1c, 0x20, 0x01, 0x09, 0x93, 0x01, 0xf7, 0xff, + 0xff, 0x95, 0x28, 0x00, 0xda, 0x03, 0x23, 0x01, 0x42, 0x5b, 0x60, 0x33, 0xe0, 0x13, 0x78, 0x23, + 0x2b, 0x43, 0xd1, 0x08, 0x78, 0x63, 0x2b, 0x49, 0xd1, 0x05, 0x78, 0xa3, 0x2b, 0x53, 0xd1, 0x02, + 0x78, 0xe3, 0x2b, 0x4f, 0xd0, 0x07, 0x68, 0x2b, 0x2b, 0x00, 0xd0, 0x01, 0x60, 0x2f, 0xe7, 0xdd, + 0x23, 0x01, 0x42, 0x5b, 0x60, 0x2b, 0x4e, 0x4d, 0x68, 0x33, 0x2b, 0x00, 0xdb, 0x54, 0x4b, 0x4a, + 0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x50, 0x79, 0x62, 0x79, 0xa3, 0x02, 0x12, 0x04, 0x1b, 0x18, 0xd2, + 0x79, 0x23, 0x48, 0x48, 0x18, 0xd2, 0x79, 0xe3, 0x21, 0x00, 0x06, 0x1b, 0x18, 0xd2, 0x4b, 0x46, + 0x08, 0x92, 0x60, 0x1a, 0x22, 0x80, 0x01, 0x12, 0xf0, 0x00, 0xfa, 0x50, 0x27, 0x08, 0x25, 0x00, + 0x4a, 0x42, 0x42, 0x17, 0xd1, 0x11, 0x4b, 0x42, 0x42, 0x9d, 0xdd, 0x0e, 0x68, 0x33, 0x12, 0xfa, + 0x18, 0xd2, 0x21, 0x80, 0x02, 0x52, 0x1c, 0x20, 0x01, 0x09, 0xf7, 0xff, 0xff, 0x4f, 0x28, 0x00, + 0xda, 0x03, 0x23, 0x01, 0x42, 0x5b, 0x60, 0x33, 0xe0, 0x20, 0x20, 0x07, 0x40, 0x28, 0xd1, 0x05, + 0x4b, 0x31, 0x10, 0xea, 0x68, 0x1b, 0x99, 0x01, 0x00, 0x92, 0x50, 0xd1, 0x4b, 0x33, 0x40, 0x3b, + 0x5c, 0xe3, 0x2b, 0x00, 0xd0, 0x0c, 0x4a, 0x2f, 0x21, 0x01, 0x10, 0xeb, 0x40, 0x81, 0x1c, 0x08, + 0x5c, 0xd1, 0x43, 0x01, 0x54, 0xd1, 0x4b, 0x2c, 0x9a, 0x01, 0x68, 0x1b, 0x18, 0xd2, 0x92, 0x01, + 0x23, 0x80, 0x35, 0x01, 0x01, 0xdb, 0x37, 0x01, 0x42, 0x9d, 0xd1, 0xc9, 0x4b, 0x23, 0x68, 0x1a, + 0x2a, 0x00, 0xdb, 0x01, 0x4a, 0x22, 0x60, 0x1a, 0x2c, 0x00, 0xd0, 0x02, 0x1c, 0x20, 0xf7, 0xff, + 0xfd, 0x97, 0x4b, 0x1e, 0x4c, 0x1c, 0x68, 0x1a, 0x4b, 0x1d, 0x42, 0x9a, 0xd1, 0x1e, 0x4b, 0x1e, + 0x98, 0x00, 0x68, 0x1d, 0x1c, 0x29, 0xf0, 0x00, 0xfc, 0xf3, 0x68, 0x23, 0x08, 0xc1, 0x24, 0x07, + 0x00, 0x8a, 0x58, 0xd2, 0x40, 0x20, 0x23, 0x00, 0x4e, 0x16, 0x24, 0x01, 0xe0, 0x05, 0x5c, 0x77, + 0x41, 0x1f, 0x42, 0x27, 0xd0, 0x00, 0x19, 0x52, 0x33, 0x01, 0x42, 0x83, 0xd3, 0xf7, 0x9b, 0x00, + 0x3d, 0x01, 0x40, 0x1d, 0x19, 0x52, 0x98, 0x02, 0x99, 0x03, 0xe0, 0x0b, 0x68, 0x21, 0x29, 0x00, + 0xd0, 0x02, 0x20, 0x00, 0xf7, 0xff, 0xfd, 0x90, 0x4b, 0x07, 0x22, 0x00, 0x60, 0x1a, 0x98, 0x02, + 0x99, 0x03, 0x9a, 0x00, 0xf7, 0xff, 0xfe, 0xea, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, + 0x13, 0x77, 0xf7, 0x28, 0x13, 0x77, 0xf7, 0xa0, 0x13, 0x77, 0xf7, 0x24, 0x13, 0x77, 0xf6, 0x04, + 0x7f, 0xff, 0xff, 0xff, 0x13, 0x77, 0xf7, 0xc0, 0x13, 0x77, 0xf7, 0x50, 0x00, 0x00, 0x07, 0xff, + 0x00, 0x00, 0x07, 0xf7, 0xb5, 0x70, 0x22, 0x00, 0x21, 0x20, 0x1c, 0x04, 0xf7, 0xff, 0xfe, 0xe4, + 0x69, 0xa2, 0x4b, 0x09, 0x1c, 0x05, 0x42, 0x9a, 0xd1, 0x09, 0x4b, 0x08, 0x21, 0x01, 0x68, 0x1a, + 0x70, 0x11, 0x68, 0x1b, 0x78, 0x5b, 0x2b, 0x00, 0xd1, 0x01, 0xf7, 0xff, 0xfd, 0x51, 0x1c, 0x28, + 0xbc, 0x70, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0x5d, 0x1c, 0x9e, 0xa3, 0x13, 0x77, 0xe0, 0x08, + 0xb5, 0xf0, 0xb0, 0x83, 0x92, 0x01, 0x4a, 0xb9, 0x1c, 0x05, 0x68, 0x13, 0x1c, 0x0c, 0x78, 0x06, + 0x2b, 0x00, 0xd0, 0x0e, 0x4b, 0xb6, 0x4f, 0xb7, 0x68, 0x1a, 0x68, 0x38, 0x21, 0x00, 0xf0, 0x00, + 0xf9, 0x95, 0x4a, 0xb3, 0x68, 0x38, 0x68, 0x11, 0xf7, 0xff, 0xfd, 0x26, 0x4a, 0xaf, 0x23, 0x00, + 0x60, 0x13, 0x2e, 0xe0, 0xd0, 0x55, 0x4f, 0xb0, 0x23, 0x00, 0x62, 0x3b, 0x2e, 0xd0, 0xd1, 0x00, + 0xe1, 0x6e, 0x2e, 0xd0, 0xd8, 0x26, 0x2e, 0x79, 0xd0, 0x62, 0x2e, 0x79, 0xd8, 0x0f, 0x2e, 0x15, + 0xd1, 0x00, 0xe0, 0xb3, 0x2e, 0x15, 0xd8, 0x03, 0x2e, 0x13, 0xd2, 0x00, 0xe1, 0x6a, 0xe0, 0x8d, + 0x2e, 0x70, 0xd1, 0x00, 0xe1, 0x00, 0x2e, 0x71, 0xd0, 0x00, 0xe1, 0x63, 0xe0, 0xe6, 0x2e, 0xa4, + 0xd1, 0x00, 0xe0, 0xbf, 0x2e, 0xa4, 0xd8, 0x06, 0x2e, 0x8a, 0xd1, 0x00, 0xe1, 0x18, 0x2e, 0x8d, + 0xd0, 0x00, 0xe1, 0x57, 0xe1, 0x4c, 0x2e, 0xa8, 0xd1, 0x00, 0xe1, 0x49, 0x2e, 0xab, 0xd0, 0x00, + 0xe1, 0x50, 0xe0, 0x36, 0x2e, 0xf1, 0xd0, 0x50, 0x2e, 0xf1, 0xd8, 0x10, 0x2e, 0xe0, 0xd0, 0x20, + 0x2e, 0xe0, 0xd8, 0x06, 0x2e, 0xd9, 0xd1, 0x00, 0xe0, 0x94, 0x2e, 0xda, 0xd0, 0x00, 0xe1, 0x41, + 0xe0, 0xad, 0x2e, 0xe4, 0xd0, 0x31, 0x2e, 0xf0, 0xd0, 0x00, 0xe1, 0x3b, 0xe0, 0x3a, 0x2e, 0xf4, + 0xd0, 0x47, 0x2e, 0xf4, 0xd8, 0x05, 0x2e, 0xf2, 0xd0, 0x3e, 0x2e, 0xf3, 0xd0, 0x00, 0xe1, 0x31, + 0xe0, 0x3d, 0x2e, 0xf6, 0xd0, 0x4e, 0x2e, 0xf6, 0xd3, 0x4a, 0x2e, 0xff, 0xd0, 0x00, 0xe1, 0x29, + 0xe0, 0x71, 0x4b, 0x85, 0x6a, 0x1a, 0x2a, 0x00, 0xd1, 0x03, 0x69, 0x1b, 0x2b, 0x00, 0xd1, 0x00, + 0xe1, 0x20, 0x1c, 0x20, 0x21, 0x00, 0x9a, 0x01, 0xf0, 0x00, 0xf9, 0x28, 0x4b, 0x7e, 0x6a, 0x1b, + 0xe0, 0x1c, 0x68, 0x7b, 0x2b, 0x00, 0xd0, 0x00, 0xe1, 0x1a, 0x4b, 0x7b, 0x69, 0x1b, 0xe0, 0x00, + 0x69, 0x3b, 0x2b, 0x00, 0xd0, 0x00, 0xe1, 0x13, 0xe1, 0x0c, 0x68, 0x7b, 0x2b, 0x00, 0xd1, 0x03, + 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x00, 0xe1, 0x05, 0x1c, 0x20, 0x21, 0x00, 0x9a, 0x01, 0xf0, 0x00, + 0xf9, 0x0d, 0xe0, 0x04, 0x68, 0x6b, 0x60, 0xbb, 0xe1, 0x02, 0x68, 0xbb, 0x60, 0x23, 0x99, 0x01, + 0x1c, 0x20, 0xf7, 0xff, 0xfc, 0x99, 0xe0, 0xfb, 0x68, 0x6b, 0x60, 0x3b, 0xe0, 0xf8, 0x68, 0x3b, + 0xe7, 0xf4, 0x68, 0x6b, 0x61, 0x3b, 0x2b, 0x00, 0xd0, 0x06, 0x1c, 0x38, 0x1c, 0x29, 0x30, 0x18, + 0x31, 0x08, 0x22, 0x06, 0xf7, 0xff, 0xfc, 0x9c, 0x69, 0x6a, 0x4b, 0x63, 0x61, 0x5a, 0xe0, 0xe7, + 0x69, 0x3b, 0xe7, 0xe3, 0x79, 0x2b, 0x37, 0x05, 0x77, 0xfb, 0xe0, 0xe1, 0x2c, 0x00, 0xd1, 0x00, + 0xe0, 0xde, 0x2e, 0x13, 0xd1, 0x0b, 0x69, 0x3b, 0x2b, 0x00, 0xd0, 0x0f, 0x4b, 0x5b, 0x68, 0x1b, + 0x2b, 0x00, 0xd0, 0x07, 0xf0, 0x00, 0xf9, 0xb4, 0x28, 0x00, 0xd0, 0x0b, 0xe0, 0x0c, 0x69, 0x3b, + 0x2b, 0x00, 0xd0, 0x03, 0x4b, 0x56, 0x68, 0x1b, 0x2b, 0x00, 0xda, 0x05, 0x4b, 0x55, 0x68, 0x1b, + 0x07, 0xda, 0xd5, 0x01, 0x23, 0x00, 0xe7, 0xc1, 0x23, 0x02, 0xe7, 0xbf, 0x4b, 0x51, 0x22, 0x01, + 0x68, 0x1b, 0x43, 0x93, 0xe7, 0xba, 0x68, 0x6b, 0x48, 0x4f, 0x1c, 0x21, 0x40, 0x18, 0xf7, 0xff, + 0xfc, 0x73, 0xe0, 0xb6, 0x68, 0x7b, 0x2b, 0x00, 0xd1, 0x03, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x00, + 0xe0, 0xa8, 0x68, 0x6a, 0x68, 0xab, 0x07, 0x92, 0x43, 0x1a, 0x4b, 0x48, 0x40, 0x1a, 0x4b, 0x42, + 0x60, 0xda, 0xe0, 0xa5, 0x68, 0x7b, 0x2b, 0x00, 0xd1, 0x03, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x00, + 0xe0, 0x98, 0x4a, 0x43, 0x4b, 0x3c, 0x20, 0xa0, 0x62, 0x1a, 0x02, 0x00, 0xe0, 0x99, 0x4e, 0x41, + 0x21, 0x40, 0x1c, 0x30, 0xf7, 0xff, 0xfc, 0x4c, 0x1c, 0x33, 0x33, 0x40, 0xe0, 0x03, 0x36, 0x01, + 0x42, 0x9e, 0xd1, 0x00, 0xe0, 0x86, 0x78, 0x32, 0x2a, 0x00, 0xd0, 0xf8, 0x49, 0x39, 0x1c, 0x20, + 0x22, 0x40, 0xf7, 0xff, 0xfc, 0x35, 0x1c, 0x20, 0x21, 0x40, 0xe7, 0x82, 0x1d, 0xbb, 0x22, 0x01, + 0x77, 0xda, 0x68, 0x3b, 0x2b, 0x00, 0xd1, 0x05, 0x1c, 0x28, 0x1c, 0x21, 0x9a, 0x01, 0xf0, 0x00, + 0xfb, 0x51, 0xe0, 0x04, 0x68, 0x69, 0x68, 0xaa, 0x1c, 0x20, 0xf7, 0xff, 0xfd, 0x9d, 0x4b, 0x26, + 0x22, 0x00, 0x33, 0x06, 0x77, 0xda, 0xe0, 0x6c, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x06, 0x1c, 0x28, + 0x1c, 0x21, 0x9a, 0x01, 0xf0, 0x00, 0xfb, 0x3e, 0x28, 0x00, 0xd1, 0x0e, 0x4b, 0x1e, 0x68, 0xda, + 0x2a, 0x00, 0xd1, 0x09, 0x68, 0x9a, 0x2a, 0x00, 0xd1, 0x06, 0x69, 0x1a, 0x2a, 0x00, 0xd1, 0x03, + 0x69, 0xa0, 0x49, 0x21, 0x42, 0x88, 0xd0, 0x09, 0x20, 0x00, 0x1e, 0x43, 0x41, 0x98, 0x4b, 0x16, + 0x99, 0x01, 0x60, 0x58, 0x1c, 0x20, 0xf7, 0xff, 0xfe, 0x8d, 0xe0, 0x4a, 0x60, 0x5a, 0xe0, 0x47, + 0x1d, 0x7b, 0x7f, 0xdb, 0x2b, 0x00, 0xd1, 0x43, 0x1d, 0xba, 0x77, 0xd3, 0x60, 0x3b, 0x60, 0x7b, + 0x60, 0xbb, 0x60, 0xfb, 0x62, 0x3b, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x04, 0x69, 0x7a, 0x4b, 0x13, + 0x3a, 0x01, 0x60, 0x1a, 0xe0, 0x2e, 0xf7, 0xff, 0xfc, 0xe5, 0x69, 0x38, 0x1c, 0x39, 0x31, 0x18, + 0x69, 0x7a, 0x38, 0x01, 0xf0, 0x00, 0xf8, 0x62, 0xe0, 0x2b, 0x46, 0xc0, 0x13, 0x77, 0xf6, 0x00, + 0x13, 0x77, 0xe0, 0x48, 0x13, 0x77, 0xe0, 0x44, 0x13, 0x77, 0xf7, 0x28, 0x13, 0x77, 0xf7, 0xa4, + 0x13, 0x77, 0xf6, 0x08, 0x0d, 0x00, 0x60, 0x04, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x05, 0x31, 0x00, 0x13, 0x77, 0xef, 0xe0, 0x5d, 0x1c, 0x9e, 0xa3, 0x13, 0x77, 0xf6, 0x04, + 0x68, 0xaa, 0x68, 0x69, 0x2e, 0xd0, 0xd1, 0x01, 0x02, 0x52, 0x02, 0xc9, 0x1c, 0x20, 0xf7, 0xff, + 0xfd, 0x33, 0xe0, 0x06, 0x1c, 0x28, 0x1c, 0x21, 0x9a, 0x01, 0xf0, 0x00, 0xfa, 0xdb, 0xe0, 0x00, + 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0xb5, 0xf0, 0x2a, 0x00, + 0xd0, 0x29, 0x24, 0x03, 0x1c, 0x03, 0x40, 0x23, 0x27, 0x04, 0x1a, 0xfb, 0x06, 0x0e, 0x40, 0x23, + 0x0e, 0x36, 0x1c, 0x05, 0x42, 0x93, 0xd9, 0x01, 0x1c, 0x13, 0xe0, 0x01, 0x2b, 0x00, 0xd0, 0x05, + 0x1c, 0x1c, 0xe0, 0x01, 0x70, 0x2e, 0x35, 0x01, 0x3c, 0x01, 0xd2, 0xfb, 0x04, 0x0c, 0x06, 0x0d, + 0x43, 0x25, 0x43, 0x0d, 0x02, 0x0c, 0x1c, 0x29, 0x43, 0x21, 0x18, 0xc4, 0xe0, 0x01, 0xc4, 0x02, + 0x1c, 0x2b, 0x1d, 0x1d, 0x42, 0x95, 0xd9, 0xfa, 0x18, 0xc0, 0xe0, 0x01, 0x33, 0x01, 0x70, 0x06, + 0x30, 0x01, 0x42, 0x93, 0xd3, 0xfa, 0xbc, 0xf0, 0xbc, 0x01, 0x47, 0x00, 0xb5, 0xf0, 0xb0, 0x85, + 0x1c, 0x05, 0x1c, 0x0e, 0x28, 0x01, 0xd9, 0x02, 0x25, 0x01, 0x42, 0x6d, 0xe0, 0x89, 0x4b, 0x47, + 0x92, 0x03, 0x68, 0x1a, 0x2a, 0x00, 0xd1, 0x02, 0x4a, 0x45, 0x60, 0x1a, 0xe0, 0x05, 0x4b, 0x45, + 0x68, 0x18, 0x28, 0x00, 0xdb, 0x01, 0xf7, 0xff, 0xfb, 0x47, 0x4a, 0x42, 0x23, 0x01, 0x42, 0x5b, + 0x60, 0x13, 0x4a, 0x41, 0x4b, 0x41, 0x21, 0x00, 0x60, 0x11, 0x60, 0x19, 0x78, 0x31, 0x29, 0x5f, + 0xd1, 0x2b, 0x78, 0x71, 0x29, 0x44, 0xd1, 0x28, 0x78, 0xb1, 0x29, 0x45, 0xd1, 0x1e, 0x78, 0xf2, + 0x2a, 0x56, 0xd1, 0x22, 0x22, 0x01, 0x60, 0x1a, 0x79, 0x32, 0x2a, 0x57, 0xd1, 0x01, 0x22, 0x02, + 0x60, 0x1a, 0x4c, 0x37, 0x21, 0x80, 0x1c, 0x20, 0x00, 0x49, 0xf7, 0xff, 0xfb, 0x49, 0x1c, 0x20, + 0x21, 0x00, 0xf7, 0xff, 0xfb, 0x39, 0x4b, 0x2f, 0x1c, 0x05, 0x60, 0x18, 0x28, 0x00, 0xdb, 0x01, + 0x25, 0x00, 0xe0, 0x4e, 0x4b, 0x2d, 0x22, 0x00, 0x60, 0x1a, 0xe0, 0x4a, 0x29, 0x56, 0xd1, 0x04, + 0x78, 0xf3, 0x2b, 0x44, 0xd1, 0x01, 0x23, 0x01, 0x60, 0x13, 0x4b, 0x2a, 0x00, 0xaa, 0x58, 0xd0, + 0x21, 0x01, 0xf7, 0xff, 0xfb, 0x21, 0x4c, 0x23, 0x60, 0x20, 0x28, 0x00, 0xda, 0x06, 0x2d, 0x00, + 0xd1, 0x04, 0x48, 0x25, 0x21, 0x01, 0xf7, 0xff, 0xfb, 0x17, 0x60, 0x20, 0x4f, 0x1d, 0x68, 0x3d, + 0x2d, 0x00, 0xdb, 0x2e, 0x4c, 0x19, 0x1c, 0x31, 0x68, 0x20, 0x22, 0x06, 0x30, 0x20, 0xf7, 0xff, + 0xfb, 0x0f, 0x68, 0x20, 0x22, 0x04, 0xa9, 0x03, 0x30, 0x3c, 0xf7, 0xff, 0xfb, 0x09, 0x68, 0x20, + 0x26, 0x04, 0x1c, 0x03, 0x33, 0x20, 0x60, 0x03, 0x23, 0x06, 0x60, 0x43, 0x1c, 0x03, 0x33, 0x3c, + 0x60, 0x83, 0x60, 0xc6, 0x21, 0x40, 0xf7, 0xff, 0xfa, 0xe7, 0x68, 0x23, 0x68, 0x38, 0x49, 0x13, + 0x93, 0x00, 0x22, 0x02, 0x23, 0x00, 0xf7, 0xff, 0xfa, 0xe3, 0x1c, 0x05, 0x68, 0x20, 0x21, 0x40, + 0x1c, 0x03, 0x33, 0x20, 0x60, 0x03, 0x33, 0x1c, 0x60, 0x46, 0x60, 0x83, 0x60, 0xc6, 0xf7, 0xff, + 0xfa, 0xd3, 0xb0, 0x05, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0x13, 0x77, 0xf7, 0x54, + 0x13, 0x77, 0xf7, 0x60, 0x13, 0x77, 0xf6, 0x08, 0x13, 0x77, 0xf7, 0xa4, 0x13, 0x77, 0xf7, 0xa0, + 0x13, 0x77, 0xf6, 0x20, 0x13, 0x77, 0xf0, 0x48, 0x13, 0x77, 0xf0, 0x20, 0x57, 0x46, 0x53, 0x01, + 0xb5, 0x00, 0x4b, 0x0b, 0xb0, 0x83, 0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x0c, 0x4b, 0x09, 0x68, 0x18, + 0x28, 0x00, 0xdb, 0x08, 0x4b, 0x08, 0x49, 0x09, 0x68, 0x1b, 0x22, 0x00, 0x93, 0x00, 0x23, 0x00, + 0xf7, 0xff, 0xfa, 0xae, 0xe0, 0x00, 0x20, 0x01, 0xb0, 0x03, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, + 0x13, 0x77, 0xf7, 0xa4, 0x13, 0x77, 0xf6, 0x08, 0x13, 0x77, 0xf7, 0x54, 0x57, 0x46, 0x53, 0x04, + 0xb5, 0xf0, 0x4d, 0x94, 0xb0, 0x87, 0x68, 0x2b, 0x90, 0x03, 0x91, 0x02, 0x92, 0x04, 0x2b, 0x00, + 0xda, 0x00, 0xe0, 0xf1, 0x4b, 0x90, 0x68, 0x1b, 0x2b, 0x00, 0xd1, 0x00, 0xe0, 0xef, 0x3b, 0x01, + 0x2b, 0x01, 0xd9, 0x00, 0xe0, 0xaa, 0x4c, 0x8d, 0x68, 0x23, 0x2b, 0x00, 0xd1, 0x06, 0x21, 0x80, + 0x20, 0x00, 0x01, 0x89, 0x22, 0x20, 0xf7, 0xff, 0xfa, 0x87, 0x60, 0x20, 0x20, 0x80, 0x01, 0x00, + 0x21, 0x20, 0xf7, 0xff, 0xfa, 0x75, 0x1c, 0x04, 0x28, 0x00, 0xd1, 0x03, 0x23, 0x01, 0x4a, 0x82, + 0x42, 0x5b, 0x60, 0x13, 0x4b, 0x80, 0x68, 0x1b, 0x2b, 0x00, 0xda, 0x01, 0x25, 0x00, 0xe0, 0x21, + 0x4d, 0x7c, 0x21, 0x00, 0x68, 0x28, 0x22, 0x00, 0xf7, 0xff, 0xfa, 0x56, 0x28, 0x00, 0xdb, 0x13, + 0x22, 0x80, 0x68, 0x28, 0x1c, 0x21, 0x01, 0x12, 0xf7, 0xff, 0xfa, 0x4a, 0x28, 0x00, 0xdb, 0x0b, + 0x78, 0x23, 0x2b, 0x43, 0xd1, 0x08, 0x78, 0x63, 0x2b, 0x49, 0xd1, 0x05, 0x78, 0xa3, 0x2b, 0x53, + 0xd1, 0x02, 0x78, 0xe3, 0x2b, 0x4f, 0xd0, 0x03, 0x23, 0x01, 0x4a, 0x6f, 0x42, 0x5b, 0x60, 0x13, + 0x25, 0x80, 0x01, 0xad, 0x4a, 0x6c, 0x68, 0x13, 0x2b, 0x00, 0xdb, 0x62, 0x4b, 0x6b, 0x68, 0x1b, + 0x2b, 0x00, 0xd0, 0x5e, 0x79, 0x62, 0x79, 0xa3, 0x02, 0x12, 0x04, 0x1b, 0x18, 0xd2, 0x79, 0x23, + 0x48, 0x67, 0x18, 0xd2, 0x79, 0xe3, 0x21, 0x00, 0x06, 0x1b, 0x18, 0xd2, 0x4b, 0x65, 0x08, 0x92, + 0x60, 0x1a, 0x22, 0x80, 0x01, 0x12, 0xf7, 0xff, 0xfe, 0x99, 0x27, 0x08, 0x26, 0x00, 0x4b, 0x62, + 0x42, 0x1f, 0xd1, 0x21, 0x4a, 0x61, 0x42, 0x96, 0xdd, 0x1e, 0x4b, 0x5b, 0x68, 0x1a, 0x4b, 0x59, + 0x2a, 0x02, 0xd1, 0x03, 0x12, 0xf9, 0x68, 0x18, 0x02, 0x49, 0xe0, 0x02, 0x49, 0x5c, 0x68, 0x18, + 0x40, 0x39, 0x22, 0x00, 0xf7, 0xff, 0xfa, 0x08, 0x28, 0x00, 0xdb, 0x08, 0x4b, 0x51, 0x22, 0x80, + 0x68, 0x18, 0x1c, 0x21, 0x01, 0x12, 0xf7, 0xff, 0xf9, 0xfb, 0x28, 0x00, 0xda, 0x04, 0x23, 0x01, + 0x4a, 0x4d, 0x42, 0x5b, 0x60, 0x13, 0xe0, 0x1d, 0x20, 0x07, 0x40, 0x30, 0xd1, 0x04, 0x4b, 0x4b, + 0x10, 0xf2, 0x68, 0x1b, 0x00, 0x92, 0x50, 0xd5, 0x4b, 0x4b, 0x40, 0x3b, 0x5c, 0xe3, 0x2b, 0x00, + 0xd0, 0x0a, 0x4a, 0x47, 0x21, 0x01, 0x10, 0xf3, 0x40, 0x81, 0x1c, 0x08, 0x5c, 0xd1, 0x43, 0x01, + 0x54, 0xd1, 0x4b, 0x44, 0x68, 0x1b, 0x18, 0xed, 0x23, 0x80, 0x36, 0x01, 0x01, 0xdb, 0x37, 0x01, + 0x42, 0x9e, 0xd1, 0xbc, 0x4b, 0x3c, 0x68, 0x1a, 0x2a, 0x00, 0xdb, 0x02, 0x21, 0x04, 0x43, 0x0a, + 0x60, 0x1a, 0x2c, 0x00, 0xd0, 0x02, 0x1c, 0x20, 0xf7, 0xff, 0xf9, 0xd2, 0x4b, 0x36, 0x4c, 0x37, + 0x68, 0x1b, 0x93, 0x05, 0x2b, 0x03, 0xdd, 0x2e, 0x4b, 0x36, 0x98, 0x04, 0x68, 0x1d, 0x1c, 0x29, + 0xf0, 0x00, 0xf9, 0x2e, 0x68, 0x23, 0x08, 0xc2, 0x24, 0x07, 0x00, 0x91, 0x58, 0xc9, 0x40, 0x20, + 0x23, 0x00, 0x4e, 0x2f, 0x24, 0x01, 0xe0, 0x05, 0x5c, 0xb7, 0x41, 0x1f, 0x42, 0x27, 0xd0, 0x00, + 0x19, 0x49, 0x33, 0x01, 0x42, 0x83, 0xd3, 0xf7, 0x9a, 0x04, 0x3d, 0x01, 0x40, 0x15, 0x9a, 0x05, + 0x19, 0x49, 0x4b, 0x24, 0x07, 0x92, 0xd5, 0x01, 0x68, 0x18, 0xe0, 0x01, 0x68, 0x18, 0x00, 0x89, + 0x22, 0x00, 0xf7, 0xff, 0xf9, 0xa1, 0x4b, 0x1f, 0x99, 0x03, 0x68, 0x18, 0x9a, 0x02, 0xf7, 0xff, + 0xf9, 0x97, 0x24, 0x00, 0xe0, 0x31, 0x68, 0x21, 0x29, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xf7, 0xff, + 0xf9, 0xbb, 0x4b, 0x1a, 0x22, 0x00, 0x60, 0x1a, 0x24, 0x01, 0x42, 0x64, 0xe0, 0x25, 0x4c, 0x1d, + 0x9b, 0x04, 0x68, 0x20, 0x21, 0x40, 0x62, 0x03, 0x9a, 0x02, 0x63, 0xc2, 0x9b, 0x03, 0x61, 0x82, + 0x61, 0x03, 0xf7, 0xff, 0xf9, 0x91, 0x98, 0x03, 0x99, 0x02, 0xf7, 0xff, 0xf9, 0x8d, 0x4b, 0x16, + 0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x04, 0x68, 0x23, 0x68, 0x28, 0x49, 0x14, 0x93, 0x00, 0xe0, 0x03, + 0x68, 0x23, 0x49, 0x13, 0x68, 0x28, 0x93, 0x00, 0x22, 0x02, 0x23, 0x01, 0xf7, 0xff, 0xf9, 0x80, + 0x99, 0x02, 0x1c, 0x04, 0x98, 0x03, 0xf7, 0xff, 0xf9, 0x93, 0xb0, 0x07, 0x1c, 0x20, 0xbc, 0xf0, + 0xbc, 0x02, 0x47, 0x08, 0x13, 0x77, 0xf6, 0x08, 0x13, 0x77, 0xf7, 0xa0, 0x13, 0x77, 0xf7, 0x24, + 0x13, 0x77, 0xf7, 0xc0, 0x13, 0x77, 0xf7, 0x50, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x07, 0xf7, + 0xff, 0xff, 0xf8, 0x00, 0x13, 0x77, 0xf7, 0x54, 0x13, 0x77, 0xf7, 0xa4, 0x57, 0x46, 0x53, 0x03, + 0x57, 0x46, 0x53, 0x02, 0xb4, 0x7c, 0xb5, 0x00, 0xf7, 0xff, 0xfa, 0x7e, 0xbc, 0x02, 0xbc, 0x7c, + 0x47, 0x08, 0xb5, 0x70, 0xb0, 0x88, 0x68, 0x85, 0x1c, 0x01, 0x4b, 0x01, 0x47, 0x18, 0x00, 0x00, + 0x20, 0x10, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe6, 0x00, 0x08, 0x10, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x07, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, + 0xe6, 0x00, 0x03, 0x30, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x03, 0x50, 0xe1, 0x2f, 0xff, 0x1e, + 0xe6, 0x00, 0x03, 0x90, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x03, 0xb0, 0xe1, 0x2f, 0xff, 0x1e, + 0xe6, 0x00, 0x03, 0xd0, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x03, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, + 0xe6, 0x00, 0x04, 0x10, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x04, 0x50, 0xe1, 0x2f, 0xff, 0x1e, + 0xef, 0x00, 0x00, 0xcc, 0xe1, 0x2f, 0xff, 0x1e, 0x46, 0x72, 0x1c, 0x01, 0x20, 0x04, 0xdf, 0xab, + 0x47, 0x10, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, + 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x9c, 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x1f, + 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x88, + 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x19, 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, + 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x74, 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x13, + 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x60, + 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x0d, 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, + 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x4c, 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x07, + 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x38, + 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x01, 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, + 0xe1, 0x2f, 0xff, 0x17, 0xb5, 0xf0, 0x46, 0x5f, 0x46, 0x56, 0x46, 0x4d, 0x46, 0x44, 0xb4, 0xf0, + 0x4b, 0x07, 0x68, 0x1b, 0x47, 0x18, 0x00, 0x00, 0x13, 0x77, 0xe0, 0x10, 0x13, 0x77, 0xe0, 0x14, + 0x13, 0x77, 0xe0, 0x18, 0x13, 0x77, 0xe0, 0x1c, 0x13, 0x77, 0xe0, 0x20, 0x13, 0x77, 0xe0, 0x24, + 0x13, 0x77, 0xe0, 0x0c, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, + 0x29, 0x00, 0xd0, 0x34, 0x23, 0x01, 0x22, 0x00, 0xb4, 0x10, 0x42, 0x88, 0xd3, 0x2c, 0x24, 0x01, + 0x07, 0x24, 0x42, 0xa1, 0xd2, 0x04, 0x42, 0x81, 0xd2, 0x02, 0x01, 0x09, 0x01, 0x1b, 0xe7, 0xf8, + 0x00, 0xe4, 0x42, 0xa1, 0xd2, 0x04, 0x42, 0x81, 0xd2, 0x02, 0x00, 0x49, 0x00, 0x5b, 0xe7, 0xf8, + 0x42, 0x88, 0xd3, 0x01, 0x1a, 0x40, 0x43, 0x1a, 0x08, 0x4c, 0x42, 0xa0, 0xd3, 0x02, 0x1b, 0x00, + 0x08, 0x5c, 0x43, 0x22, 0x08, 0x8c, 0x42, 0xa0, 0xd3, 0x02, 0x1b, 0x00, 0x08, 0x9c, 0x43, 0x22, + 0x08, 0xcc, 0x42, 0xa0, 0xd3, 0x02, 0x1b, 0x00, 0x08, 0xdc, 0x43, 0x22, 0x28, 0x00, 0xd0, 0x03, + 0x09, 0x1b, 0xd0, 0x01, 0x09, 0x09, 0xe7, 0xe3, 0x1c, 0x10, 0xbc, 0x10, 0x47, 0x70, 0xb5, 0x02, + 0xf0, 0x00, 0xf8, 0x0c, 0x20, 0x00, 0xbc, 0x06, 0x47, 0x10, 0x46, 0xc0, 0xb5, 0x03, 0xf7, 0xff, + 0xff, 0xbf, 0xbc, 0x0e, 0x43, 0x42, 0x1a, 0x89, 0x47, 0x18, 0x46, 0xc0, 0x47, 0x70, 0x46, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x73, 0x62, 0x32, 0x00, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x69, 0x6f, 0x2f, 0x73, 0x64, 0x68, 0x63, 0x00, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x73, + 0x62, 0x2f, 0x65, 0x68, 0x63, 0x00, 0x00, 0x00, 0x13, 0x77, 0xf0, 0x20, 0x13, 0x77, 0xf0, 0x2a, + 0x13, 0x77, 0xf0, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/source/mload/dip_plugin.h b/source/mload/dip_plugin.h index 900078e7..fc9bd14e 100644 --- a/source/mload/dip_plugin.h +++ b/source/mload/dip_plugin.h @@ -1,3 +1,3 @@ -#define size_dip_plugin 3224 +#define size_dip_plugin 5920 -extern unsigned char dip_plugin[3224]; +extern unsigned char dip_plugin[5920]; diff --git a/source/mload/fatffs_module.c b/source/mload/fatffs_module.c new file mode 100644 index 00000000..37a2c3f2 --- /dev/null +++ b/source/mload/fatffs_module.c @@ -0,0 +1,2127 @@ +#define size_fatffs_module 58440 + +unsigned char fatffs_module[58440] __attribute__((aligned (32)))={ + 127, 69, 76, 70, 1, 2, 1, 97, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 40, 0, 0, 0, 1, 19, 115, 0, 0, 0, 0, 0, 52, 0, 0, 0, + 0, 0, 0, 6, 6, 0, 52, 0, 32, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, + 0, 0, 0, 160, 0, 240, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 212, 0, 0, 0, 160, 0, 0, 0, 160, 0, 0, 0, 52, 0, 0, 0, + 52, 0, 240, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 212, 0, 240, 0, + 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 0, 1, 8, 19, 115, 0, 0, 19, 115, 0, 0, 0, 0, 146, 196, 0, 0, 146, 196, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, 1, 0, 0, 147, 204, 19, 115, 160, 0, 19, 115, 160, 0, 0, 0, 80, 124, 0, 2, 76, 204, 0, 0, 0, 6, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 4, 0, 0, 0, 9, 19, 115, 0, 0, 0, 0, 0, 125, 0, 0, + 0, 98, 0, 0, 0, 126, 0, 0, 48, 0, 0, 0, 0, 127, 19, 117, 236, 204, 227, 160, 0, 0, 227, 160, 16, 0, 229, 159, 48, 104, + 225, 47, 255, 19, 229, 159, 192, 100, 229, 156, 192, 0, 225, 160, 0, 0, 231, 156, 193, 11, 225, 160, 0, 0, 225, 47, + 255, 28, 225, 160, 0, 0, 225, 160, 0, 0, 227, 160, 176, 63, 234, 255, 255, 245, 225, 160, 0, 0, 225, 160, 0, 0, 227, + 160, 176, 64, 234, 255, 255, 241, 227, 160, 0, 0, 238, 7, 15, 21, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, + 225, 160, 0, 0, 238, 19, 15, 16, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 238, 3, 15, 16, 225, 47, 255, 30, + 19, 115, 25, 193, 19, 117, 188, 168, 70, 192, 71, 120, 234, 0, 25, 161, 70, 192, 71, 120, 234, 0, 25, 231, 70, 192, + 71, 120, 234, 0, 25, 211, 70, 192, 71, 120, 234, 0, 25, 243, 70, 192, 71, 120, 234, 0, 25, 223, 70, 192, 71, 120, 234, + 0, 26, 3, 70, 192, 71, 120, 234, 0, 25, 245, 70, 192, 71, 120, 234, 0, 25, 209, 70, 192, 71, 120, 234, 0, 25, 185, 70, + 192, 71, 120, 234, 255, 255, 221, 70, 192, 71, 120, 234, 255, 255, 225, 70, 192, 71, 120, 234, 255, 255, 215, 70, 192, + 71, 120, 234, 0, 25, 165, 70, 192, 71, 120, 234, 0, 25, 177, 70, 192, 71, 120, 234, 0, 25, 165, 70, 192, 71, 120, 234, + 0, 25, 229, 70, 192, 71, 120, 234, 0, 25, 153, 70, 192, 71, 120, 234, 255, 255, 215, 70, 192, 71, 120, 234, 0, 25, 185, + 70, 192, 71, 120, 234, 0, 25, 171, 70, 192, 71, 120, 234, 0, 25, 159, 70, 192, 71, 120, 234, 0, 25, 185, 70, 192, 71, + 120, 234, 0, 25, 173, 70, 192, 71, 120, 234, 0, 25, 173, 181, 0, 40, 0, 208, 8, 109, 67, 43, 0, 208, 5, 104, 3, 96, + 11, 104, 131, 32, 0, 96, 75, 224, 1, 32, 101, 66, 64, 188, 2, 71, 8, 181, 16, 76, 7, 28, 3, 28, 10, 33, 0, 96, 33, 28, + 32, 28, 25, 240, 4, 251, 132, 40, 0, 218, 0, 104, 32, 188, 16, 188, 2, 71, 8, 19, 115, 240, 128, 181, 16, 76, 7, 28, + 3, 28, 10, 33, 0, 96, 33, 28, 32, 28, 25, 240, 4, 250, 244, 40, 0, 218, 0, 104, 32, 188, 16, 188, 2, 71, 8, 19, 115, + 240, 128, 181, 16, 76, 7, 28, 3, 28, 10, 33, 0, 96, 33, 28, 32, 28, 25, 240, 4, 252, 128, 40, 0, 218, 0, 104, 32, 188, + 16, 188, 2, 71, 8, 19, 115, 240, 128, 181, 16, 76, 6, 35, 0, 28, 1, 96, 35, 28, 32, 240, 4, 253, 48, 40, 0, 218, 0, + 104, 32, 188, 16, 188, 2, 71, 8, 19, 115, 240, 128, 181, 16, 76, 12, 176, 154, 35, 0, 96, 35, 28, 2, 147, 0, 169, 3, + 28, 32, 75, 9, 240, 5, 252, 4, 28, 1, 40, 0, 218, 1, 104, 32, 224, 3, 28, 32, 240, 5, 251, 204, 32, 0, 176, 26, 188, + 16, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 0, 0, 2, 2, 181, 0, 176, 129, 28, 1, 72, 3, 240, 5, 251, 188, 176, 1, + 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 16, 76, 7, 35, 0, 28, 1, 96, 35, 28, 32, 34, 0, 240, 4, 251, 69, 40, + 0, 218, 0, 104, 32, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 112, 78, 8, 28, 4, 28, 13, 28, 19, 34, + 0, 96, 50, 28, 48, 28, 33, 28, 42, 240, 4, 255, 34, 40, 0, 218, 0, 104, 48, 188, 112, 188, 2, 71, 8, 19, 115, 240, 128, + 181, 112, 78, 8, 28, 4, 28, 13, 28, 19, 34, 0, 96, 50, 28, 48, 28, 33, 28, 42, 240, 4, 255, 200, 40, 0, 218, 0, 104, + 48, 188, 112, 188, 2, 71, 8, 19, 115, 240, 128, 181, 112, 78, 8, 28, 4, 28, 13, 28, 19, 34, 0, 96, 50, 28, 48, 28, 33, + 28, 42, 240, 5, 249, 136, 40, 0, 218, 0, 104, 48, 188, 112, 188, 2, 71, 8, 19, 115, 240, 128, 181, 240, 176, 131, 28, + 6, 32, 92, 28, 15, 240, 1, 255, 243, 28, 4, 40, 0, 209, 2, 32, 22, 66, 64, 224, 15, 77, 10, 35, 0, 96, 43, 28, 40, 147, + 0, 28, 33, 28, 50, 28, 59, 240, 5, 251, 129, 40, 0, 218, 3, 28, 32, 240, 1, 255, 210, 104, 40, 176, 3, 188, 240, 188, + 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 16, 28, 4, 28, 33, 72, 4, 240, 4, 249, 222, 104, 96, 240, 1, 255, 193, 188, + 16, 188, 1, 71, 0, 19, 115, 240, 128, 181, 240, 28, 7, 32, 164, 176, 129, 0, 64, 28, 14, 240, 1, 255, 192, 28, 5, 40, + 0, 209, 2, 32, 22, 66, 64, 224, 22, 34, 164, 33, 0, 0, 82, 240, 7, 248, 75, 76, 11, 35, 0, 96, 51, 96, 117, 28, 32, + 96, 35, 28, 49, 28, 58, 240, 4, 250, 59, 40, 0, 208, 1, 32, 0, 224, 3, 28, 40, 240, 1, 255, 152, 104, 32, 176, 1, 188, + 240, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 240, 76, 51, 68, 165, 172, 155, 145, 2, 28, 33, 144, 3, 146, 1, + 247, 255, 255, 202, 40, 0, 219, 81, 74, 44, 73, 43, 145, 4, 146, 5, 74, 44, 39, 1, 146, 0, 152, 0, 169, 155, 170, 71, + 171, 135, 240, 4, 249, 151, 40, 0, 209, 55, 172, 71, 120, 35, 43, 46, 208, 243, 43, 35, 208, 241, 28, 32, 240, 7, 254, + 36, 40, 12, 216, 236, 155, 137, 4, 89, 213, 30, 172, 7, 153, 3, 28, 32, 240, 7, 253, 246, 73, 30, 28, 32, 240, 7, 253, + 60, 169, 71, 28, 32, 240, 7, 253, 56, 28, 32, 169, 152, 170, 157, 247, 255, 255, 197, 40, 0, 219, 19, 155, 152, 156, + 153, 153, 4, 154, 5, 25, 18, 65, 89, 155, 157, 145, 4, 146, 5, 24, 255, 224, 8, 155, 141, 28, 30, 23, 221, 154, 4, 155, + 5, 25, 155, 65, 106, 146, 4, 147, 5, 55, 1, 231, 191, 153, 2, 155, 4, 156, 5, 96, 11, 96, 76, 154, 1, 168, 155, 96, + 23, 247, 255, 255, 105, 32, 0, 35, 159, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 0, 0, 0, 0, 0, 0, 64, 0, 255, 255, + 253, 132, 19, 115, 240, 128, 19, 115, 167, 80, 70, 192, 70, 192, 181, 240, 176, 213, 172, 82, 28, 33, 28, 6, 247, 255, + 255, 93, 40, 0, 219, 40, 79, 22, 173, 33, 28, 56, 169, 82, 28, 42, 171, 65, 240, 4, 249, 47, 40, 0, 209, 26, 120, 43, + 43, 46, 208, 244, 172, 1, 28, 49, 28, 32, 240, 7, 253, 153, 73, 14, 28, 32, 240, 7, 252, 223, 28, 32, 28, 41, 240, 7, + 252, 219, 155, 67, 4, 90, 213, 2, 28, 32, 247, 255, 255, 215, 168, 1, 247, 255, 254, 126, 40, 0, 218, 220, 168, 82, + 247, 255, 255, 37, 32, 0, 176, 85, 188, 240, 188, 2, 71, 8, 19, 115, 240, 128, 19, 115, 167, 80, 181, 240, 176, 167, + 76, 36, 147, 0, 173, 36, 35, 0, 145, 2, 96, 35, 28, 41, 146, 1, 247, 255, 255, 30, 40, 0, 219, 56, 38, 0, 39, 0, 224, + 42, 72, 29, 169, 36, 170, 4, 35, 0, 240, 4, 248, 239, 144, 3, 40, 0, 209, 38, 154, 2, 25, 213, 70, 106, 124, 19, 43, + 46, 208, 27, 43, 35, 208, 25, 155, 2, 43, 0, 208, 19, 168, 4, 240, 7, 253, 118, 28, 4, 40, 12, 220, 16, 169, 4, 28, + 34, 28, 40, 240, 6, 254, 188, 35, 15, 70, 106, 92, 154, 28, 40, 85, 42, 240, 7, 253, 103, 48, 1, 224, 0, 32, 0, 54, + 1, 24, 63, 155, 0, 43, 0, 208, 209, 66, 179, 216, 207, 154, 1, 168, 36, 96, 22, 247, 255, 254, 214, 32, 0, 176, 39, + 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 240, 176, 199, 76, 35, 147, 0, 173, 68, 35, 0, 145, 2, 96, + 35, 28, 41, 146, 1, 247, 255, 254, 208, 40, 0, 219, 54, 38, 0, 39, 0, 224, 40, 72, 28, 169, 68, 170, 4, 35, 0, 240, + 4, 248, 161, 144, 3, 40, 0, 209, 36, 154, 2, 25, 213, 70, 106, 124, 19, 43, 46, 208, 25, 43, 35, 208, 23, 155, 2, 43, + 0, 208, 17, 168, 4, 240, 7, 253, 40, 28, 4, 169, 4, 28, 34, 28, 40, 240, 6, 254, 112, 35, 15, 70, 106, 92, 154, 28, + 40, 85, 42, 240, 7, 253, 27, 48, 1, 224, 0, 32, 0, 54, 1, 24, 63, 155, 0, 43, 0, 208, 211, 66, 179, 216, 209, 154, 1, + 168, 68, 96, 22, 247, 255, 254, 138, 32, 0, 176, 71, 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 16, 28, + 4, 34, 0, 28, 8, 92, 161, 92, 131, 41, 0, 209, 2, 43, 0, 209, 10, 224, 7, 43, 0, 208, 5, 43, 35, 208, 1, 66, 153, 209, + 3, 50, 1, 231, 240, 32, 0, 224, 1, 32, 1, 66, 64, 188, 16, 188, 2, 71, 8, 181, 16, 73, 33, 28, 4, 247, 255, 255, 225, + 40, 0, 208, 53, 73, 31, 28, 32, 247, 255, 255, 219, 40, 0, 208, 47, 73, 29, 28, 32, 247, 255, 255, 213, 40, 0, 208, + 41, 73, 27, 28, 32, 247, 255, 255, 207, 40, 0, 208, 37, 73, 25, 28, 32, 247, 255, 255, 201, 40, 0, 208, 29, 73, 23, + 28, 32, 247, 255, 255, 195, 40, 0, 208, 23, 73, 21, 28, 32, 247, 255, 255, 189, 40, 0, 208, 17, 73, 19, 28, 32, 247, + 255, 255, 183, 40, 0, 208, 11, 73, 17, 28, 32, 247, 255, 255, 177, 40, 0, 208, 5, 73, 15, 28, 32, 247, 255, 255, 171, + 40, 0, 209, 1, 32, 0, 224, 1, 32, 1, 66, 64, 188, 16, 188, 2, 71, 8, 19, 115, 167, 82, 19, 115, 167, 98, 19, 115, 167, + 114, 19, 115, 167, 130, 19, 115, 167, 146, 19, 115, 167, 151, 19, 115, 167, 168, 19, 115, 167, 185, 19, 115, 167, 202, + 19, 115, 167, 216, 32, 6, 66, 64, 71, 112, 70, 192, 32, 6, 66, 64, 71, 112, 70, 192, 32, 6, 66, 64, 71, 112, 70, 192, + 32, 6, 66, 64, 71, 112, 70, 192, 181, 240, 77, 53, 28, 3, 104, 40, 176, 131, 48, 64, 28, 14, 28, 25, 28, 23, 240, 2, + 251, 219, 104, 40, 33, 0, 28, 2, 50, 64, 14, 19, 112, 3, 12, 19, 112, 67, 10, 19, 112, 131, 112, 194, 35, 1, 50, 96, + 113, 131, 14, 19, 114, 3, 12, 19, 114, 67, 114, 194, 10, 19, 50, 4, 114, 131, 14, 19, 116, 3, 12, 19, 113, 1, 113, 65, + 113, 193, 115, 1, 115, 65, 115, 129, 116, 67, 117, 1, 10, 19, 117, 65, 117, 129, 36, 4, 33, 128, 116, 131, 116, 194, + 115, 196, 117, 196, 0, 73, 247, 255, 252, 178, 75, 26, 33, 15, 104, 24, 104, 43, 34, 1, 147, 0, 35, 2, 247, 255, 252, + 113, 40, 0, 209, 35, 104, 41, 28, 11, 51, 160, 120, 26, 51, 1, 120, 27, 6, 18, 4, 27, 67, 19, 28, 10, 50, 162, 120, + 18, 2, 18, 67, 26, 28, 11, 51, 163, 120, 27, 67, 19, 96, 51, 28, 11, 51, 164, 120, 26, 51, 1, 120, 27, 6, 18, 4, 27, + 67, 19, 28, 10, 50, 166, 120, 18, 49, 167, 2, 18, 67, 26, 120, 11, 67, 19, 96, 59, 176, 3, 188, 240, 188, 2, 71, 8, + 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, 28, 1, 104, 32, 176, 130, 48, 64, 240, 2, 251, 110, 104, + 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, + 24, 113, 88, 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, 252, 92, 75, 7, 33, 6, 104, 24, 104, 35, 34, 1, 147, 0, 35, + 0, 247, 255, 252, 27, 176, 2, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, + 28, 1, 104, 32, 176, 130, 48, 64, 240, 2, 251, 62, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, + 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, 24, 113, 88, 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, + 252, 44, 75, 7, 33, 7, 104, 24, 104, 35, 34, 1, 147, 0, 35, 0, 247, 255, 251, 235, 176, 2, 188, 16, 188, 2, 71, 8, 70, + 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 240, 76, 68, 28, 3, 104, 32, 176, 131, 48, 64, 28, 13, 28, 25, 28, 22, + 240, 2, 251, 11, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, + 35, 34, 1, 113, 24, 113, 88, 113, 154, 113, 216, 104, 34, 39, 4, 28, 17, 49, 160, 14, 11, 114, 19, 12, 11, 114, 83, + 10, 11, 114, 147, 114, 209, 104, 35, 115, 24, 115, 88, 115, 152, 115, 223, 45, 0, 209, 1, 36, 1, 224, 50, 104, 34, 120, + 49, 28, 19, 51, 160, 112, 25, 120, 113, 51, 1, 112, 25, 120, 177, 51, 1, 112, 25, 120, 243, 50, 163, 112, 19, 104, 34, + 14, 43, 116, 19, 12, 43, 116, 83, 10, 43, 116, 147, 116, 213, 104, 50, 104, 33, 0, 83, 24, 155, 0, 155, 24, 155, 14, + 26, 117, 10, 12, 26, 117, 74, 10, 26, 117, 203, 117, 138, 104, 34, 28, 17, 49, 160, 14, 11, 118, 19, 12, 11, 118, 83, + 10, 11, 118, 147, 118, 209, 104, 35, 36, 2, 119, 24, 119, 88, 119, 152, 119, 223, 77, 19, 33, 128, 104, 40, 0, 73, 247, + 255, 251, 177, 75, 17, 33, 248, 104, 24, 104, 43, 28, 34, 147, 0, 28, 35, 247, 255, 251, 112, 40, 0, 209, 17, 104, 41, + 28, 11, 51, 160, 120, 26, 51, 1, 120, 27, 6, 18, 4, 27, 67, 19, 28, 10, 50, 162, 120, 18, 49, 163, 2, 18, 67, 26, 120, + 11, 67, 19, 96, 51, 176, 3, 188, 240, 188, 2, 71, 8, 19, 115, 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, 28, 1, 104, + 32, 176, 130, 48, 64, 240, 2, 250, 128, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, + 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, 24, 113, 88, 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, 251, 110, 75, + 7, 33, 9, 104, 24, 104, 35, 34, 1, 147, 0, 35, 0, 247, 255, 251, 45, 176, 2, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, + 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, 28, 1, 104, 32, 176, 130, 48, 64, 240, 2, 250, 80, 104, 34, 32, 0, 28, + 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, 24, 113, 88, + 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, 251, 62, 75, 7, 33, 10, 104, 24, 104, 35, 34, 1, 147, 0, 35, 0, 247, 255, + 250, 253, 176, 2, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 48, 76, 32, 28, 3, 104, + 32, 176, 131, 28, 13, 48, 64, 28, 25, 240, 2, 250, 30, 104, 32, 28, 41, 48, 160, 240, 2, 250, 25, 104, 34, 32, 0, 28, + 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 37, 1, 113, 157, 113, 24, 113, 88, + 113, 216, 104, 34, 28, 17, 49, 160, 14, 11, 114, 19, 12, 11, 114, 83, 10, 11, 114, 209, 114, 147, 104, 35, 33, 128, + 115, 157, 115, 24, 115, 88, 115, 216, 104, 32, 0, 73, 247, 255, 250, 248, 75, 7, 33, 11, 104, 24, 104, 35, 34, 2, 147, + 0, 35, 0, 247, 255, 250, 183, 176, 3, 188, 48, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 112, + 76, 36, 28, 3, 104, 32, 176, 130, 48, 64, 28, 14, 28, 25, 240, 2, 249, 216, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, + 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 24, 113, 88, 113, 154, 113, 216, 104, 34, + 28, 17, 49, 160, 14, 11, 114, 19, 12, 11, 114, 83, 10, 11, 114, 209, 114, 147, 104, 35, 34, 68, 115, 218, 115, 24, 115, + 88, 115, 152, 33, 128, 104, 32, 0, 73, 247, 255, 250, 182, 75, 13, 33, 12, 104, 24, 104, 35, 34, 1, 147, 0, 35, 1, 247, + 255, 250, 117, 28, 5, 40, 0, 219, 7, 46, 0, 208, 5, 104, 33, 28, 48, 49, 160, 34, 68, 240, 2, 249, 142, 176, 2, 28, + 40, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 112, 76, 35, 28, 3, 104, 32, 176, 130, + 48, 64, 28, 14, 28, 25, 240, 2, 249, 138, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, + 112, 209, 112, 147, 104, 35, 34, 1, 113, 24, 113, 88, 113, 154, 113, 216, 104, 34, 28, 17, 49, 160, 14, 11, 114, 19, + 12, 11, 114, 83, 10, 11, 114, 209, 114, 147, 104, 35, 34, 44, 115, 218, 115, 24, 115, 88, 115, 152, 33, 128, 104, 32, + 0, 73, 247, 255, 250, 104, 75, 12, 33, 13, 104, 24, 104, 35, 34, 1, 147, 0, 35, 1, 247, 255, 250, 39, 28, 5, 40, 0, + 219, 5, 104, 33, 28, 48, 49, 160, 34, 44, 240, 2, 249, 66, 176, 2, 28, 40, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, + 244, 168, 19, 115, 160, 12, 181, 48, 75, 10, 28, 12, 104, 26, 73, 9, 0, 83, 24, 155, 0, 155, 28, 5, 24, 201, 176, 129, + 28, 32, 240, 2, 249, 58, 28, 41, 28, 32, 240, 2, 249, 70, 176, 1, 188, 48, 188, 1, 71, 0, 19, 115, 247, 40, 19, 115, + 171, 84, 181, 16, 75, 13, 104, 27, 43, 0, 218, 18, 76, 12, 104, 35, 43, 0, 209, 6, 33, 128, 32, 0, 0, 73, 34, 32, 247, + 255, 249, 239, 96, 32, 72, 7, 33, 0, 247, 255, 250, 42, 40, 0, 219, 2, 75, 2, 96, 24, 32, 0, 188, 16, 188, 2, 71, 8, + 19, 115, 160, 12, 19, 115, 244, 168, 19, 115, 167, 229, 181, 16, 76, 53, 104, 35, 43, 0, 218, 99, 247, 255, 255, 215, + 96, 32, 40, 0, 219, 94, 76, 49, 72, 50, 28, 33, 247, 255, 255, 181, 28, 32, 247, 255, 253, 132, 28, 33, 72, 47, 247, + 255, 255, 174, 28, 32, 247, 255, 254, 155, 28, 32, 247, 255, 253, 122, 28, 33, 72, 43, 247, 255, 255, 164, 28, 32, 247, + 255, 254, 145, 28, 32, 247, 255, 253, 112, 72, 39, 28, 33, 247, 255, 255, 154, 33, 128, 0, 73, 28, 32, 247, 255, 249, + 225, 28, 32, 247, 255, 253, 100, 28, 33, 72, 34, 247, 255, 255, 142, 28, 32, 247, 255, 253, 93, 72, 32, 28, 33, 247, + 255, 255, 135, 33, 128, 0, 73, 28, 32, 247, 255, 249, 206, 28, 32, 247, 255, 253, 81, 72, 27, 28, 33, 247, 255, 255, + 123, 33, 128, 0, 73, 28, 32, 247, 255, 249, 194, 28, 32, 247, 255, 253, 69, 72, 22, 28, 33, 247, 255, 255, 111, 33, + 128, 28, 32, 0, 73, 247, 255, 249, 182, 28, 32, 247, 255, 253, 57, 75, 17, 104, 27, 43, 0, 208, 7, 72, 16, 73, 16, 247, + 255, 249, 183, 40, 0, 219, 1, 247, 255, 249, 135, 188, 16, 188, 1, 71, 0, 19, 115, 160, 12, 19, 115, 245, 32, 19, 115, + 169, 60, 19, 115, 167, 146, 19, 115, 167, 233, 19, 115, 167, 241, 19, 115, 167, 246, 19, 115, 167, 82, 19, 115, 167, + 98, 19, 115, 167, 114, 19, 115, 247, 36, 19, 115, 167, 253, 0, 0, 6, 2, 181, 240, 35, 0, 176, 135, 145, 2, 96, 11, 75, + 117, 28, 4, 104, 27, 43, 0, 209, 0, 224, 221, 247, 255, 255, 109, 75, 114, 104, 27, 43, 0, 218, 0, 224, 214, 75, 112, + 104, 27, 43, 1, 221, 22, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 123, 225, 2, 27, 67, 19, 67, 25, 122, 98, + 122, 35, 4, 18, 6, 27, 67, 26, 122, 163, 72, 103, 2, 27, 67, 19, 122, 226, 67, 26, 240, 1, 251, 109, 126, 35, 126, 98, + 6, 27, 4, 18, 67, 26, 126, 163, 2, 27, 67, 19, 126, 226, 28, 21, 67, 29, 125, 98, 125, 35, 4, 18, 6, 27, 67, 26, 125, + 163, 2, 27, 67, 19, 125, 226, 67, 26, 146, 1, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 2, 27, 67, 19, 123, + 226, 28, 17, 67, 25, 41, 4, 208, 3, 41, 12, 208, 0, 224, 142, 224, 80, 39, 0, 151, 5, 104, 46, 104, 172, 28, 48, 247, + 255, 251, 221, 40, 0, 208, 2, 154, 2, 96, 23, 224, 136, 154, 2, 35, 1, 96, 19, 155, 1, 43, 1, 216, 3, 34, 0, 28, 37, + 146, 3, 224, 20, 104, 171, 104, 31, 151, 5, 105, 43, 147, 3, 75, 66, 105, 173, 104, 27, 43, 0, 208, 10, 33, 13, 104, + 40, 240, 5, 252, 254, 76, 63, 28, 2, 28, 57, 28, 32, 28, 51, 240, 1, 251, 27, 73, 61, 28, 48, 247, 255, 254, 187, 75, + 60, 104, 27, 43, 0, 208, 1, 240, 1, 255, 67, 72, 56, 153, 3, 170, 5, 247, 255, 252, 226, 75, 54, 28, 4, 104, 27, 43, + 0, 208, 1, 240, 1, 255, 43, 75, 47, 104, 27, 43, 0, 208, 5, 72, 50, 153, 5, 74, 47, 28, 35, 240, 1, 250, 251, 44, 0, + 219, 73, 155, 5, 36, 0, 96, 43, 224, 69, 104, 44, 28, 32, 247, 255, 251, 143, 40, 0, 208, 3, 154, 2, 35, 0, 96, 19, + 224, 57, 73, 37, 28, 32, 247, 255, 254, 139, 75, 36, 104, 27, 43, 0, 208, 1, 240, 1, 255, 19, 78, 32, 104, 169, 105, + 42, 28, 48, 247, 255, 251, 225, 28, 4, 40, 0, 219, 21, 240, 1, 254, 252, 104, 168, 33, 4, 247, 255, 248, 194, 105, 40, + 33, 4, 247, 255, 248, 190, 75, 19, 104, 27, 43, 0, 208, 7, 104, 171, 72, 23, 104, 25, 105, 43, 104, 26, 28, 51, 240, + 1, 250, 194, 75, 17, 104, 27, 43, 0, 208, 1, 240, 1, 254, 226, 154, 2, 35, 1, 96, 19, 224, 8, 75, 8, 104, 27, 43, 0, + 208, 2, 72, 13, 240, 1, 250, 177, 36, 6, 66, 100, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 19, 115, 247, 32, 19, 115, + 160, 12, 19, 115, 247, 36, 19, 115, 168, 13, 19, 115, 168, 35, 19, 115, 245, 32, 19, 115, 160, 16, 19, 115, 168, 56, + 19, 115, 168, 83, 19, 115, 168, 102, 181, 240, 35, 0, 96, 11, 75, 189, 176, 131, 104, 27, 28, 4, 28, 14, 43, 0, 209, + 0, 226, 37, 247, 255, 254, 105, 75, 185, 104, 27, 43, 0, 218, 0, 226, 30, 75, 183, 104, 27, 43, 1, 221, 22, 123, 35, + 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 123, 225, 2, 27, 67, 19, 67, 25, 122, 98, 122, 35, 4, 18, 6, 27, 67, 26, 122, + 163, 72, 174, 2, 27, 67, 19, 122, 226, 67, 26, 240, 1, 250, 105, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 2, + 27, 67, 19, 123, 226, 28, 17, 67, 25, 127, 98, 127, 35, 4, 18, 6, 27, 67, 26, 127, 163, 2, 27, 67, 19, 127, 226, 67, + 26, 146, 1, 126, 35, 126, 98, 6, 27, 4, 18, 67, 26, 126, 163, 2, 27, 67, 19, 126, 226, 28, 23, 67, 31, 124, 98, 124, + 35, 4, 18, 6, 27, 67, 26, 124, 163, 2, 27, 67, 19, 124, 226, 28, 21, 67, 29, 30, 75, 43, 10, 217, 0, 225, 202, 74, 148, + 0, 155, 88, 211, 70, 159, 29, 172, 28, 32, 247, 255, 250, 207, 40, 0, 208, 0, 225, 152, 35, 1, 96, 51, 73, 142, 28, + 32, 247, 255, 253, 204, 75, 141, 104, 27, 43, 0, 208, 1, 240, 1, 254, 84, 72, 137, 247, 255, 251, 149, 75, 137, 28, + 4, 104, 27, 43, 0, 208, 1, 240, 1, 254, 62, 75, 129, 104, 27, 43, 0, 209, 0, 225, 175, 72, 132, 225, 153, 75, 126, 104, + 27, 43, 0, 208, 3, 72, 130, 29, 169, 240, 1, 250, 9, 29, 172, 28, 32, 247, 255, 250, 163, 40, 0, 208, 0, 225, 108, 35, + 1, 96, 51, 73, 120, 28, 32, 247, 255, 253, 160, 75, 119, 104, 27, 43, 0, 208, 1, 240, 1, 254, 40, 72, 115, 247, 255, + 251, 153, 75, 115, 28, 4, 104, 27, 43, 0, 208, 1, 240, 1, 254, 18, 75, 107, 104, 27, 43, 0, 209, 0, 225, 131, 72, 112, + 225, 109, 28, 40, 247, 255, 250, 128, 40, 0, 208, 0, 225, 73, 35, 1, 96, 51, 73, 103, 28, 40, 247, 255, 253, 125, 75, + 102, 104, 27, 43, 0, 208, 1, 240, 1, 254, 5, 72, 98, 247, 255, 252, 52, 75, 97, 28, 4, 104, 27, 43, 0, 208, 1, 240, + 1, 253, 239, 75, 90, 104, 27, 43, 0, 209, 0, 225, 96, 72, 95, 225, 74, 45, 0, 208, 2, 120, 43, 43, 31, 216, 3, 35, 1, + 96, 51, 36, 101, 225, 84, 28, 40, 247, 255, 250, 84, 40, 0, 208, 0, 225, 29, 35, 1, 96, 51, 73, 81, 28, 40, 247, 255, + 253, 81, 28, 40, 48, 64, 73, 84, 247, 255, 253, 76, 75, 77, 104, 27, 43, 0, 208, 1, 240, 1, 253, 212, 77, 73, 76, 79, + 28, 40, 28, 33, 34, 64, 240, 1, 254, 77, 40, 0, 209, 5, 28, 40, 33, 0, 247, 255, 252, 159, 28, 4, 224, 38, 77, 73, 28, + 32, 28, 41, 247, 255, 252, 152, 40, 0, 219, 14, 104, 170, 35, 240, 2, 27, 64, 19, 34, 128, 1, 210, 66, 147, 209, 3, + 28, 32, 247, 255, 252, 21, 224, 2, 28, 32, 247, 255, 251, 225, 77, 55, 78, 60, 28, 40, 28, 49, 247, 255, 252, 59, 75, + 49, 28, 4, 104, 27, 43, 0, 208, 5, 72, 57, 28, 41, 28, 50, 28, 35, 240, 1, 249, 108, 75, 47, 104, 27, 43, 0, 209, 0, + 225, 3, 240, 1, 253, 139, 225, 0, 28, 40, 247, 255, 249, 255, 40, 0, 208, 0, 224, 200, 35, 1, 96, 51, 155, 1, 43, 27, + 216, 1, 76, 46, 224, 243, 72, 46, 73, 35, 247, 255, 252, 247, 75, 35, 104, 27, 43, 0, 208, 1, 240, 1, 253, 127, 72, + 31, 73, 41, 247, 255, 252, 161, 75, 30, 28, 4, 104, 27, 43, 0, 208, 1, 240, 1, 253, 104, 75, 22, 104, 27, 43, 0, 208, + 4, 72, 35, 73, 23, 28, 34, 240, 1, 249, 57, 44, 0, 218, 0, 224, 210, 28, 56, 154, 1, 33, 0, 240, 1, 253, 255, 74, 28, + 28, 56, 104, 19, 96, 59, 104, 211, 96, 123, 105, 147, 97, 123, 104, 147, 104, 210, 26, 155, 96, 187, 153, 1, 247, 254, + 255, 18, 224, 189, 75, 6, 104, 27, 43, 0, 209, 0, 224, 182, 72, 19, 240, 1, 249, 25, 224, 178, 19, 115, 247, 32, 19, + 115, 160, 12, 19, 115, 247, 36, 19, 115, 168, 135, 19, 115, 170, 12, 19, 115, 245, 32, 19, 115, 160, 16, 19, 115, 168, + 156, 19, 115, 168, 178, 19, 115, 168, 202, 19, 115, 168, 225, 19, 115, 246, 32, 19, 115, 244, 216, 19, 115, 168, 250, + 255, 255, 252, 7, 19, 115, 167, 80, 19, 115, 244, 172, 19, 115, 169, 22, 19, 115, 169, 42, 28, 40, 247, 255, 249, 141, + 40, 0, 209, 87, 35, 1, 96, 51, 75, 70, 104, 27, 43, 0, 208, 3, 72, 69, 28, 41, 240, 1, 248, 227, 73, 68, 28, 40, 247, + 255, 252, 131, 75, 67, 104, 27, 43, 0, 208, 1, 240, 1, 253, 11, 72, 63, 73, 64, 247, 255, 251, 223, 75, 62, 28, 4, 104, + 27, 43, 0, 208, 1, 240, 1, 252, 244, 75, 55, 104, 27, 43, 0, 208, 4, 72, 58, 73, 55, 28, 34, 240, 1, 248, 197, 44, 0, + 219, 95, 75, 56, 29, 184, 96, 59, 35, 4, 136, 27, 28, 41, 128, 187, 34, 64, 240, 1, 253, 149, 28, 58, 50, 73, 35, 0, + 112, 19, 73, 50, 28, 40, 247, 255, 249, 53, 28, 58, 28, 57, 50, 71, 49, 72, 40, 0, 209, 3, 35, 3, 112, 19, 112, 8, 224, + 2, 35, 3, 112, 19, 112, 11, 28, 58, 50, 70, 35, 3, 112, 19, 28, 56, 153, 1, 247, 254, 254, 140, 224, 42, 29, 172, 28, + 32, 247, 255, 249, 53, 40, 0, 208, 1, 35, 0, 224, 44, 35, 1, 96, 51, 73, 27, 28, 32, 247, 255, 252, 49, 75, 26, 104, + 27, 43, 0, 208, 1, 240, 1, 252, 185, 72, 22, 73, 23, 247, 255, 251, 141, 75, 21, 28, 4, 104, 27, 43, 0, 208, 1, 240, + 1, 252, 162, 75, 14, 104, 27, 43, 0, 208, 20, 72, 20, 73, 14, 28, 34, 240, 1, 248, 115, 224, 14, 35, 1, 96, 51, 36, + 0, 224, 10, 75, 7, 104, 27, 43, 0, 208, 2, 72, 14, 240, 1, 248, 103, 35, 1, 96, 51, 36, 6, 66, 100, 176, 3, 28, 32, + 188, 240, 188, 2, 71, 8, 19, 115, 247, 36, 19, 115, 169, 61, 19, 115, 245, 32, 19, 115, 160, 16, 19, 115, 244, 216, + 19, 115, 169, 74, 0, 0, 16, 1, 19, 115, 169, 94, 19, 115, 169, 131, 19, 115, 169, 152, 181, 16, 75, 14, 28, 4, 104, + 27, 43, 0, 208, 18, 247, 255, 252, 34, 75, 11, 104, 27, 43, 1, 221, 12, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, + 163, 123, 225, 2, 27, 67, 19, 72, 6, 67, 25, 240, 1, 248, 49, 32, 6, 66, 64, 188, 16, 188, 2, 71, 8, 19, 115, 247, 32, + 19, 115, 247, 36, 19, 115, 169, 184, 181, 16, 75, 36, 28, 4, 104, 27, 43, 1, 221, 12, 123, 35, 123, 98, 6, 27, 4, 18, + 67, 26, 123, 163, 123, 225, 2, 27, 67, 19, 72, 30, 67, 25, 240, 1, 248, 19, 123, 34, 123, 99, 6, 18, 4, 27, 67, 19, + 123, 162, 2, 18, 67, 26, 123, 227, 67, 19, 43, 8, 209, 35, 126, 34, 126, 99, 6, 18, 4, 27, 67, 19, 126, 162, 2, 18, + 67, 26, 126, 227, 67, 19, 104, 27, 104, 25, 104, 90, 75, 14, 104, 27, 43, 0, 208, 2, 72, 14, 240, 0, 255, 243, 33, 0, + 72, 13, 247, 254, 253, 235, 72, 13, 33, 0, 34, 0, 240, 1, 252, 40, 75, 6, 104, 27, 43, 0, 208, 2, 72, 9, 240, 0, 255, + 227, 28, 32, 240, 5, 248, 195, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 247, 36, 19, 115, 169, 197, 19, 115, 169, 214, + 19, 115, 169, 239, 19, 115, 31, 49, 19, 115, 169, 252, 181, 48, 176, 129, 28, 5, 240, 0, 254, 203, 240, 1, 252, 89, + 32, 128, 240, 0, 254, 162, 40, 0, 209, 2, 36, 22, 66, 100, 224, 19, 33, 32, 247, 254, 253, 178, 28, 4, 40, 0, 219, 13, + 28, 33, 72, 8, 247, 254, 253, 199, 28, 33, 72, 7, 247, 254, 253, 195, 28, 33, 72, 6, 247, 254, 253, 191, 96, 44, 36, + 0, 176, 1, 28, 32, 188, 48, 188, 2, 71, 8, 19, 115, 167, 229, 19, 115, 170, 56, 19, 115, 170, 60, 181, 240, 126, 3, + 126, 66, 6, 27, 4, 18, 67, 26, 126, 131, 176, 135, 2, 27, 67, 19, 126, 194, 28, 5, 28, 20, 67, 28, 124, 66, 124, 3, + 4, 18, 6, 27, 67, 26, 124, 131, 28, 38, 2, 27, 67, 19, 124, 194, 39, 0, 67, 26, 146, 1, 125, 3, 125, 66, 6, 27, 4, 18, + 67, 26, 125, 131, 2, 27, 67, 19, 125, 194, 28, 32, 67, 26, 155, 1, 146, 2, 24, 210, 0, 209, 146, 0, 247, 254, 253, 65, + 148, 3, 224, 5, 104, 48, 104, 113, 247, 254, 253, 59, 55, 1, 54, 8, 154, 0, 66, 151, 211, 246, 123, 43, 123, 106, 6, + 27, 4, 18, 67, 26, 123, 171, 2, 27, 67, 19, 123, 234, 67, 26, 42, 11, 209, 0, 224, 147, 42, 11, 216, 33, 42, 5, 208, + 90, 42, 5, 216, 13, 42, 2, 208, 67, 42, 2, 216, 3, 42, 1, 208, 0, 225, 101, 224, 55, 42, 3, 208, 64, 42, 4, 208, 0, + 225, 95, 224, 67, 42, 8, 208, 89, 42, 8, 216, 5, 42, 6, 208, 77, 42, 7, 208, 0, 225, 85, 224, 77, 42, 9, 208, 107, 42, + 10, 208, 0, 225, 79, 224, 107, 42, 128, 209, 0, 224, 167, 42, 128, 216, 9, 42, 13, 208, 114, 42, 13, 211, 107, 42, 14, + 208, 115, 42, 15, 208, 0, 225, 64, 224, 132, 42, 242, 209, 0, 224, 251, 42, 242, 216, 6, 42, 240, 209, 0, 224, 170, + 42, 241, 208, 0, 225, 52, 224, 215, 42, 243, 209, 0, 225, 19, 42, 248, 208, 0, 225, 45, 224, 55, 104, 163, 104, 32, + 104, 25, 247, 254, 253, 244, 224, 105, 104, 35, 104, 24, 247, 254, 253, 149, 224, 100, 104, 35, 104, 161, 104, 24, 104, + 226, 247, 254, 253, 212, 224, 93, 104, 35, 104, 161, 104, 24, 104, 226, 247, 254, 253, 185, 224, 86, 104, 35, 104, 24, + 104, 163, 104, 25, 105, 35, 104, 26, 247, 254, 253, 156, 224, 77, 104, 32, 247, 254, 253, 134, 224, 73, 104, 32, 247, + 254, 253, 88, 224, 69, 155, 2, 104, 32, 104, 162, 43, 1, 217, 3, 104, 19, 105, 33, 105, 162, 224, 1, 33, 0, 35, 0, 247, + 254, 255, 24, 224, 55, 155, 2, 104, 32, 104, 162, 43, 1, 217, 3, 104, 19, 105, 33, 105, 162, 224, 1, 33, 0, 35, 0, 247, + 254, 254, 188, 224, 41, 104, 32, 247, 254, 253, 40, 224, 37, 104, 32, 247, 254, 254, 122, 224, 33, 104, 32, 104, 161, + 247, 254, 253, 13, 224, 28, 104, 32, 104, 161, 247, 254, 252, 246, 224, 23, 104, 32, 104, 161, 247, 254, 252, 223, 224, + 18, 122, 43, 122, 106, 6, 27, 4, 18, 67, 26, 122, 171, 104, 33, 2, 27, 67, 19, 122, 234, 28, 16, 154, 1, 67, 24, 42, + 0, 208, 1, 104, 8, 104, 161, 247, 254, 252, 187, 28, 4, 224, 200, 104, 32, 104, 165, 105, 34, 36, 0, 35, 0, 147, 4, + 148, 5, 35, 0, 96, 19, 169, 4, 247, 254, 253, 217, 28, 4, 40, 101, 209, 0, 36, 0, 154, 4, 155, 5, 4, 146, 11, 155, 67, + 19, 96, 43, 224, 177, 104, 33, 72, 98, 104, 11, 34, 7, 64, 19, 96, 3, 104, 11, 34, 1, 72, 95, 9, 219, 64, 19, 96, 3, + 104, 11, 72, 94, 8, 219, 64, 19, 96, 3, 104, 11, 74, 92, 6, 155, 15, 155, 96, 19, 224, 153, 75, 91, 104, 27, 43, 0, + 219, 1, 36, 1, 224, 10, 75, 89, 104, 155, 240, 0, 248, 191, 40, 0, 209, 0, 224, 138, 74, 84, 35, 0, 96, 19, 36, 0, 77, + 82, 104, 43, 43, 0, 209, 25, 78, 81, 72, 82, 28, 49, 240, 4, 252, 183, 66, 68, 65, 68, 44, 0, 209, 10, 35, 1, 96, 43, + 72, 78, 33, 0, 247, 254, 253, 53, 40, 0, 219, 8, 247, 254, 252, 215, 224, 5, 105, 243, 240, 0, 248, 157, 35, 1, 66, + 91, 96, 43, 75, 67, 224, 58, 75, 66, 104, 27, 43, 0, 221, 5, 72, 66, 240, 4, 252, 37, 74, 63, 35, 0, 96, 19, 77, 61, + 104, 43, 43, 0, 208, 1, 36, 1, 224, 8, 75, 59, 105, 219, 240, 0, 248, 132, 66, 68, 65, 68, 35, 1, 66, 91, 96, 43, 75, + 54, 224, 60, 77, 57, 104, 43, 43, 0, 219, 1, 36, 1, 224, 9, 75, 55, 104, 155, 240, 0, 248, 115, 66, 68, 65, 68, 44, + 0, 209, 64, 35, 0, 96, 43, 77, 49, 104, 43, 43, 0, 209, 10, 72, 49, 73, 47, 240, 4, 252, 109, 40, 0, 209, 1, 36, 1, + 224, 2, 35, 1, 96, 43, 36, 0, 75, 41, 104, 27, 43, 0, 220, 42, 224, 42, 76, 39, 104, 35, 43, 0, 221, 4, 72, 39, 240, + 4, 251, 230, 35, 0, 96, 35, 77, 34, 104, 43, 43, 0, 208, 1, 36, 1, 224, 8, 75, 32, 105, 219, 240, 0, 248, 70, 66, 68, + 65, 68, 35, 1, 66, 91, 96, 43, 75, 27, 104, 27, 43, 0, 218, 14, 224, 12, 240, 1, 250, 26, 72, 26, 240, 1, 250, 73, 240, + 1, 250, 9, 72, 25, 240, 1, 250, 68, 231, 244, 36, 1, 224, 0, 36, 0, 37, 0, 224, 8, 155, 3, 53, 1, 104, 24, 104, 89, + 247, 254, 251, 196, 154, 3, 50, 8, 146, 3, 155, 0, 66, 157, 211, 243, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, + 19, 115, 247, 40, 19, 115, 247, 32, 19, 115, 160, 16, 19, 115, 247, 36, 19, 115, 160, 24, 19, 115, 171, 236, 19, 115, + 170, 65, 19, 115, 170, 56, 19, 115, 160, 20, 19, 115, 172, 12, 19, 115, 170, 68, 0, 76, 75, 64, 0, 15, 66, 64, 71, 24, + 70, 192, 181, 240, 176, 135, 240, 1, 250, 0, 28, 3, 72, 198, 33, 4, 96, 3, 247, 254, 251, 146, 74, 196, 35, 0, 96, 19, + 240, 1, 249, 233, 34, 0, 28, 1, 72, 194, 240, 1, 249, 214, 168, 5, 247, 255, 253, 197, 40, 0, 218, 3, 176, 7, 188, 240, + 188, 2, 71, 8, 74, 189, 146, 1, 35, 0, 152, 5, 169, 4, 34, 0, 147, 4, 247, 254, 251, 114, 144, 3, 155, 3, 43, 0, 209, + 244, 153, 4, 120, 10, 120, 75, 6, 18, 4, 27, 67, 19, 120, 138, 2, 18, 67, 26, 120, 203, 67, 19, 59, 1, 43, 6, 217, 0, + 226, 92, 74, 176, 0, 155, 88, 211, 70, 159, 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 2, 27, 67, 19, 123, 202, + 28, 22, 67, 30, 124, 74, 124, 11, 4, 18, 6, 27, 67, 26, 124, 139, 28, 48, 2, 27, 67, 19, 124, 202, 73, 164, 28, 21, + 67, 29, 240, 6, 250, 139, 40, 0, 209, 0, 226, 57, 73, 161, 28, 48, 240, 6, 250, 132, 40, 0, 209, 0, 226, 52, 73, 159, + 28, 48, 240, 6, 250, 125, 40, 0, 209, 2, 75, 150, 96, 24, 224, 8, 73, 155, 28, 48, 240, 6, 250, 116, 40, 0, 209, 4, + 74, 145, 35, 1, 96, 19, 77, 152, 226, 34, 73, 152, 28, 48, 240, 6, 250, 105, 28, 4, 40, 0, 209, 48, 75, 139, 77, 149, + 96, 24, 104, 43, 43, 0, 221, 3, 72, 147, 240, 4, 251, 13, 96, 44, 76, 144, 104, 35, 43, 0, 208, 1, 77, 140, 224, 8, + 75, 143, 105, 219, 240, 0, 250, 38, 66, 69, 65, 69, 35, 1, 66, 91, 96, 35, 76, 140, 104, 35, 43, 0, 221, 4, 72, 139, + 240, 4, 250, 246, 34, 0, 96, 34, 76, 135, 104, 35, 43, 0, 208, 0, 225, 244, 75, 135, 105, 219, 240, 0, 250, 15, 66, + 69, 65, 69, 35, 1, 66, 91, 96, 35, 225, 234, 28, 41, 28, 48, 247, 254, 251, 221, 28, 5, 40, 0, 219, 28, 73, 127, 28, + 48, 34, 8, 240, 6, 250, 245, 40, 0, 209, 2, 74, 125, 33, 0, 224, 7, 73, 124, 28, 48, 34, 9, 240, 6, 250, 235, 40, 0, + 208, 245, 224, 10, 104, 19, 51, 1, 208, 4, 49, 1, 50, 4, 41, 32, 209, 248, 224, 2, 74, 115, 0, 139, 80, 157, 74, 116, + 35, 1, 96, 19, 75, 115, 104, 27, 43, 0, 209, 0, 225, 164, 72, 114, 28, 41, 28, 50, 240, 0, 252, 206, 225, 158, 122, + 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 2, 27, 67, 19, 122, 202, 73, 102, 28, 16, 67, 24, 34, 0, 104, 11, 66, 131, + 208, 4, 50, 1, 49, 4, 42, 32, 209, 248, 224, 4, 73, 96, 35, 1, 0, 146, 66, 91, 80, 83, 247, 254, 251, 57, 225, 163, + 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 36, 0, 2, 27, 67, 19, 123, 202, 28, 23, 67, 31, 124, 74, 124, 11, + 4, 18, 6, 27, 67, 26, 124, 139, 28, 56, 2, 27, 67, 19, 124, 202, 28, 22, 67, 30, 28, 49, 247, 254, 250, 97, 153, 4, + 122, 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 2, 27, 67, 19, 122, 202, 73, 74, 67, 26, 104, 11, 66, 147, 208, 6, + 52, 1, 49, 4, 44, 32, 209, 248, 36, 6, 66, 100, 224, 5, 75, 73, 104, 27, 43, 0, 208, 1, 240, 1, 248, 171, 153, 4, 122, + 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 122, 200, 2, 27, 67, 19, 67, 24, 28, 57, 28, 50, 247, 254, 251, 56, 28, + 5, 44, 0, 219, 5, 75, 61, 104, 27, 43, 0, 208, 1, 240, 1, 248, 135, 45, 0, 218, 14, 74, 54, 35, 1, 96, 19, 75, 53, 104, + 27, 43, 0, 208, 4, 72, 54, 28, 41, 28, 50, 240, 0, 252, 83, 75, 48, 34, 0, 96, 26, 28, 56, 28, 49, 247, 254, 250, 60, + 225, 54, 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 36, 0, 2, 27, 67, 19, 123, 202, 28, 22, 67, 30, 124, 74, + 124, 11, 4, 18, 6, 27, 67, 26, 124, 139, 28, 48, 2, 27, 67, 19, 124, 202, 28, 21, 67, 29, 28, 41, 247, 254, 249, 252, + 153, 4, 122, 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 2, 27, 67, 19, 122, 202, 73, 23, 67, 26, 104, 11, 66, 147, + 208, 56, 52, 1, 49, 4, 44, 32, 209, 248, 36, 6, 66, 100, 224, 55, 19, 117, 188, 168, 19, 115, 247, 32, 19, 115, 32, + 61, 19, 115, 160, 160, 19, 115, 171, 56, 19, 115, 167, 229, 19, 115, 170, 72, 19, 115, 170, 85, 19, 115, 170, 93, 255, + 255, 251, 46, 19, 115, 169, 239, 19, 115, 160, 24, 19, 115, 170, 65, 19, 115, 171, 236, 19, 115, 160, 20, 19, 115, 170, + 68, 19, 115, 172, 12, 19, 115, 170, 100, 19, 115, 160, 32, 19, 115, 170, 109, 19, 117, 183, 96, 19, 115, 247, 36, 19, + 115, 170, 119, 19, 115, 160, 16, 19, 115, 170, 139, 75, 110, 104, 27, 43, 0, 208, 1, 240, 1, 248, 20, 153, 4, 122, 11, + 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 122, 200, 2, 27, 67, 19, 67, 24, 28, 42, 28, 49, 247, 254, 250, 141, 28, 5, + 44, 0, 218, 0, 224, 186, 75, 98, 104, 27, 43, 0, 209, 0, 224, 181, 240, 0, 255, 238, 224, 178, 123, 11, 123, 74, 6, + 27, 4, 18, 67, 26, 123, 139, 122, 200, 2, 27, 67, 19, 123, 202, 28, 22, 67, 30, 124, 74, 124, 11, 4, 18, 6, 27, 67, + 26, 124, 139, 2, 27, 67, 19, 124, 202, 28, 20, 67, 28, 122, 74, 122, 11, 4, 18, 6, 27, 67, 26, 122, 139, 28, 49, 2, + 27, 67, 19, 67, 24, 28, 34, 247, 254, 250, 73, 28, 5, 40, 0, 219, 0, 224, 138, 74, 75, 35, 1, 96, 19, 75, 74, 104, 27, + 43, 0, 208, 105, 72, 73, 28, 41, 28, 50, 28, 35, 224, 98, 122, 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 72, 69, + 2, 27, 67, 19, 122, 202, 67, 26, 104, 3, 66, 147, 208, 4, 155, 1, 48, 4, 66, 152, 209, 248, 224, 112, 75, 60, 104, 27, + 43, 0, 208, 12, 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 123, 201, 2, 27, 67, 19, 72, 57, 67, 25, 240, 0, 251, + 111, 240, 0, 255, 159, 72, 55, 240, 0, 255, 206, 240, 0, 255, 142, 72, 53, 240, 0, 255, 201, 231, 244, 123, 11, 123, + 74, 6, 27, 4, 18, 67, 26, 123, 139, 78, 43, 2, 27, 67, 19, 123, 202, 67, 26, 42, 11, 209, 44, 126, 11, 126, 74, 6, 27, + 4, 18, 67, 26, 126, 139, 122, 200, 2, 27, 67, 19, 126, 202, 28, 20, 67, 28, 122, 74, 122, 11, 4, 18, 6, 27, 67, 26, + 122, 139, 28, 33, 2, 27, 67, 19, 67, 24, 247, 254, 249, 83, 33, 8, 28, 5, 28, 32, 247, 254, 249, 42, 74, 24, 35, 1, + 96, 19, 104, 51, 43, 0, 208, 5, 72, 28, 104, 34, 104, 99, 28, 41, 240, 0, 251, 46, 75, 18, 34, 0, 96, 26, 224, 21, 104, + 51, 43, 0, 208, 3, 72, 23, 28, 17, 240, 0, 251, 35, 240, 0, 255, 83, 72, 17, 240, 0, 255, 130, 240, 0, 255, 66, 72, + 15, 240, 0, 255, 125, 231, 244, 37, 0, 224, 1, 37, 101, 66, 109, 152, 4, 28, 41, 247, 254, 248, 208, 229, 129, 28, 8, + 247, 255, 251, 106, 28, 5, 231, 245, 19, 115, 160, 16, 19, 117, 183, 96, 19, 115, 247, 36, 19, 115, 170, 167, 19, 115, + 160, 32, 19, 115, 170, 195, 0, 76, 75, 64, 0, 15, 66, 64, 19, 115, 170, 237, 19, 115, 171, 13, 71, 24, 70, 192, 181, + 48, 74, 49, 35, 0, 176, 129, 96, 19, 28, 4, 247, 254, 248, 200, 28, 5, 32, 1, 66, 64, 247, 254, 248, 223, 247, 254, + 248, 189, 44, 38, 209, 16, 74, 42, 72, 42, 104, 19, 96, 3, 104, 81, 75, 41, 96, 25, 104, 146, 51, 4, 96, 26, 33, 12, + 247, 254, 248, 182, 75, 38, 72, 39, 104, 27, 224, 38, 44, 37, 209, 16, 74, 32, 72, 37, 104, 19, 96, 3, 104, 81, 75, + 36, 96, 25, 104, 146, 51, 4, 96, 26, 33, 12, 247, 254, 248, 163, 75, 29, 72, 32, 104, 27, 224, 19, 44, 57, 208, 1, 44, + 60, 209, 19, 74, 22, 72, 29, 104, 19, 96, 3, 104, 81, 75, 28, 96, 25, 104, 146, 51, 4, 96, 26, 33, 12, 247, 254, 248, + 142, 75, 18, 72, 25, 104, 27, 96, 3, 33, 4, 247, 254, 248, 135, 72, 23, 75, 23, 74, 24, 96, 3, 75, 24, 33, 8, 96, 26, + 247, 254, 248, 126, 73, 22, 34, 32, 104, 11, 28, 40, 67, 19, 96, 11, 247, 254, 248, 142, 176, 1, 32, 0, 188, 48, 188, + 2, 71, 8, 70, 192, 19, 115, 247, 32, 19, 115, 247, 56, 255, 255, 45, 64, 255, 255, 45, 68, 19, 115, 247, 44, 32, 0, + 33, 208, 255, 255, 46, 80, 255, 255, 46, 84, 32, 0, 95, 56, 255, 255, 48, 32, 255, 255, 48, 36, 32, 0, 97, 184, 32, + 16, 0, 204, 181, 112, 176, 136, 104, 133, 28, 1, 32, 16, 0, 208, 13, 128, 0, 192, 181, 112, 28, 4, 247, 254, 248, 70, + 28, 6, 32, 1, 66, 64, 247, 254, 248, 93, 247, 254, 248, 59, 77, 63, 75, 63, 28, 40, 96, 171, 33, 12, 247, 254, 248, + 60, 44, 38, 209, 26, 72, 60, 74, 61, 104, 3, 76, 61, 96, 19, 104, 35, 73, 60, 96, 83, 104, 11, 96, 147, 74, 59, 75, + 60, 96, 19, 104, 43, 96, 3, 104, 107, 96, 35, 104, 171, 96, 11, 33, 12, 247, 254, 248, 36, 74, 55, 75, 56, 72, 56, 96, + 19, 224, 59, 44, 37, 209, 26, 72, 55, 74, 46, 104, 3, 76, 54, 96, 19, 104, 35, 73, 54, 96, 83, 104, 11, 96, 147, 74, + 45, 75, 52, 96, 19, 104, 43, 96, 3, 104, 107, 96, 35, 104, 171, 96, 11, 33, 12, 247, 254, 248, 7, 74, 41, 75, 47, 72, + 48, 96, 19, 224, 30, 44, 57, 208, 1, 44, 60, 209, 34, 72, 45, 74, 31, 104, 3, 76, 45, 96, 19, 104, 35, 73, 44, 96, 83, + 104, 11, 96, 147, 74, 29, 75, 43, 96, 19, 74, 22, 104, 19, 96, 3, 104, 83, 96, 35, 104, 147, 96, 11, 33, 12, 247, 253, + 255, 231, 74, 25, 75, 37, 72, 38, 96, 19, 104, 2, 75, 37, 33, 4, 96, 26, 75, 37, 96, 3, 247, 253, 255, 219, 72, 36, + 75, 36, 104, 2, 33, 4, 96, 26, 75, 35, 34, 1, 67, 19, 96, 3, 247, 253, 255, 208, 33, 12, 72, 8, 247, 253, 255, 204, + 28, 48, 247, 253, 255, 225, 32, 0, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, 160, 160, 19, 115, 102, 144, 255, 255, + 45, 64, 19, 115, 247, 56, 255, 255, 45, 68, 255, 255, 45, 72, 19, 115, 247, 52, 255, 255, 45, 76, 19, 115, 160, 28, + 32, 0, 33, 156, 32, 0, 33, 208, 255, 255, 46, 80, 255, 255, 46, 84, 255, 255, 46, 88, 255, 255, 46, 92, 32, 0, 95, 10, + 32, 0, 95, 56, 255, 255, 48, 32, 255, 255, 48, 36, 255, 255, 48, 40, 255, 255, 48, 44, 32, 0, 97, 138, 32, 0, 97, 184, + 19, 115, 247, 44, 19, 115, 160, 172, 32, 16, 0, 208, 19, 115, 247, 72, 19, 115, 102, 209, 181, 48, 75, 53, 176, 129, + 96, 25, 75, 52, 28, 4, 104, 27, 28, 13, 43, 0, 208, 91, 75, 50, 104, 27, 43, 0, 221, 21, 73, 49, 247, 254, 250, 31, + 40, 0, 209, 16, 34, 0, 76, 47, 72, 48, 224, 3, 24, 131, 51, 32, 112, 25, 50, 1, 92, 161, 41, 0, 209, 248, 24, 131, 51, + 32, 28, 4, 112, 25, 52, 32, 224, 65, 120, 35, 43, 35, 209, 17, 34, 0, 72, 38, 224, 3, 24, 131, 51, 32, 112, 25, 50, + 1, 24, 163, 120, 89, 41, 0, 209, 247, 24, 131, 51, 32, 112, 25, 75, 27, 28, 4, 96, 29, 224, 44, 28, 32, 247, 254, 250, + 14, 40, 0, 209, 39, 75, 28, 33, 0, 104, 26, 72, 26, 0, 83, 24, 155, 74, 26, 0, 155, 24, 210, 224, 1, 84, 67, 49, 1, + 120, 19, 50, 1, 43, 0, 209, 249, 35, 47, 84, 67, 120, 35, 43, 47, 209, 0, 52, 1, 75, 16, 28, 72, 24, 25, 35, 0, 224, + 2, 112, 10, 51, 1, 49, 1, 92, 226, 42, 0, 209, 249, 73, 11, 24, 203, 84, 26, 74, 4, 35, 2, 96, 19, 28, 12, 176, 1, 28, + 32, 188, 48, 188, 2, 71, 8, 70, 192, 19, 115, 247, 48, 19, 115, 247, 32, 19, 115, 160, 24, 19, 115, 170, 75, 19, 115, + 171, 192, 19, 115, 160, 224, 19, 115, 247, 40, 19, 115, 171, 84, 181, 0, 75, 4, 176, 129, 28, 1, 104, 24, 247, 253, + 255, 53, 176, 1, 188, 1, 71, 0, 19, 115, 161, 224, 181, 0, 75, 15, 28, 1, 176, 129, 104, 24, 34, 32, 247, 253, 254, + 216, 40, 0, 209, 18, 33, 0, 34, 0, 35, 0, 32, 128, 247, 253, 254, 220, 72, 8, 240, 0, 253, 117, 33, 0, 34, 0, 35, 0, + 32, 129, 247, 253, 254, 211, 72, 4, 240, 0, 253, 108, 231, 236, 176, 1, 188, 2, 71, 8, 19, 115, 161, 224, 0, 7, 161, + 32, 181, 16, 76, 9, 104, 35, 43, 0, 218, 10, 33, 224, 72, 7, 2, 73, 247, 253, 254, 246, 96, 32, 40, 0, 218, 2, 32, 1, + 66, 64, 224, 0, 32, 0, 188, 16, 188, 2, 71, 8, 19, 115, 161, 224, 19, 115, 247, 96, 181, 240, 176, 129, 28, 7, 40, 0, + 209, 4, 74, 32, 35, 48, 112, 19, 112, 80, 224, 54, 77, 30, 28, 6, 28, 48, 33, 10, 240, 4, 251, 68, 28, 48, 28, 12, 33, + 10, 240, 4, 250, 245, 23, 227, 24, 228, 64, 92, 52, 48, 75, 24, 112, 44, 61, 1, 28, 6, 66, 157, 209, 236, 28, 42, 58, + 15, 35, 0, 118, 147, 47, 0, 219, 1, 32, 0, 224, 2, 35, 45, 112, 19, 32, 1, 34, 16, 73, 13, 224, 0, 50, 1, 92, 139, 43, + 48, 208, 251, 43, 0, 209, 0, 58, 1, 75, 8, 24, 153, 24, 27, 224, 2, 112, 26, 48, 1, 51, 1, 120, 10, 49, 1, 42, 0, 209, + 248, 75, 3, 84, 26, 176, 1, 188, 240, 188, 1, 71, 0, 70, 192, 19, 117, 188, 172, 19, 117, 188, 197, 19, 117, 188, 187, + 181, 240, 176, 129, 28, 6, 40, 0, 209, 4, 74, 26, 35, 48, 112, 19, 112, 80, 224, 42, 77, 24, 28, 47, 63, 10, 28, 48, + 33, 10, 240, 4, 250, 165, 28, 48, 28, 12, 33, 10, 240, 4, 250, 98, 52, 48, 112, 44, 61, 1, 28, 6, 66, 189, 209, 240, + 28, 42, 35, 0, 58, 15, 118, 147, 35, 16, 224, 0, 51, 1, 92, 209, 41, 48, 208, 251, 41, 0, 209, 0, 59, 1, 72, 8, 34, + 0, 24, 193, 28, 4, 224, 1, 84, 163, 50, 1, 120, 11, 49, 1, 43, 0, 209, 249, 84, 131, 176, 1, 188, 240, 188, 1, 71, 0, + 70, 192, 19, 117, 188, 172, 19, 117, 188, 197, 181, 16, 40, 0, 209, 4, 74, 25, 35, 48, 112, 19, 112, 80, 224, 42, 74, + 23, 36, 15, 28, 17, 57, 8, 28, 3, 64, 35, 9, 0, 43, 9, 221, 0, 51, 7, 51, 48, 112, 19, 58, 1, 66, 138, 209, 244, 58, + 15, 35, 0, 118, 19, 35, 48, 112, 19, 35, 120, 112, 83, 35, 16, 224, 0, 51, 1, 92, 209, 41, 48, 208, 251, 41, 0, 209, + 0, 59, 1, 72, 7, 34, 2, 24, 193, 28, 4, 224, 1, 84, 163, 50, 1, 120, 11, 49, 1, 43, 0, 209, 249, 84, 131, 188, 16, 188, + 1, 71, 0, 19, 117, 188, 172, 19, 117, 188, 195, 181, 240, 176, 129, 28, 7, 28, 13, 28, 8, 28, 17, 28, 22, 247, 253, + 254, 11, 76, 12, 104, 35, 43, 0, 208, 5, 28, 56, 28, 41, 28, 50, 247, 253, 254, 204, 224, 10, 35, 2, 96, 35, 28, 50, + 28, 56, 28, 41, 247, 253, 254, 18, 104, 35, 34, 1, 64, 19, 96, 35, 176, 1, 188, 240, 188, 1, 71, 0, 19, 117, 183, 96, + 180, 15, 181, 240, 75, 60, 176, 133, 104, 27, 174, 10, 206, 16, 7, 154, 212, 109, 72, 58, 43, 0, 208, 3, 33, 9, 247, + 253, 254, 211, 224, 2, 33, 9, 247, 253, 253, 233, 28, 7, 40, 0, 218, 78, 224, 95, 28, 98, 146, 3, 43, 37, 208, 11, 154, + 1, 112, 19, 152, 1, 240, 5, 253, 104, 153, 1, 28, 2, 28, 56, 156, 3, 247, 255, 255, 182, 224, 65, 120, 99, 43, 115, + 208, 44, 43, 115, 216, 4, 43, 100, 208, 7, 43, 105, 209, 49, 224, 4, 43, 117, 208, 10, 43, 120, 209, 44, 224, 21, 104, + 48, 247, 255, 254, 223, 72, 35, 29, 52, 240, 5, 253, 75, 224, 20, 104, 48, 247, 255, 255, 35, 152, 2, 240, 5, 253, 68, + 153, 2, 28, 2, 29, 52, 28, 56, 247, 255, 255, 146, 28, 38, 224, 21, 104, 48, 247, 255, 255, 83, 72, 24, 29, 52, 240, + 5, 253, 53, 28, 2, 73, 21, 28, 56, 231, 240, 104, 52, 29, 53, 28, 32, 240, 5, 253, 44, 28, 33, 28, 2, 28, 56, 247, 255, + 255, 123, 28, 46, 156, 3, 52, 1, 224, 3, 75, 13, 74, 13, 147, 2, 146, 1, 120, 35, 43, 0, 209, 170, 75, 7, 104, 27, 43, + 0, 208, 3, 28, 56, 247, 253, 254, 21, 224, 2, 28, 56, 247, 253, 253, 89, 176, 5, 188, 240, 188, 8, 176, 4, 71, 24, 19, + 117, 183, 96, 19, 115, 171, 224, 19, 117, 188, 172, 19, 115, 162, 0, 32, 1, 71, 112, 181, 16, 76, 11, 176, 130, 28, + 32, 33, 4, 247, 253, 253, 99, 75, 9, 33, 11, 104, 24, 35, 4, 147, 1, 34, 0, 35, 0, 148, 0, 247, 253, 253, 45, 40, 0, + 219, 0, 104, 32, 176, 2, 188, 16, 188, 2, 71, 8, 19, 117, 184, 32, 19, 115, 162, 32, 181, 0, 176, 129, 247, 255, 255, + 224, 35, 1, 176, 1, 64, 24, 188, 2, 71, 8, 70, 192, 181, 112, 176, 130, 28, 22, 42, 0, 209, 2, 32, 1, 66, 64, 224, 30, + 76, 17, 77, 18, 35, 0, 96, 43, 96, 19, 96, 99, 96, 163, 97, 35, 97, 99, 96, 32, 96, 225, 28, 40, 33, 4, 247, 253, 253, + 45, 28, 32, 33, 24, 247, 253, 253, 41, 75, 10, 33, 2, 104, 24, 35, 4, 147, 1, 28, 34, 35, 24, 149, 0, 247, 253, 252, + 243, 104, 43, 96, 51, 176, 2, 188, 112, 188, 2, 71, 8, 70, 192, 19, 117, 184, 64, 19, 117, 184, 32, 19, 115, 162, 32, + 181, 48, 76, 13, 37, 0, 176, 131, 96, 32, 96, 101, 96, 165, 96, 225, 97, 34, 97, 101, 28, 32, 33, 24, 247, 253, 253, + 4, 75, 7, 33, 1, 104, 24, 28, 34, 35, 24, 149, 0, 149, 1, 247, 253, 252, 207, 176, 3, 188, 48, 188, 2, 71, 8, 70, 192, + 19, 117, 184, 64, 19, 115, 162, 32, 181, 240, 176, 131, 28, 4, 72, 53, 157, 10, 96, 130, 154, 8, 96, 195, 28, 43, 97, + 2, 159, 9, 30, 90, 65, 147, 97, 195, 35, 0, 96, 65, 96, 4, 97, 71, 97, 133, 98, 3, 33, 36, 247, 253, 252, 219, 72, 44, + 33, 16, 247, 253, 252, 215, 45, 0, 208, 5, 155, 8, 28, 40, 28, 25, 67, 121, 247, 253, 252, 207, 74, 37, 105, 211, 43, + 0, 209, 3, 75, 37, 104, 27, 43, 1, 209, 26, 76, 36, 75, 32, 96, 165, 96, 35, 35, 36, 96, 99, 152, 8, 33, 24, 28, 3, + 67, 123, 96, 227, 75, 28, 28, 32, 97, 35, 35, 16, 97, 99, 247, 253, 252, 181, 75, 28, 33, 7, 104, 24, 34, 2, 35, 1, + 148, 0, 247, 253, 252, 117, 224, 9, 75, 23, 33, 7, 104, 24, 75, 19, 147, 0, 35, 16, 147, 1, 35, 36, 247, 253, 252, 118, + 28, 6, 45, 0, 208, 5, 154, 8, 28, 40, 28, 17, 67, 121, 247, 253, 252, 117, 76, 11, 33, 16, 28, 32, 247, 253, 252, 112, + 155, 11, 43, 0, 208, 7, 152, 12, 40, 16, 216, 4, 28, 24, 28, 33, 154, 12, 240, 4, 253, 111, 176, 3, 28, 48, 188, 240, + 188, 2, 71, 8, 19, 117, 183, 192, 19, 117, 184, 0, 19, 117, 183, 100, 19, 117, 183, 160, 19, 115, 162, 32, 181, 0, 75, + 9, 176, 135, 136, 27, 34, 0, 146, 0, 146, 1, 146, 2, 146, 3, 146, 4, 4, 27, 32, 7, 33, 3, 34, 2, 247, 255, 255, 120, + 176, 7, 188, 2, 71, 8, 70, 192, 19, 117, 183, 104, 181, 0, 176, 135, 35, 0, 32, 7, 33, 3, 34, 2, 147, 0, 147, 1, 147, + 2, 147, 3, 147, 4, 247, 255, 255, 101, 176, 7, 188, 2, 71, 8, 181, 112, 176, 134, 28, 5, 28, 14, 28, 20, 42, 0, 208, + 32, 247, 255, 255, 209, 40, 0, 219, 28, 2, 113, 28, 32, 247, 253, 252, 69, 75, 15, 104, 27, 43, 0, 209, 0, 2, 109, 35, + 128, 0, 155, 147, 1, 35, 0, 147, 3, 147, 4, 33, 3, 34, 1, 28, 43, 32, 25, 148, 2, 150, 0, 247, 255, 255, 64, 28, 4, + 67, 228, 247, 255, 255, 202, 15, 224, 224, 0, 32, 0, 176, 6, 188, 112, 188, 2, 71, 8, 70, 192, 19, 117, 183, 100, 181, + 240, 176, 129, 28, 7, 28, 14, 28, 21, 36, 0, 28, 56, 28, 49, 28, 42, 247, 255, 255, 197, 40, 0, 208, 1, 32, 1, 224, + 3, 52, 1, 44, 10, 209, 243, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 112, 176, 134, 28, 4, 28, 14, 28, + 21, 42, 0, 208, 32, 247, 255, 255, 137, 40, 0, 219, 28, 75, 17, 104, 27, 43, 0, 209, 0, 2, 100, 35, 128, 0, 155, 147, + 1, 35, 0, 34, 1, 147, 3, 147, 4, 33, 3, 28, 35, 32, 18, 150, 0, 149, 2, 247, 255, 254, 252, 28, 4, 2, 113, 28, 40, 67, + 228, 247, 253, 251, 196, 247, 255, 255, 130, 15, 224, 224, 0, 32, 0, 176, 6, 188, 112, 188, 2, 71, 8, 70, 192, 19, 117, + 183, 100, 181, 240, 176, 129, 28, 7, 28, 14, 28, 21, 36, 0, 28, 56, 28, 49, 28, 42, 247, 255, 255, 197, 40, 0, 208, + 1, 32, 1, 224, 3, 52, 1, 44, 10, 209, 243, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 0, 75, 9, 176, 129, + 104, 24, 40, 0, 219, 1, 247, 253, 251, 156, 74, 5, 35, 1, 66, 91, 96, 19, 74, 4, 35, 0, 176, 1, 32, 1, 96, 19, 188, + 2, 71, 8, 70, 192, 19, 115, 162, 32, 19, 117, 183, 112, 181, 16, 76, 7, 104, 35, 43, 0, 209, 1, 32, 0, 224, 4, 247, + 255, 255, 223, 35, 0, 96, 35, 32, 1, 188, 16, 188, 2, 71, 8, 70, 192, 19, 117, 183, 108, 181, 240, 176, 133, 144, 1, + 28, 15, 28, 22, 28, 29, 36, 10, 224, 17, 152, 1, 28, 57, 170, 3, 247, 255, 254, 73, 40, 0, 219, 15, 155, 3, 46, 0, 208, + 2, 66, 29, 209, 2, 224, 8, 66, 29, 209, 6, 72, 6, 240, 0, 249, 244, 60, 1, 210, 235, 28, 32, 224, 0, 32, 0, 176, 5, + 188, 240, 188, 2, 71, 8, 70, 192, 0, 0, 39, 16, 181, 240, 75, 199, 176, 141, 104, 27, 43, 1, 209, 0, 225, 106, 72, 197, + 33, 1, 247, 253, 251, 117, 76, 196, 96, 32, 40, 0, 218, 0, 225, 119, 79, 194, 33, 4, 28, 56, 247, 253, 251, 95, 77, + 193, 35, 0, 128, 43, 35, 4, 104, 32, 33, 4, 147, 1, 34, 0, 35, 0, 151, 0, 247, 253, 251, 39, 40, 0, 219, 1, 136, 59, + 128, 43, 247, 255, 253, 227, 37, 1, 66, 40, 209, 0, 225, 92, 3, 193, 213, 0, 224, 222, 76, 178, 104, 32, 247, 253, 251, + 34, 72, 175, 33, 1, 247, 253, 251, 74, 96, 32, 40, 0, 218, 0, 225, 77, 32, 47, 33, 1, 34, 7, 247, 255, 254, 35, 40, + 0, 218, 0, 225, 49, 32, 47, 33, 1, 34, 1, 35, 7, 247, 255, 255, 146, 40, 0, 218, 0, 225, 40, 33, 4, 74, 166, 32, 52, + 247, 255, 254, 18, 33, 4, 74, 164, 32, 56, 247, 255, 254, 13, 75, 163, 32, 41, 96, 29, 33, 1, 34, 14, 247, 255, 254, + 6, 40, 0, 218, 0, 225, 20, 32, 41, 33, 1, 34, 15, 247, 255, 253, 254, 40, 0, 218, 0, 225, 12, 32, 44, 33, 2, 34, 0, + 247, 255, 253, 246, 40, 0, 218, 0, 225, 4, 32, 44, 33, 2, 74, 150, 247, 255, 253, 238, 40, 0, 218, 0, 224, 252, 32, + 44, 33, 2, 34, 0, 35, 2, 247, 255, 255, 93, 40, 0, 218, 0, 224, 243, 32, 44, 33, 2, 74, 142, 247, 255, 253, 221, 40, + 0, 218, 0, 224, 235, 32, 46, 33, 1, 34, 14, 247, 255, 253, 213, 40, 0, 218, 0, 224, 227, 36, 0, 32, 0, 33, 0, 34, 0, + 35, 0, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 230, 40, 0, 218, 0, 224, 212, 35, 16, 147, 4, 35, 213, + 174, 7, 32, 8, 33, 0, 34, 7, 0, 91, 148, 0, 148, 1, 148, 2, 150, 3, 247, 255, 253, 213, 40, 0, 218, 0, 224, 195, 155, + 7, 34, 255, 64, 19, 43, 170, 208, 0, 224, 189, 37, 10, 224, 34, 32, 55, 33, 3, 34, 1, 35, 0, 148, 0, 148, 1, 148, 2, + 148, 3, 148, 4, 247, 255, 253, 191, 40, 0, 218, 0, 224, 173, 35, 16, 147, 4, 32, 41, 33, 0, 34, 4, 75, 107, 148, 0, + 148, 1, 148, 2, 150, 3, 247, 255, 253, 176, 40, 0, 218, 0, 224, 158, 104, 51, 43, 0, 219, 5, 72, 101, 240, 0, 249, 13, + 61, 1, 210, 218, 224, 149, 45, 0, 218, 0, 224, 146, 74, 93, 0, 89, 213, 2, 35, 1, 96, 19, 224, 0, 96, 20, 77, 87, 74, + 94, 136, 43, 146, 3, 34, 16, 36, 0, 146, 4, 4, 27, 32, 2, 33, 0, 34, 3, 148, 0, 148, 1, 148, 2, 247, 255, 253, 138, + 40, 0, 219, 121, 171, 11, 147, 3, 35, 4, 147, 4, 32, 3, 33, 0, 34, 6, 35, 0, 148, 0, 148, 1, 148, 2, 247, 255, 253, + 123, 40, 0, 219, 106, 155, 11, 12, 27, 128, 43, 224, 7, 35, 128, 3, 91, 74, 70, 64, 3, 208, 1, 96, 21, 224, 0, 96, 19, + 36, 0, 32, 40, 33, 1, 170, 11, 148, 11, 247, 255, 253, 20, 40, 0, 219, 105, 154, 11, 35, 253, 64, 26, 35, 2, 67, 26, + 32, 40, 33, 1, 146, 11, 247, 255, 253, 58, 40, 0, 219, 93, 37, 1, 28, 56, 33, 4, 96, 61, 247, 253, 250, 68, 75, 49, + 33, 6, 104, 24, 28, 58, 35, 4, 148, 0, 148, 1, 247, 253, 250, 15, 40, 0, 219, 76, 247, 255, 253, 189, 40, 0, 219, 72, + 35, 128, 32, 16, 33, 3, 34, 1, 0, 155, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 55, 40, 0, 219, 27, 75, + 37, 32, 55, 136, 27, 33, 3, 4, 27, 34, 1, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 40, 40, 0, 219, 12, + 32, 6, 33, 3, 34, 1, 35, 2, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 27, 40, 0, 218, 2, 247, 255, 253, + 165, 224, 27, 247, 255, 253, 162, 75, 28, 96, 29, 75, 15, 96, 29, 32, 1, 224, 22, 33, 1, 34, 7, 32, 47, 247, 255, 252, + 233, 33, 1, 34, 1, 35, 7, 32, 47, 247, 255, 254, 91, 76, 10, 104, 32, 247, 253, 249, 209, 72, 7, 33, 1, 247, 253, 249, + 249, 96, 32, 247, 255, 254, 38, 32, 0, 176, 13, 188, 240, 188, 2, 71, 8, 70, 192, 19, 117, 183, 112, 19, 115, 162, 64, + 19, 115, 162, 32, 19, 117, 184, 32, 19, 117, 183, 104, 1, 63, 0, 195, 19, 117, 183, 100, 0, 0, 1, 1, 0, 0, 1, 7, 64, + 48, 0, 0, 0, 0, 39, 16, 19, 117, 183, 116, 19, 117, 183, 108, 181, 0, 176, 129, 32, 129, 33, 0, 34, 0, 35, 0, 247, 253, + 249, 134, 176, 1, 188, 1, 71, 0, 70, 192, 181, 0, 176, 129, 32, 128, 33, 0, 34, 0, 35, 0, 247, 253, 249, 122, 176, 1, + 188, 1, 71, 0, 70, 192, 181, 48, 28, 13, 28, 4, 28, 19, 176, 129, 28, 42, 28, 33, 32, 16, 247, 253, 249, 108, 176, 1, + 188, 48, 188, 2, 71, 8, 181, 0, 176, 129, 32, 18, 33, 0, 34, 0, 35, 0, 247, 253, 249, 96, 176, 1, 188, 2, 71, 8, 70, + 192, 181, 0, 176, 129, 32, 17, 33, 0, 34, 0, 35, 0, 247, 253, 249, 84, 176, 1, 188, 2, 71, 8, 70, 192, 181, 240, 77, + 18, 176, 131, 28, 4, 73, 17, 34, 0, 104, 40, 247, 253, 249, 119, 75, 16, 28, 33, 104, 24, 247, 253, 249, 98, 78, 12, + 28, 47, 172, 1, 104, 56, 28, 33, 34, 0, 247, 253, 249, 114, 155, 1, 66, 179, 209, 247, 104, 40, 28, 33, 34, 0, 247, + 253, 249, 106, 75, 5, 104, 24, 247, 253, 249, 98, 176, 3, 188, 240, 188, 1, 71, 0, 19, 115, 162, 96, 0, 0, 5, 85, 19, + 115, 162, 100, 181, 16, 76, 12, 104, 35, 43, 0, 218, 16, 32, 64, 247, 255, 250, 68, 33, 16, 247, 253, 249, 89, 75, 8, + 28, 2, 96, 32, 33, 1, 72, 7, 247, 253, 249, 98, 75, 6, 96, 24, 247, 253, 249, 66, 188, 16, 188, 1, 71, 0, 70, 192, 19, + 115, 162, 96, 0, 0, 6, 102, 0, 15, 66, 64, 19, 115, 162, 100, 181, 48, 28, 5, 28, 12, 28, 16, 33, 0, 224, 15, 92, 106, + 92, 99, 66, 154, 210, 2, 32, 1, 66, 64, 224, 11, 66, 154, 217, 1, 32, 1, 224, 7, 42, 0, 208, 4, 43, 0, 208, 2, 49, 1, + 66, 129, 211, 237, 32, 0, 188, 48, 188, 2, 71, 8, 181, 16, 28, 12, 35, 0, 28, 17, 224, 1, 84, 196, 51, 1, 66, 139, 211, + 251, 247, 253, 249, 23, 188, 16, 188, 1, 71, 0, 181, 16, 28, 12, 28, 17, 34, 0, 224, 2, 92, 163, 84, 131, 50, 1, 66, + 138, 211, 250, 247, 253, 249, 8, 188, 16, 188, 1, 71, 0, 70, 192, 181, 0, 28, 10, 176, 129, 33, 0, 224, 1, 84, 67, 49, + 1, 92, 83, 43, 0, 209, 250, 84, 67, 247, 253, 248, 247, 176, 1, 188, 1, 71, 0, 181, 0, 176, 129, 120, 3, 28, 2, 48, + 1, 43, 0, 209, 250, 28, 16, 247, 255, 255, 230, 176, 1, 188, 1, 71, 0, 70, 192, 32, 1, 71, 112, 181, 16, 76, 6, 104, + 32, 40, 0, 219, 4, 247, 253, 248, 189, 35, 1, 66, 91, 96, 35, 32, 1, 188, 16, 188, 2, 71, 8, 19, 115, 162, 104, 181, + 240, 78, 24, 176, 163, 104, 51, 28, 7, 43, 0, 218, 2, 36, 6, 66, 100, 224, 34, 35, 31, 172, 18, 173, 2, 34, 32, 67, + 156, 67, 157, 24, 164, 24, 173, 35, 4, 96, 37, 96, 99, 28, 32, 33, 8, 247, 253, 248, 187, 35, 1, 104, 48, 73, 12, 34, + 0, 148, 0, 247, 253, 248, 124, 33, 4, 28, 4, 28, 40, 247, 253, 248, 175, 104, 45, 75, 7, 96, 29, 44, 0, 208, 2, 47, + 0, 208, 0, 96, 61, 176, 35, 28, 32, 188, 240, 188, 2, 71, 8, 19, 115, 162, 104, 85, 77, 83, 2, 19, 117, 184, 96, 181, + 0, 176, 129, 32, 0, 247, 255, 255, 195, 28, 3, 23, 192, 26, 192, 176, 1, 15, 192, 188, 2, 71, 8, 181, 16, 76, 16, 176, + 130, 104, 35, 43, 0, 218, 21, 72, 14, 33, 0, 247, 253, 248, 146, 96, 32, 40, 0, 219, 12, 35, 0, 73, 11, 34, 0, 147, + 0, 247, 253, 248, 69, 32, 0, 247, 255, 255, 166, 40, 0, 220, 3, 247, 255, 255, 146, 32, 0, 224, 0, 32, 1, 176, 2, 188, + 16, 188, 2, 71, 8, 70, 192, 19, 115, 162, 104, 19, 115, 162, 128, 85, 77, 83, 1, 181, 240, 176, 183, 147, 3, 75, 46, + 77, 46, 104, 27, 28, 6, 147, 5, 104, 43, 70, 140, 146, 4, 43, 0, 219, 76, 33, 31, 171, 38, 32, 32, 67, 139, 24, 28, + 171, 22, 67, 139, 170, 6, 24, 27, 67, 138, 96, 30, 70, 97, 24, 18, 28, 38, 96, 17, 54, 8, 96, 35, 35, 4, 96, 99, 96, + 162, 96, 115, 154, 4, 28, 39, 97, 34, 153, 5, 55, 16, 70, 99, 67, 75, 96, 123, 104, 32, 104, 97, 247, 253, 248, 58, + 104, 160, 104, 113, 247, 253, 248, 54, 105, 32, 104, 121, 247, 253, 248, 50, 28, 32, 33, 24, 247, 253, 248, 46, 154, + 3, 42, 0, 209, 5, 104, 40, 73, 18, 148, 0, 34, 2, 35, 1, 224, 4, 73, 17, 104, 40, 34, 3, 148, 0, 35, 0, 247, 252, 255, + 230, 40, 0, 219, 13, 104, 32, 104, 97, 247, 252, 255, 244, 104, 160, 104, 113, 247, 252, 255, 240, 105, 32, 104, 121, + 247, 252, 255, 236, 32, 1, 224, 0, 32, 0, 176, 55, 188, 240, 188, 2, 71, 8, 70, 192, 19, 117, 184, 96, 19, 115, 162, + 104, 85, 77, 83, 3, 85, 77, 83, 4, 181, 0, 176, 129, 35, 1, 247, 255, 255, 147, 176, 1, 188, 2, 71, 8, 181, 0, 75, 7, + 176, 129, 104, 27, 43, 0, 218, 1, 32, 0, 224, 3, 247, 255, 255, 238, 30, 67, 65, 152, 176, 1, 188, 2, 71, 8, 70, 192, + 19, 115, 162, 104, 181, 0, 176, 129, 35, 0, 247, 255, 255, 121, 176, 1, 188, 2, 71, 8, 181, 0, 75, 7, 176, 129, 104, + 27, 43, 0, 218, 1, 32, 0, 224, 3, 247, 255, 255, 238, 30, 67, 65, 152, 176, 1, 188, 2, 71, 8, 70, 192, 19, 115, 162, + 104, 181, 240, 176, 129, 28, 6, 39, 0, 37, 0, 224, 18, 105, 115, 25, 92, 104, 227, 43, 0, 208, 7, 104, 48, 104, 33, + 104, 98, 105, 35, 240, 1, 250, 125, 40, 0, 208, 9, 105, 115, 34, 0, 25, 91, 96, 218, 55, 1, 53, 20, 104, 179, 66, 159, + 211, 233, 32, 1, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, 133, 144, 2, 28, 14, 146, 1, 147, 3, 224, + 89, 154, 2, 155, 2, 104, 146, 32, 1, 70, 148, 105, 92, 66, 64, 39, 0, 37, 0, 224, 22, 104, 33, 28, 74, 208, 15, 66, + 142, 217, 2, 26, 115, 104, 98, 224, 1, 154, 1, 27, 139, 66, 147, 65, 155, 66, 91, 43, 0, 208, 3, 66, 129, 210, 1, 28, + 39, 224, 0, 28, 1, 53, 1, 52, 20, 28, 8, 69, 101, 211, 230, 47, 0, 208, 44, 104, 60, 66, 180, 217, 15, 155, 2, 27, 164, + 104, 24, 28, 49, 28, 34, 155, 3, 240, 1, 250, 53, 154, 3, 2, 99, 24, 210, 155, 1, 146, 3, 27, 27, 25, 54, 147, 1, 104, + 59, 26, 242, 104, 123, 26, 157, 155, 1, 66, 157, 217, 0, 28, 29, 105, 56, 2, 83, 2, 108, 24, 192, 28, 34, 153, 3, 240, + 4, 248, 65, 154, 3, 155, 1, 25, 18, 146, 3, 27, 91, 34, 1, 147, 1, 25, 118, 96, 250, 224, 7, 155, 2, 28, 49, 104, 24, + 154, 1, 155, 3, 240, 1, 250, 12, 224, 2, 154, 1, 42, 0, 209, 162, 176, 5, 32, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, + 240, 176, 137, 145, 4, 105, 66, 28, 6, 146, 5, 104, 131, 104, 194, 39, 0, 32, 1, 70, 156, 146, 6, 153, 5, 37, 0, 151, + 7, 66, 64, 224, 28, 104, 11, 154, 4, 28, 12, 147, 1, 66, 154, 211, 8, 154, 1, 104, 75, 24, 211, 154, 4, 66, 154, 210, + 2, 155, 1, 51, 1, 209, 70, 47, 0, 209, 9, 154, 1, 50, 1, 209, 1, 39, 1, 224, 2, 104, 139, 66, 131, 210, 1, 104, 136, + 149, 7, 53, 1, 49, 20, 69, 101, 211, 224, 47, 0, 209, 17, 154, 7, 0, 147, 24, 155, 154, 5, 0, 155, 24, 212, 104, 227, + 43, 1, 209, 8, 104, 48, 104, 33, 104, 98, 105, 35, 240, 1, 249, 193, 40, 0, 208, 41, 96, 231, 155, 4, 105, 52, 153, + 6, 27, 24, 240, 3, 250, 226, 154, 6, 28, 19, 67, 67, 25, 29, 104, 115, 24, 169, 66, 153, 217, 0, 28, 25, 154, 7, 27, + 79, 0, 147, 24, 155, 154, 5, 0, 155, 24, 212, 35, 1, 66, 91, 96, 35, 104, 48, 105, 35, 28, 41, 28, 58, 240, 1, 249, + 181, 40, 0, 208, 7, 96, 37, 96, 103, 74, 6, 104, 19, 51, 1, 96, 19, 96, 163, 224, 0, 36, 0, 176, 9, 28, 32, 188, 240, + 188, 2, 71, 8, 70, 192, 19, 117, 184, 100, 181, 240, 176, 131, 145, 1, 153, 8, 38, 128, 147, 0, 0, 182, 24, 203, 28, + 23, 66, 179, 216, 26, 28, 17, 247, 255, 255, 124, 28, 5, 40, 0, 208, 20, 104, 4, 105, 0, 27, 60, 2, 100, 25, 0, 33, + 0, 28, 50, 240, 4, 248, 50, 154, 0, 105, 40, 24, 164, 25, 0, 153, 1, 154, 8, 240, 3, 255, 142, 35, 1, 96, 235, 32, 1, + 224, 0, 32, 0, 176, 3, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, 129, 28, 30, 155, 6, 28, 21, 25, 154, 35, 128, + 0, 155, 28, 15, 66, 154, 216, 19, 28, 41, 247, 255, 255, 80, 28, 4, 40, 0, 208, 13, 104, 3, 105, 0, 26, 235, 2, 91, + 25, 155, 24, 192, 28, 57, 154, 6, 240, 3, 255, 105, 35, 1, 96, 227, 32, 1, 224, 0, 32, 0, 176, 1, 188, 240, 188, 2, + 71, 8, 181, 112, 176, 132, 28, 4, 152, 8, 28, 30, 35, 0, 28, 21, 147, 3, 170, 3, 40, 2, 208, 7, 40, 4, 208, 9, 40, 1, + 208, 1, 32, 0, 224, 19, 112, 17, 224, 10, 10, 11, 112, 17, 112, 83, 224, 6, 10, 11, 112, 83, 12, 11, 112, 147, 14, 11, + 112, 17, 112, 211, 144, 0, 169, 3, 28, 32, 28, 42, 28, 51, 247, 255, 255, 183, 176, 4, 188, 112, 188, 2, 71, 8, 70, + 192, 181, 240, 176, 129, 159, 6, 28, 20, 28, 29, 24, 250, 35, 128, 0, 155, 28, 14, 66, 154, 216, 16, 28, 33, 247, 255, + 255, 2, 40, 0, 208, 11, 104, 3, 105, 1, 26, 227, 2, 91, 25, 91, 24, 201, 28, 48, 28, 58, 240, 3, 255, 28, 32, 1, 224, + 0, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 112, 176, 132, 157, 8, 172, 3, 28, 14, 28, 33, 149, 0, 247, + 255, 255, 213, 40, 0, 208, 26, 45, 2, 208, 5, 45, 4, 208, 10, 45, 1, 209, 20, 120, 35, 224, 3, 120, 99, 120, 34, 2, + 27, 67, 19, 96, 51, 32, 1, 224, 12, 120, 98, 120, 163, 2, 18, 4, 27, 67, 26, 120, 35, 67, 26, 120, 227, 6, 27, 67, 26, + 96, 50, 231, 241, 32, 0, 176, 4, 188, 112, 188, 2, 71, 8, 70, 192, 181, 240, 176, 131, 144, 0, 28, 15, 28, 22, 147, + 1, 224, 25, 152, 0, 28, 57, 247, 255, 254, 183, 40, 0, 208, 22, 104, 3, 26, 250, 104, 67, 26, 157, 66, 181, 217, 0, + 28, 53, 105, 1, 2, 83, 2, 108, 24, 201, 152, 1, 28, 34, 240, 3, 254, 204, 155, 1, 25, 127, 25, 27, 147, 1, 27, 118, + 46, 0, 209, 227, 32, 1, 176, 3, 188, 240, 188, 2, 71, 8, 181, 112, 28, 6, 37, 0, 247, 255, 254, 9, 36, 0, 224, 5, 25, + 3, 105, 24, 247, 254, 254, 175, 53, 1, 52, 20, 104, 179, 105, 112, 66, 157, 211, 245, 247, 254, 254, 167, 28, 48, 247, + 254, 254, 164, 188, 112, 188, 1, 71, 0, 70, 192, 181, 240, 176, 133, 144, 0, 28, 14, 28, 20, 28, 31, 41, 1, 216, 0, + 38, 2, 44, 7, 216, 0, 36, 8, 32, 24, 247, 254, 254, 157, 28, 5, 40, 0, 208, 46, 96, 7, 155, 10, 96, 134, 96, 67, 96, + 196, 152, 0, 28, 49, 240, 3, 249, 207, 0, 176, 25, 128, 97, 41, 0, 128, 247, 254, 254, 139, 144, 3, 40, 0, 209, 4, 28, + 40, 247, 254, 254, 121, 37, 0, 224, 23, 2, 100, 148, 1, 35, 0, 39, 1, 156, 3, 147, 2, 66, 127, 35, 0, 96, 99, 96, 163, + 96, 227, 96, 39, 152, 1, 247, 254, 254, 116, 97, 32, 155, 2, 52, 20, 51, 1, 147, 2, 66, 179, 211, 240, 155, 3, 97, 107, + 176, 5, 28, 40, 188, 240, 188, 2, 71, 8, 181, 48, 28, 12, 33, 0, 112, 33, 120, 3, 28, 2, 43, 229, 208, 42, 43, 46, 208, + 1, 32, 0, 224, 12, 112, 35, 120, 64, 40, 46, 209, 2, 112, 96, 112, 161, 224, 31, 112, 97, 224, 29, 84, 35, 48, 1, 40, + 8, 208, 2, 92, 19, 43, 32, 209, 248, 122, 19, 28, 21, 53, 8, 43, 32, 208, 15, 28, 1, 24, 34, 35, 46, 112, 19, 48, 1, + 49, 4, 224, 5, 48, 1, 112, 83, 53, 1, 50, 1, 66, 136, 208, 2, 120, 43, 43, 32, 209, 246, 35, 0, 84, 35, 120, 32, 30, + 67, 65, 152, 188, 48, 188, 2, 71, 8, 70, 192, 181, 16, 122, 3, 126, 140, 126, 200, 43, 3, 209, 9, 125, 75, 125, 10, + 2, 27, 67, 19, 4, 27, 2, 2, 67, 34, 28, 24, 67, 16, 224, 2, 2, 3, 28, 24, 67, 32, 188, 16, 188, 2, 71, 8, 181, 112, + 104, 3, 28, 13, 104, 27, 28, 22, 96, 19, 247, 255, 255, 226, 96, 112, 122, 235, 6, 217, 212, 1, 74, 38, 224, 0, 74, + 38, 7, 217, 212, 1, 35, 146, 224, 0, 35, 0, 67, 19, 96, 179, 35, 1, 129, 179, 129, 243, 35, 2, 130, 51, 104, 51, 32, + 0, 97, 115, 127, 106, 127, 171, 2, 18, 4, 27, 67, 26, 127, 43, 36, 0, 67, 26, 127, 235, 6, 27, 67, 26, 97, 178, 124, + 233, 124, 171, 2, 9, 67, 25, 240, 2, 252, 176, 98, 52, 97, 240, 125, 232, 125, 171, 126, 105, 2, 0, 67, 24, 126, 43, + 2, 9, 67, 25, 240, 2, 252, 164, 98, 180, 98, 112, 123, 232, 123, 171, 124, 105, 2, 0, 67, 24, 124, 43, 2, 9, 67, 25, + 240, 2, 252, 152, 35, 128, 0, 155, 99, 115, 105, 178, 75, 8, 98, 240, 24, 210, 23, 211, 13, 219, 24, 155, 18, 91, 99, + 52, 99, 179, 99, 244, 100, 52, 188, 112, 188, 1, 71, 0, 0, 0, 129, 36, 0, 0, 65, 36, 0, 0, 1, 255, 181, 240, 35, 0, + 98, 11, 98, 75, 98, 139, 28, 10, 28, 11, 28, 12, 50, 44, 51, 32, 28, 7, 203, 35, 194, 35, 28, 37, 53, 56, 34, 128, 176, + 129, 38, 46, 28, 40, 0, 82, 33, 0, 240, 3, 254, 53, 112, 46, 28, 32, 33, 0, 34, 32, 240, 3, 254, 47, 28, 32, 33, 32, + 34, 11, 240, 3, 254, 42, 35, 16, 112, 38, 114, 227, 105, 251, 176, 1, 118, 163, 10, 27, 118, 227, 139, 187, 32, 1, 117, + 35, 10, 27, 117, 99, 188, 240, 188, 2, 71, 8, 181, 240, 176, 139, 144, 3, 145, 2, 146, 1, 42, 0, 209, 1, 32, 0, 224, + 61, 34, 0, 171, 6, 169, 4, 96, 90, 96, 74, 146, 6, 146, 4, 74, 29, 38, 0, 37, 0, 146, 0, 155, 3, 154, 2, 25, 155, 147, + 3, 155, 0, 25, 82, 146, 2, 153, 3, 104, 26, 168, 9, 171, 6, 240, 3, 249, 85, 155, 0, 28, 6, 104, 26, 168, 8, 153, 2, + 171, 4, 240, 3, 249, 77, 28, 5, 46, 0, 219, 18, 40, 0, 219, 16, 154, 1, 27, 146, 146, 1, 42, 0, 208, 11, 159, 9, 28, + 56, 240, 4, 253, 79, 28, 4, 152, 8, 240, 4, 253, 75, 66, 132, 209, 1, 47, 0, 209, 212, 152, 9, 240, 4, 253, 68, 28, + 4, 152, 8, 240, 4, 253, 64, 26, 32, 176, 11, 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 162, 160, 181, 240, 28, 14, + 104, 179, 104, 12, 51, 1, 176, 129, 28, 5, 28, 23, 104, 73, 43, 16, 209, 34, 106, 195, 49, 1, 66, 153, 209, 21, 44, + 0, 208, 21, 28, 33, 240, 2, 249, 240, 75, 17, 66, 152, 209, 10, 47, 0, 208, 25, 28, 40, 28, 33, 240, 2, 251, 173, 40, + 1, 217, 19, 107, 235, 66, 152, 216, 16, 28, 4, 33, 0, 224, 7, 44, 0, 209, 5, 106, 107, 105, 170, 26, 155, 66, 153, 208, + 6, 36, 0, 35, 0, 96, 52, 96, 113, 96, 179, 32, 1, 224, 0, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 15, 255, 255, 255, + 181, 240, 176, 147, 171, 15, 28, 10, 28, 5, 50, 32, 28, 24, 202, 208, 192, 208, 107, 74, 39, 27, 146, 3, 107, 12, 32, + 1, 148, 4, 106, 201, 36, 0, 145, 5, 28, 30, 66, 127, 224, 61, 104, 50, 104, 104, 42, 1, 217, 5, 106, 235, 58, 2, 67, + 90, 106, 107, 24, 211, 224, 0, 105, 171, 104, 114, 33, 32, 24, 154, 104, 179, 145, 0, 1, 91, 169, 7, 247, 255, 253, + 151, 70, 106, 119, 23, 104, 50, 104, 104, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 211, 224, 0, 105, 171, + 104, 114, 169, 7, 24, 154, 104, 179, 36, 32, 1, 91, 148, 0, 247, 255, 253, 51, 104, 51, 153, 5, 66, 139, 209, 9, 104, + 115, 154, 4, 66, 147, 209, 5, 156, 3, 104, 179, 27, 27, 66, 92, 65, 92, 224, 0, 36, 0, 28, 40, 28, 49, 34, 0, 247, 255, + 255, 115, 40, 0, 208, 1, 44, 0, 208, 189, 176, 19, 30, 67, 65, 152, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, + 135, 175, 0, 96, 250, 28, 58, 35, 0, 50, 16, 96, 83, 97, 59, 75, 28, 28, 14, 104, 27, 70, 105, 51, 14, 8, 219, 0, 219, + 26, 201, 70, 141, 104, 249, 70, 107, 57, 1, 28, 5, 96, 187, 36, 0, 96, 121, 224, 25, 28, 58, 104, 184, 50, 16, 240, + 5, 250, 1, 40, 0, 218, 2, 36, 1, 66, 100, 224, 23, 104, 251, 25, 1, 66, 153, 210, 17, 40, 0, 221, 15, 34, 0, 104, 188, + 92, 163, 50, 1, 112, 43, 53, 1, 66, 130, 219, 248, 54, 2, 28, 12, 104, 121, 66, 140, 210, 2, 136, 49, 41, 0, 209, 223, + 35, 0, 112, 43, 70, 189, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 19, 115, 162, 160, 181, 240, 76, 72, 28, 11, 68, 165, + 172, 145, 51, 32, 28, 34, 28, 14, 28, 7, 203, 35, 194, 35, 106, 242, 107, 112, 107, 49, 51, 12, 146, 7, 34, 128, 144, + 5, 145, 6, 28, 24, 33, 0, 0, 82, 147, 4, 240, 3, 252, 215, 73, 61, 32, 1, 37, 0, 145, 3, 224, 72, 104, 34, 104, 120, + 42, 1, 217, 5, 106, 251, 58, 2, 67, 90, 106, 123, 24, 211, 224, 0, 105, 187, 104, 98, 33, 32, 24, 154, 104, 163, 145, + 0, 1, 91, 169, 137, 247, 255, 252, 236, 104, 35, 154, 7, 66, 147, 209, 14, 104, 99, 157, 6, 66, 171, 209, 10, 104, 163, + 152, 5, 66, 131, 209, 6, 28, 48, 169, 137, 34, 32, 240, 3, 252, 17, 37, 1, 224, 28, 169, 137, 120, 11, 34, 64, 67, 147, + 0, 90, 24, 210, 0, 146, 24, 210, 58, 13, 42, 247, 221, 0, 34, 241, 0, 82, 171, 9, 72, 33, 24, 153, 200, 4, 173, 137, + 24, 171, 120, 91, 92, 170, 2, 27, 67, 19, 128, 11, 154, 3, 49, 2, 66, 144, 209, 243, 37, 0, 28, 56, 28, 33, 34, 0, 247, + 255, 254, 189, 40, 0, 208, 2, 45, 0, 208, 178, 224, 1, 32, 0, 224, 29, 104, 35, 157, 7, 66, 171, 209, 12, 104, 99, 152, + 6, 66, 131, 209, 8, 104, 163, 153, 5, 66, 139, 209, 4, 28, 48, 153, 4, 247, 255, 253, 118, 224, 6, 34, 128, 152, 4, + 169, 9, 0, 82, 247, 255, 255, 55, 48, 1, 66, 67, 65, 67, 34, 1, 64, 83, 6, 27, 14, 24, 35, 149, 0, 155, 68, 157, 188, + 240, 188, 2, 71, 8, 255, 255, 253, 172, 19, 115, 172, 100, 19, 115, 172, 48, 181, 240, 76, 116, 28, 10, 68, 165, 144, + 5, 171, 149, 50, 44, 202, 81, 195, 81, 156, 149, 28, 13, 44, 0, 208, 1, 148, 9, 224, 2, 152, 5, 105, 192, 144, 9, 153, + 9, 170, 146, 145, 149, 171, 149, 28, 17, 203, 81, 193, 81, 28, 41, 72, 104, 35, 0, 49, 56, 145, 6, 147, 7, 147, 8, 39, + 0, 28, 20, 174, 138, 144, 4, 224, 153, 28, 33, 34, 0, 152, 5, 247, 255, 254, 98, 154, 5, 66, 65, 65, 65, 145, 7, 104, + 80, 104, 34, 42, 1, 217, 6, 153, 5, 58, 2, 106, 203, 67, 90, 106, 75, 24, 211, 224, 1, 154, 5, 105, 147, 104, 98, 33, + 32, 24, 154, 104, 163, 145, 0, 1, 91, 28, 49, 247, 255, 252, 66, 122, 243, 43, 15, 209, 69, 120, 51, 70, 156, 6, 27, + 43, 0, 218, 1, 39, 0, 224, 26, 70, 96, 33, 64, 66, 8, 208, 22, 171, 149, 28, 39, 207, 7, 195, 7, 35, 64, 70, 98, 67, + 154, 0, 83, 24, 155, 0, 155, 24, 153, 104, 39, 41, 255, 221, 0, 33, 255, 0, 73, 34, 0, 171, 10, 82, 202, 123, 112, 151, + 9, 144, 8, 39, 1, 123, 115, 153, 8, 66, 139, 208, 1, 39, 0, 224, 79, 47, 0, 208, 77, 35, 64, 70, 98, 67, 154, 0, 83, + 24, 155, 0, 155, 24, 155, 28, 26, 58, 13, 72, 57, 42, 247, 221, 0, 34, 247, 0, 82, 171, 10, 24, 153, 200, 4, 24, 179, + 120, 91, 92, 178, 2, 27, 67, 19, 128, 11, 154, 4, 49, 2, 66, 144, 209, 244, 224, 49, 7, 24, 212, 47, 120, 51, 43, 0, + 208, 71, 43, 229, 208, 42, 43, 32, 217, 40, 47, 0, 208, 27, 76, 43, 28, 49, 35, 0, 38, 1, 68, 108, 66, 51, 209, 1, 32, + 0, 224, 0, 32, 128, 120, 10, 8, 91, 24, 155, 6, 27, 14, 27, 24, 27, 6, 27, 49, 1, 14, 27, 66, 161, 209, 239, 153, 8, + 66, 139, 208, 48, 28, 42, 50, 56, 35, 0, 112, 19, 171, 149, 170, 146, 202, 81, 195, 81, 156, 146, 168, 138, 153, 6, + 247, 255, 252, 159, 148, 9, 224, 3, 153, 7, 41, 0, 209, 0, 231, 97, 154, 7, 42, 0, 209, 19, 156, 9, 28, 42, 148, 149, + 171, 149, 50, 32, 203, 67, 194, 67, 171, 146, 203, 81, 194, 81, 171, 138, 28, 42, 203, 82, 194, 82, 203, 19, 194, 19, + 203, 65, 194, 65, 32, 1, 224, 0, 32, 0, 35, 153, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 34, 128, 152, 6, 169, 10, + 0, 82, 247, 255, 254, 61, 48, 1, 209, 217, 231, 239, 255, 255, 253, 156, 19, 115, 172, 100, 19, 115, 172, 48, 0, 0, + 2, 51, 181, 112, 35, 0, 98, 75, 35, 1, 66, 91, 98, 10, 98, 139, 28, 10, 28, 11, 50, 44, 51, 32, 203, 112, 194, 112, + 247, 255, 254, 255, 188, 112, 188, 2, 71, 8, 181, 240, 176, 213, 144, 1, 28, 15, 28, 8, 33, 128, 0, 73, 28, 22, 240, + 4, 250, 98, 28, 5, 40, 255, 216, 45, 28, 50, 172, 2, 78, 25, 152, 1, 28, 33, 247, 255, 255, 218, 68, 110, 224, 34, 33, + 128, 168, 16, 0, 73, 240, 4, 250, 81, 66, 133, 209, 6, 28, 56, 169, 16, 28, 42, 247, 255, 253, 24, 40, 0, 208, 24, 28, + 49, 28, 32, 247, 255, 252, 48, 28, 48, 33, 13, 240, 4, 250, 64, 66, 133, 209, 6, 28, 56, 28, 49, 28, 42, 247, 255, 253, + 7, 40, 0, 208, 7, 152, 1, 28, 33, 247, 255, 254, 195, 40, 0, 209, 218, 32, 0, 224, 0, 32, 1, 176, 85, 188, 240, 188, + 2, 71, 8, 0, 0, 1, 67, 181, 240, 76, 196, 68, 165, 145, 6, 49, 56, 144, 7, 145, 8, 28, 8, 33, 128, 0, 73, 146, 5, 240, + 4, 250, 27, 40, 0, 209, 0, 227, 55, 152, 8, 33, 128, 0, 73, 144, 165, 240, 4, 250, 18, 28, 4, 40, 255, 217, 0, 227, + 45, 73, 184, 152, 8, 240, 4, 250, 32, 40, 0, 208, 0, 227, 38, 34, 0, 224, 10, 153, 6, 24, 139, 51, 56, 120, 27, 59, + 32, 6, 27, 14, 27, 43, 207, 217, 0, 227, 26, 50, 1, 66, 162, 211, 242, 34, 128, 32, 0, 169, 165, 0, 82, 35, 0, 240, + 2, 254, 175, 144, 12, 40, 255, 217, 0, 227, 12, 152, 8, 240, 4, 248, 232, 155, 6, 30, 65, 48, 55, 24, 26, 32, 0, 224, + 2, 112, 16, 57, 1, 58, 1, 41, 0, 220, 4, 152, 8, 240, 4, 248, 218, 36, 0, 224, 4, 120, 19, 43, 32, 208, 242, 231, 246, + 52, 1, 66, 132, 218, 5, 157, 6, 25, 43, 51, 56, 120, 27, 43, 32, 208, 246, 44, 0, 221, 10, 158, 6, 52, 56, 25, 52, 28, + 32, 240, 4, 248, 195, 28, 33, 28, 2, 152, 8, 240, 3, 250, 80, 152, 8, 240, 4, 248, 187, 36, 128, 153, 6, 0, 100, 26, + 34, 48, 56, 24, 8, 33, 0, 240, 3, 250, 156, 152, 7, 153, 8, 154, 5, 247, 255, 255, 67, 28, 5, 40, 0, 208, 0, 226, 202, + 33, 32, 34, 11, 152, 6, 240, 3, 250, 142, 73, 133, 152, 8, 28, 34, 240, 4, 249, 25, 40, 0, 209, 7, 154, 6, 35, 46, 112, + 19, 36, 0, 35, 1, 147, 9, 148, 10, 225, 118, 73, 127, 152, 8, 28, 34, 240, 4, 249, 10, 40, 0, 209, 7, 157, 6, 35, 46, + 38, 1, 112, 43, 112, 107, 150, 9, 144, 10, 225, 103, 149, 159, 149, 160, 39, 0, 37, 0, 224, 1, 53, 1, 39, 1, 153, 8, + 93, 75, 43, 46, 208, 249, 35, 128, 34, 0, 0, 91, 146, 11, 147, 3, 224, 48, 156, 3, 168, 165, 27, 98, 171, 159, 240, + 2, 253, 181, 28, 6, 40, 0, 218, 0, 226, 140, 152, 165, 240, 4, 252, 44, 240, 4, 255, 78, 28, 4, 152, 165, 240, 4, 255, + 74, 66, 160, 208, 0, 39, 1, 44, 32, 209, 2, 25, 173, 39, 1, 224, 18, 28, 96, 209, 1, 36, 95, 39, 1, 72, 96, 28, 33, + 240, 3, 255, 158, 40, 0, 208, 1, 36, 95, 39, 1, 75, 93, 153, 11, 68, 107, 84, 92, 49, 1, 145, 11, 25, 173, 154, 11, + 42, 7, 220, 6, 155, 8, 25, 89, 120, 11, 43, 46, 208, 1, 43, 0, 209, 199, 156, 6, 25, 99, 51, 56, 120, 27, 43, 46, 208, + 2, 43, 0, 208, 0, 39, 1, 152, 8, 33, 46, 240, 4, 249, 108, 28, 4, 40, 0, 208, 82, 152, 8, 33, 46, 240, 3, 255, 117, + 66, 132, 208, 0, 226, 78, 226, 78, 75, 73, 152, 11, 34, 46, 68, 107, 84, 26, 35, 0, 48, 1, 170, 159, 144, 11, 147, 159, + 96, 83, 147, 13, 35, 128, 0, 91, 27, 91, 147, 4, 224, 50, 168, 165, 28, 49, 154, 4, 171, 159, 240, 2, 253, 84, 28, 5, + 40, 0, 218, 0, 226, 43, 152, 165, 240, 4, 251, 203, 240, 4, 254, 237, 28, 4, 152, 165, 240, 4, 254, 233, 66, 160, 208, + 0, 39, 1, 44, 32, 209, 2, 25, 118, 39, 1, 224, 18, 28, 97, 209, 1, 36, 95, 39, 1, 72, 48, 28, 33, 240, 3, 255, 61, 40, + 0, 208, 1, 36, 95, 39, 1, 75, 45, 154, 11, 68, 107, 84, 156, 50, 1, 146, 11, 25, 118, 155, 13, 51, 1, 147, 13, 43, 3, + 208, 2, 120, 51, 43, 0, 209, 201, 120, 51, 43, 0, 208, 0, 39, 1, 76, 35, 157, 11, 68, 108, 35, 0, 85, 99, 47, 0, 208, + 102, 45, 0, 208, 100, 152, 12, 33, 13, 48, 12, 240, 2, 252, 102, 48, 1, 144, 9, 153, 8, 28, 32, 34, 13, 240, 3, 255, + 245, 40, 0, 209, 6, 152, 7, 28, 33, 154, 5, 247, 255, 254, 84, 40, 0, 208, 81, 72, 20, 37, 7, 68, 104, 224, 0, 61, 1, + 93, 67, 43, 46, 208, 2, 45, 0, 220, 249, 224, 16, 45, 0, 221, 14, 25, 68, 240, 3, 255, 172, 27, 66, 72, 13, 28, 33, + 68, 104, 240, 3, 249, 56, 34, 8, 27, 82, 28, 32, 33, 95, 240, 3, 249, 138, 37, 1, 38, 1, 79, 7, 224, 44, 255, 255, 253, + 100, 19, 115, 172, 118, 19, 115, 172, 45, 19, 115, 172, 44, 19, 115, 172, 100, 0, 0, 2, 99, 0, 0, 2, 107, 0, 15, 66, + 64, 28, 40, 33, 10, 240, 2, 252, 108, 49, 48, 112, 33, 28, 40, 33, 10, 240, 2, 252, 28, 60, 1, 28, 5, 40, 0, 209, 241, + 32, 126, 73, 189, 112, 32, 152, 7, 68, 105, 154, 5, 247, 255, 254, 12, 40, 0, 208, 9, 54, 1, 28, 53, 66, 190, 209, 0, + 225, 144, 76, 183, 68, 108, 231, 223, 33, 1, 145, 9, 73, 179, 34, 0, 68, 105, 224, 4, 156, 6, 84, 163, 50, 1, 42, 8, + 208, 4, 92, 139, 43, 46, 208, 1, 43, 0, 209, 245, 157, 6, 28, 17, 24, 171, 32, 32, 224, 2, 112, 24, 49, 1, 51, 1, 41, + 7, 221, 250, 72, 167, 68, 104, 92, 131, 43, 46, 208, 3, 158, 6, 34, 32, 24, 115, 224, 17, 28, 83, 24, 195, 152, 6, 24, + 66, 224, 2, 112, 16, 49, 1, 50, 1, 120, 24, 51, 1, 40, 0, 208, 239, 41, 10, 221, 246, 231, 236, 112, 26, 49, 1, 51, + 1, 41, 10, 221, 250, 33, 0, 145, 10, 36, 1, 154, 10, 66, 34, 209, 1, 32, 0, 224, 0, 32, 128, 158, 6, 157, 10, 92, 114, + 8, 107, 24, 155, 6, 27, 14, 27, 24, 27, 6, 27, 14, 27, 49, 1, 147, 10, 41, 11, 209, 235, 171, 156, 34, 0, 96, 154, 96, + 90, 152, 5, 170, 159, 144, 156, 28, 24, 200, 112, 194, 112, 70, 111, 32, 1, 157, 9, 144, 14, 36, 0, 28, 30, 55, 66, + 224, 52, 153, 7, 104, 50, 104, 72, 42, 1, 217, 5, 106, 203, 58, 2, 67, 90, 106, 75, 24, 211, 224, 1, 154, 7, 105, 147, + 104, 114, 36, 32, 24, 154, 104, 179, 28, 57, 1, 91, 148, 0, 247, 255, 249, 14, 120, 59, 43, 0, 209, 6, 171, 159, 28, + 49, 201, 21, 195, 21, 61, 1, 36, 1, 224, 20, 43, 229, 208, 1, 157, 9, 224, 7, 152, 9, 66, 133, 209, 3, 171, 159, 28, + 49, 201, 21, 195, 21, 61, 1, 36, 0, 45, 0, 208, 5, 152, 7, 28, 49, 34, 1, 247, 255, 250, 246, 144, 14, 153, 14, 41, + 0, 208, 5, 44, 0, 209, 3, 45, 0, 209, 195, 28, 44, 224, 3, 154, 14, 42, 0, 209, 0, 224, 235, 154, 6, 171, 159, 50, 32, + 203, 67, 194, 67, 44, 0, 208, 57, 70, 108, 52, 66, 28, 32, 33, 0, 34, 32, 240, 3, 248, 166, 158, 6, 28, 111, 54, 44, + 173, 156, 224, 34, 28, 51, 28, 42, 202, 19, 195, 19, 34, 1, 152, 7, 28, 41, 247, 255, 250, 204, 154, 7, 144, 14, 104, + 80, 104, 42, 42, 1, 217, 6, 156, 7, 58, 2, 106, 227, 67, 90, 106, 99, 24, 211, 224, 1, 153, 7, 105, 139, 104, 106, 70, + 105, 24, 154, 104, 171, 36, 32, 1, 91, 49, 66, 63, 1, 148, 0, 247, 255, 248, 94, 47, 0, 208, 3, 152, 14, 40, 0, 209, + 215, 224, 175, 153, 14, 41, 0, 208, 0, 224, 185, 224, 170, 154, 6, 171, 156, 50, 44, 203, 112, 194, 112, 224, 178, 104, + 58, 168, 165, 28, 41, 171, 156, 240, 2, 251, 195, 40, 0, 221, 5, 155, 165, 24, 45, 128, 35, 54, 1, 52, 2, 224, 2, 40, + 0, 208, 4, 224, 5, 46, 254, 216, 1, 45, 0, 209, 234, 35, 0, 128, 35, 158, 9, 39, 1, 0, 115, 25, 155, 0, 155, 25, 155, + 59, 27, 147, 15, 32, 1, 66, 127, 224, 123, 46, 1, 208, 80, 152, 9, 66, 134, 208, 1, 34, 0, 224, 0, 34, 64, 73, 45, 30, + 115, 67, 19, 68, 105, 112, 11, 155, 15, 72, 43, 0, 90, 70, 107, 51, 66, 24, 157, 36, 0, 136, 106, 42, 0, 209, 14, 44, + 1, 221, 7, 136, 43, 43, 0, 209, 4, 104, 3, 84, 207, 24, 91, 112, 95, 224, 9, 104, 3, 34, 0, 84, 202, 24, 91, 224, 3, + 104, 3, 84, 202, 24, 91, 10, 18, 112, 90, 52, 1, 48, 4, 53, 2, 44, 13, 209, 227, 36, 43, 75, 24, 68, 108, 120, 36, 68, + 107, 37, 0, 34, 15, 114, 218, 115, 92, 115, 29, 118, 157, 118, 221, 153, 7, 154, 162, 104, 72, 42, 1, 217, 5, 106, 203, + 58, 2, 67, 90, 106, 75, 24, 209, 224, 1, 154, 7, 105, 145, 171, 162, 104, 90, 104, 155, 24, 138, 33, 32, 145, 0, 73, + 9, 1, 91, 68, 105, 224, 29, 155, 7, 154, 162, 104, 88, 42, 1, 217, 14, 106, 219, 58, 2, 67, 90, 156, 7, 106, 99, 24, + 209, 224, 9, 0, 0, 2, 99, 0, 0, 2, 106, 0, 0, 2, 67, 19, 115, 172, 48, 157, 7, 105, 169, 171, 162, 104, 90, 104, 155, + 24, 138, 33, 32, 145, 0, 153, 6, 1, 91, 247, 254, 255, 184, 169, 162, 152, 7, 34, 0, 247, 255, 250, 7, 153, 15, 62, + 1, 57, 13, 145, 15, 40, 0, 208, 2, 46, 0, 221, 0, 231, 126, 32, 1, 224, 0, 32, 0, 35, 167, 0, 155, 68, 157, 188, 240, + 188, 2, 71, 8, 39, 1, 120, 99, 28, 102, 43, 0, 209, 0, 229, 246, 229, 170, 154, 6, 171, 162, 50, 32, 202, 112, 195, + 112, 70, 108, 52, 66, 34, 128, 0, 146, 28, 32, 33, 0, 240, 2, 255, 173, 35, 0, 170, 156, 96, 83, 147, 156, 157, 8, 38, + 0, 79, 1, 231, 72, 70, 192, 19, 115, 162, 160, 181, 240, 176, 139, 28, 7, 28, 14, 28, 20, 147, 1, 43, 0, 209, 4, 28, + 16, 33, 0, 240, 3, 252, 248, 144, 1, 120, 35, 43, 47, 209, 16, 105, 250, 28, 37, 146, 4, 224, 0, 53, 1, 120, 43, 43, + 47, 208, 251, 155, 1, 66, 157, 211, 8, 28, 56, 28, 49, 247, 255, 249, 55, 36, 1, 224, 3, 108, 122, 28, 37, 146, 4, 36, + 0, 105, 251, 154, 4, 66, 154, 209, 10, 72, 78, 28, 41, 240, 3, 253, 57, 40, 0, 209, 4, 28, 56, 28, 49, 247, 255, 249, + 35, 36, 1, 28, 51, 51, 56, 147, 2, 224, 114, 28, 40, 33, 47, 240, 3, 252, 200, 144, 0, 40, 0, 208, 2, 27, 66, 146, 3, + 224, 3, 28, 40, 240, 3, 253, 115, 144, 3, 35, 128, 154, 3, 0, 91, 66, 154, 216, 114, 28, 56, 28, 49, 154, 4, 247, 255, + 251, 236, 36, 0, 144, 5, 224, 53, 33, 128, 152, 2, 0, 73, 240, 3, 254, 98, 155, 3, 66, 131, 209, 8, 28, 40, 153, 2, + 28, 26, 247, 255, 249, 40, 40, 0, 209, 1, 36, 1, 224, 0, 36, 0, 70, 105, 49, 27, 28, 48, 247, 255, 248, 60, 70, 104, + 48, 27, 33, 13, 240, 3, 254, 75, 154, 3, 66, 130, 209, 6, 70, 105, 28, 40, 49, 27, 247, 255, 249, 17, 40, 0, 208, 1, + 44, 0, 208, 8, 122, 243, 6, 218, 212, 2, 155, 0, 43, 0, 209, 1, 36, 1, 224, 5, 36, 0, 28, 56, 28, 49, 247, 255, 250, + 194, 144, 5, 154, 5, 42, 0, 208, 1, 44, 0, 208, 196, 155, 5, 43, 0, 208, 44, 154, 0, 42, 0, 208, 21, 155, 1, 66, 147, + 217, 18, 122, 243, 6, 218, 213, 16, 28, 56, 28, 49, 247, 255, 248, 66, 157, 0, 144, 4, 224, 0, 53, 1, 120, 43, 43, 47, + 208, 251, 155, 1, 66, 157, 210, 1, 36, 0, 224, 0, 36, 1, 44, 0, 208, 138, 122, 59, 43, 3, 209, 15, 122, 243, 6, 218, + 213, 12, 28, 56, 28, 49, 247, 255, 248, 41, 40, 0, 209, 6, 28, 56, 28, 49, 247, 255, 248, 153, 224, 1, 32, 0, 224, 0, + 32, 1, 176, 11, 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 172, 45, 181, 48, 176, 207, 28, 10, 35, 0, 70, 105, 28, 4, + 70, 109, 247, 255, 255, 47, 40, 0, 208, 9, 122, 235, 6, 218, 213, 6, 28, 32, 70, 105, 247, 255, 248, 6, 100, 96, 32, + 1, 224, 0, 32, 0, 176, 79, 188, 48, 188, 2, 71, 8, 181, 240, 28, 29, 28, 6, 28, 15, 28, 20, 176, 129, 2, 81, 28, 24, + 247, 251, 253, 52, 105, 115, 28, 56, 28, 42, 28, 33, 240, 0, 248, 4, 176, 1, 188, 240, 188, 2, 71, 8, 71, 24, 70, 192, + 181, 240, 176, 131, 2, 86, 28, 28, 28, 7, 28, 21, 145, 1, 28, 24, 28, 49, 247, 251, 253, 29, 105, 59, 28, 41, 28, 34, + 152, 1, 240, 0, 248, 10, 28, 49, 28, 5, 28, 32, 247, 251, 252, 238, 176, 3, 28, 40, 188, 240, 188, 2, 71, 8, 71, 24, + 35, 120, 66, 91, 96, 3, 32, 1, 66, 64, 71, 112, 104, 75, 34, 0, 51, 252, 32, 0, 100, 90, 71, 112, 181, 112, 104, 76, + 28, 30, 28, 33, 49, 252, 108, 75, 28, 5, 28, 16, 43, 0, 209, 4, 35, 1, 66, 91, 96, 43, 28, 24, 224, 27, 108, 139, 43, + 0, 209, 5, 35, 106, 66, 91, 32, 1, 96, 43, 66, 64, 224, 18, 28, 33, 49, 60, 240, 3, 252, 88, 46, 0, 208, 4, 28, 33, + 201, 1, 28, 50, 247, 254, 255, 179, 28, 33, 201, 1, 247, 255, 250, 3, 28, 35, 51, 252, 100, 152, 32, 0, 188, 112, 188, + 2, 71, 8, 181, 16, 104, 73, 28, 12, 52, 252, 108, 99, 43, 0, 209, 4, 35, 1, 66, 91, 96, 3, 28, 24, 224, 5, 201, 1, 108, + 34, 247, 255, 250, 222, 100, 160, 32, 0, 188, 16, 188, 2, 71, 8, 70, 192, 181, 240, 176, 209, 28, 6, 28, 8, 28, 12, + 146, 1, 240, 1, 253, 40, 28, 5, 40, 0, 209, 4, 35, 1, 66, 91, 96, 51, 28, 24, 224, 35, 28, 32, 33, 58, 240, 3, 251, + 140, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 251, 133, 40, 0, 208, 1, 35, 101, 224, 9, 175, 2, 28, 40, 28, 57, + 28, 34, 35, 0, 247, 255, 254, 118, 40, 0, 209, 5, 35, 106, 66, 91, 32, 1, 96, 51, 66, 64, 224, 5, 28, 40, 28, 57, 154, + 1, 247, 254, 255, 95, 32, 0, 176, 81, 188, 240, 188, 2, 71, 8, 181, 240, 176, 209, 144, 1, 28, 16, 104, 79, 28, 20, + 240, 1, 252, 240, 28, 5, 96, 56, 40, 0, 209, 1, 35, 1, 224, 13, 28, 32, 33, 58, 240, 3, 251, 86, 40, 0, 208, 0, 28, + 68, 28, 32, 33, 58, 240, 3, 251, 79, 40, 0, 208, 5, 35, 101, 154, 1, 66, 91, 96, 19, 32, 0, 224, 32, 174, 2, 28, 40, + 28, 49, 28, 34, 35, 0, 247, 255, 254, 60, 40, 0, 209, 4, 35, 106, 154, 1, 66, 91, 96, 19, 224, 18, 122, 243, 6, 218, + 213, 232, 28, 49, 104, 56, 247, 254, 255, 14, 28, 60, 52, 252, 28, 57, 28, 2, 100, 32, 201, 1, 247, 255, 250, 98, 35, + 1, 100, 160, 100, 99, 28, 56, 176, 81, 188, 240, 188, 2, 71, 8, 181, 112, 28, 6, 28, 8, 28, 21, 240, 1, 252, 172, 28, + 4, 40, 0, 209, 4, 35, 1, 66, 91, 96, 51, 28, 24, 224, 29, 240, 1, 250, 96, 107, 35, 96, 43, 107, 35, 96, 107, 107, 227, + 96, 232, 59, 1, 96, 171, 97, 40, 107, 227, 97, 168, 59, 1, 97, 107, 97, 232, 104, 35, 104, 27, 98, 43, 109, 99, 43, + 0, 209, 1, 35, 2, 224, 0, 35, 3, 98, 107, 35, 128, 0, 91, 98, 171, 32, 0, 188, 112, 188, 2, 71, 8, 70, 192, 181, 240, + 176, 223, 144, 3, 28, 8, 28, 12, 240, 1, 252, 123, 28, 6, 40, 0, 209, 5, 35, 1, 153, 3, 66, 91, 96, 11, 28, 24, 224, + 213, 28, 32, 33, 58, 240, 3, 250, 222, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 250, 215, 40, 0, 209, 35, 175, + 8, 28, 48, 28, 57, 28, 34, 35, 0, 247, 255, 253, 202, 40, 0, 208, 1, 35, 105, 224, 194, 109, 115, 43, 0, 208, 0, 224, + 179, 28, 32, 33, 47, 240, 3, 252, 178, 28, 5, 40, 0, 209, 2, 108, 119, 28, 33, 224, 18, 28, 48, 28, 57, 28, 34, 28, + 43, 247, 255, 253, 178, 40, 0, 208, 2, 122, 251, 6, 217, 212, 1, 35, 101, 224, 157, 28, 57, 28, 48, 247, 254, 254, 135, + 28, 105, 28, 7, 172, 8, 168, 22, 240, 3, 251, 53, 33, 0, 34, 32, 28, 32, 240, 2, 253, 62, 35, 0, 115, 99, 240, 1, 251, + 106, 115, 160, 10, 0, 115, 224, 240, 1, 251, 103, 116, 32, 10, 0, 116, 96, 240, 1, 251, 96, 117, 160, 10, 0, 117, 224, + 240, 1, 251, 93, 118, 32, 10, 0, 118, 96, 240, 1, 251, 88, 35, 16, 116, 160, 10, 0, 116, 224, 114, 227, 28, 48, 33, + 0, 240, 1, 251, 27, 28, 5, 40, 1, 216, 0, 224, 114, 107, 243, 66, 152, 217, 0, 224, 110, 4, 2, 2, 19, 14, 27, 147, 5, + 118, 163, 12, 3, 14, 18, 4, 27, 146, 4, 118, 226, 2, 26, 14, 18, 14, 27, 146, 7, 28, 48, 117, 34, 28, 33, 147, 6, 28, + 58, 117, 99, 247, 255, 249, 239, 40, 0, 209, 1, 35, 108, 224, 75, 172, 86, 33, 0, 34, 32, 28, 32, 240, 2, 252, 245, + 33, 32, 34, 11, 28, 32, 240, 2, 252, 240, 35, 46, 112, 35, 35, 16, 114, 227, 34, 23, 70, 105, 92, 81, 35, 19, 118, 161, + 70, 106, 92, 154, 33, 31, 118, 226, 70, 107, 92, 203, 34, 27, 117, 35, 70, 105, 92, 81, 61, 2, 117, 97, 106, 243, 104, + 112, 28, 26, 67, 106, 106, 115, 28, 33, 24, 210, 35, 32, 147, 0, 35, 0, 247, 254, 252, 131, 105, 243, 66, 159, 209, + 0, 39, 0, 169, 86, 35, 46, 112, 75, 10, 59, 118, 203, 12, 59, 117, 11, 10, 27, 118, 143, 117, 75, 106, 243, 104, 112, + 28, 26, 67, 106, 106, 115, 24, 210, 35, 32, 147, 0, 247, 254, 252, 151, 104, 112, 247, 254, 251, 102, 40, 0, 208, 1, + 32, 0, 224, 5, 35, 103, 154, 3, 66, 91, 96, 19, 32, 1, 66, 64, 176, 95, 188, 240, 188, 2, 71, 8, 35, 108, 153, 3, 66, + 91, 96, 11, 231, 244, 70, 192, 181, 240, 76, 72, 28, 7, 68, 165, 28, 8, 28, 12, 28, 21, 240, 1, 251, 137, 28, 6, 40, + 0, 208, 4, 28, 40, 240, 1, 251, 131, 66, 134, 208, 4, 35, 1, 66, 91, 96, 59, 28, 24, 224, 116, 109, 115, 43, 0, 209, + 108, 28, 32, 33, 58, 240, 3, 249, 229, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 249, 222, 40, 0, 209, 54, 28, + 40, 33, 58, 240, 3, 249, 216, 40, 0, 208, 0, 28, 69, 28, 40, 33, 58, 240, 3, 249, 209, 40, 0, 209, 41, 28, 48, 169, + 80, 28, 34, 35, 0, 247, 255, 252, 197, 40, 0, 209, 1, 35, 106, 224, 73, 28, 48, 169, 2, 28, 42, 35, 0, 247, 255, 252, + 187, 40, 0, 208, 1, 35, 105, 224, 63, 28, 40, 33, 47, 240, 3, 251, 167, 28, 4, 40, 0, 209, 2, 108, 114, 146, 1, 224, + 19, 28, 48, 169, 2, 28, 42, 28, 35, 247, 255, 252, 167, 40, 0, 208, 3, 70, 106, 124, 211, 6, 218, 212, 1, 35, 101, 224, + 39, 28, 48, 169, 2, 247, 254, 253, 123, 28, 101, 144, 1, 172, 2, 34, 156, 0, 82, 169, 80, 28, 32, 240, 2, 251, 152, + 28, 41, 168, 16, 240, 3, 250, 34, 28, 48, 28, 33, 154, 1, 247, 255, 249, 27, 40, 0, 209, 1, 35, 108, 224, 13, 28, 48, + 169, 80, 247, 254, 254, 145, 40, 0, 208, 6, 104, 112, 247, 254, 250, 208, 40, 0, 208, 1, 32, 0, 224, 4, 35, 103, 66, + 91, 32, 1, 96, 59, 66, 64, 35, 159, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 70, 192, 255, 255, 253, 132, 181, 112, + 28, 5, 28, 8, 28, 12, 240, 1, 250, 248, 28, 6, 40, 0, 209, 4, 35, 1, 66, 91, 96, 43, 28, 24, 224, 25, 28, 32, 33, 58, + 240, 3, 249, 92, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 249, 85, 40, 0, 209, 7, 28, 48, 28, 33, 247, 255, 253, + 19, 40, 0, 208, 1, 32, 0, 224, 4, 35, 101, 66, 91, 32, 1, 96, 43, 66, 64, 188, 112, 188, 2, 71, 8, 70, 192, 181, 240, + 76, 68, 68, 165, 144, 1, 28, 8, 28, 12, 240, 1, 250, 202, 28, 5, 40, 0, 209, 5, 35, 1, 154, 1, 66, 91, 96, 19, 28, 24, + 224, 108, 109, 67, 43, 0, 209, 97, 28, 32, 33, 58, 240, 3, 249, 42, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 249, + 35, 40, 0, 208, 1, 35, 101, 224, 97, 174, 80, 28, 40, 28, 49, 28, 34, 35, 0, 247, 255, 252, 20, 40, 0, 209, 1, 35, 106, + 224, 86, 28, 40, 28, 49, 247, 254, 252, 236, 122, 243, 28, 7, 6, 218, 213, 29, 172, 2, 28, 40, 28, 33, 28, 58, 247, + 255, 248, 62, 78, 39, 224, 19, 170, 16, 120, 19, 43, 46, 209, 65, 34, 65, 68, 106, 120, 19, 43, 0, 208, 6, 107, 163, + 28, 50, 64, 26, 35, 184, 3, 155, 66, 154, 209, 53, 28, 40, 28, 33, 247, 254, 255, 54, 40, 0, 209, 233, 47, 1, 217, 14, + 107, 235, 66, 159, 216, 11, 28, 40, 28, 57, 240, 1, 248, 229, 40, 0, 209, 5, 35, 103, 154, 1, 66, 91, 96, 19, 36, 1, + 224, 0, 36, 0, 28, 40, 169, 80, 247, 254, 253, 228, 40, 0, 209, 4, 35, 103, 154, 1, 66, 91, 96, 19, 36, 1, 104, 104, + 247, 254, 250, 30, 40, 0, 209, 1, 35, 103, 224, 12, 44, 0, 209, 1, 32, 0, 224, 1, 32, 1, 66, 64, 35, 159, 0, 155, 68, + 157, 188, 240, 188, 2, 71, 8, 35, 102, 154, 1, 66, 91, 96, 19, 231, 242, 70, 192, 255, 255, 253, 132, 0, 255, 255, 0, + 181, 240, 176, 129, 28, 7, 28, 12, 28, 21, 158, 6, 43, 0, 208, 37, 46, 0, 208, 2, 104, 51, 43, 0, 208, 34, 104, 98, + 106, 235, 66, 154, 217, 1, 35, 101, 224, 34, 66, 154, 209, 24, 104, 33, 28, 40, 240, 0, 255, 113, 75, 17, 66, 152, 208, + 1, 40, 0, 209, 3, 104, 33, 28, 40, 240, 1, 248, 240, 40, 1, 217, 16, 107, 235, 66, 152, 216, 13, 35, 0, 96, 99, 96, + 32, 224, 2, 35, 0, 96, 51, 224, 1, 32, 1, 224, 0, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 35, 108, 66, 91, 96, 59, 46, + 0, 209, 240, 231, 244, 70, 192, 15, 255, 255, 255, 181, 240, 76, 111, 34, 128, 68, 165, 145, 3, 144, 4, 107, 205, 0, + 146, 104, 104, 33, 0, 144, 5, 168, 6, 240, 2, 251, 6, 153, 3, 75, 105, 104, 8, 175, 135, 64, 3, 96, 187, 107, 41, 240, + 1, 253, 165, 10, 73, 96, 121, 154, 3, 28, 40, 104, 81, 240, 0, 255, 186, 155, 3, 144, 135, 104, 26, 104, 155, 28, 1, + 26, 158, 46, 0, 208, 19, 42, 0, 208, 17, 104, 123, 43, 0, 209, 14, 104, 188, 44, 0, 209, 11, 28, 40, 240, 1, 248, 163, + 40, 1, 216, 0, 224, 159, 107, 235, 66, 152, 217, 0, 224, 155, 96, 56, 96, 124, 169, 135, 104, 143, 75, 82, 25, 186, + 66, 154, 216, 22, 154, 135, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, 224, 0, 105, 168, 172, 135, 104, + 98, 28, 59, 24, 130, 169, 6, 152, 5, 150, 0, 247, 254, 250, 161, 104, 163, 25, 155, 96, 163, 224, 109, 47, 0, 221, 70, + 104, 10, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 211, 224, 0, 105, 171, 172, 135, 104, 98, 152, 5, 24, + 154, 35, 128, 0, 155, 27, 219, 147, 0, 169, 6, 28, 59, 247, 254, 250, 133, 104, 163, 72, 57, 24, 243, 24, 30, 35, 0, + 96, 163, 104, 99, 51, 1, 96, 99, 224, 38, 104, 98, 106, 235, 66, 154, 211, 11, 33, 0, 96, 97, 28, 40, 104, 33, 240, + 1, 248, 81, 40, 1, 217, 83, 107, 235, 66, 152, 216, 80, 96, 32, 104, 34, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, + 107, 24, 210, 224, 0, 105, 170, 104, 97, 28, 59, 24, 81, 152, 5, 34, 1, 247, 254, 249, 78, 104, 99, 74, 36, 51, 1, 24, + 182, 96, 99, 224, 1, 172, 135, 175, 6, 75, 31, 66, 158, 216, 211, 35, 0, 147, 0, 152, 4, 28, 33, 28, 42, 28, 51, 247, + 255, 255, 21, 40, 0, 208, 30, 46, 0, 208, 19, 104, 33, 41, 1, 217, 5, 106, 235, 30, 138, 67, 90, 106, 107, 24, 208, + 224, 0, 105, 168, 172, 135, 104, 98, 169, 6, 24, 130, 35, 0, 152, 5, 150, 0, 247, 254, 250, 48, 96, 166, 154, 3, 171, + 135, 50, 12, 203, 19, 194, 19, 154, 3, 32, 1, 104, 147, 96, 19, 35, 139, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 35, + 108, 156, 4, 66, 91, 96, 35, 224, 3, 35, 108, 152, 4, 66, 91, 96, 3, 32, 0, 231, 238, 70, 192, 255, 255, 253, 212, 0, + 0, 1, 255, 255, 255, 254, 0, 181, 240, 176, 137, 144, 3, 28, 12, 28, 23, 42, 0, 218, 3, 35, 101, 66, 91, 96, 3, 224, + 17, 41, 0, 208, 2, 109, 75, 43, 0, 209, 5, 152, 3, 35, 1, 66, 91, 96, 3, 28, 24, 224, 110, 108, 203, 43, 0, 209, 6, + 35, 101, 153, 3, 66, 91, 96, 11, 32, 1, 66, 64, 224, 100, 104, 11, 107, 205, 66, 154, 217, 50, 104, 78, 46, 0, 209, + 12, 28, 40, 33, 0, 240, 0, 255, 195, 40, 1, 217, 91, 107, 235, 66, 152, 216, 88, 96, 96, 96, 224, 97, 38, 97, 102, 28, + 34, 171, 5, 50, 12, 202, 97, 195, 97, 104, 161, 145, 1, 96, 167, 152, 3, 28, 33, 247, 255, 254, 218, 40, 0, 209, 2, + 32, 1, 66, 64, 224, 0, 32, 0, 109, 35, 43, 0, 208, 5, 28, 34, 28, 35, 50, 24, 51, 12, 203, 98, 194, 98, 28, 34, 171, + 5, 50, 12, 203, 98, 194, 98, 154, 1, 96, 162, 224, 42, 66, 154, 210, 39, 104, 78, 42, 0, 209, 8, 28, 40, 28, 49, 240, + 0, 255, 48, 96, 103, 97, 167, 97, 231, 98, 39, 224, 27, 107, 41, 30, 80, 240, 1, 252, 47, 28, 2, 28, 49, 50, 1, 28, + 40, 240, 0, 255, 77, 109, 35, 28, 6, 43, 0, 208, 13, 75, 13, 28, 56, 64, 59, 98, 35, 107, 41, 240, 1, 252, 92, 41, 0, + 209, 1, 106, 235, 224, 0, 10, 75, 97, 227, 97, 166, 32, 0, 35, 1, 96, 39, 101, 163, 176, 9, 188, 240, 188, 2, 71, 8, + 35, 108, 157, 3, 66, 91, 96, 43, 231, 142, 0, 0, 1, 255, 181, 240, 176, 133, 28, 12, 144, 1, 28, 25, 28, 16, 44, 0, + 208, 2, 109, 99, 43, 0, 209, 5, 35, 1, 153, 1, 66, 91, 96, 11, 28, 24, 224, 107, 107, 226, 146, 2, 41, 1, 208, 5, 41, + 2, 208, 9, 41, 0, 209, 10, 28, 7, 224, 13, 104, 163, 24, 195, 28, 31, 43, 0, 218, 8, 224, 80, 104, 35, 24, 199, 224, + 4, 35, 101, 153, 1, 66, 91, 96, 11, 224, 76, 104, 35, 66, 159, 216, 78, 104, 99, 147, 3, 43, 0, 208, 74, 153, 2, 28, + 56, 107, 13, 28, 41, 240, 1, 251, 210, 28, 6, 104, 160, 66, 135, 211, 11, 28, 41, 240, 1, 251, 203, 153, 2, 105, 34, + 106, 203, 66, 154, 209, 0, 56, 1, 104, 226, 26, 54, 146, 3, 28, 56, 28, 41, 240, 1, 251, 252, 75, 27, 10, 73, 64, 59, + 97, 33, 97, 99, 152, 2, 153, 3, 240, 0, 253, 131, 224, 5, 152, 2, 28, 41, 240, 0, 253, 126, 62, 1, 149, 3, 28, 5, 46, + 0, 221, 5, 40, 0, 208, 3, 75, 18, 66, 152, 209, 241, 224, 1, 46, 0, 221, 19, 46, 1, 209, 10, 104, 35, 66, 187, 209, + 7, 105, 34, 42, 0, 209, 4, 153, 2, 106, 203, 97, 98, 97, 35, 224, 6, 35, 101, 154, 1, 66, 91, 96, 19, 32, 1, 66, 64, + 224, 3, 155, 3, 96, 227, 96, 167, 28, 56, 176, 5, 188, 240, 188, 2, 71, 8, 70, 192, 0, 0, 1, 255, 15, 255, 255, 255, + 181, 240, 176, 209, 28, 7, 28, 12, 28, 21, 41, 0, 208, 2, 109, 75, 43, 0, 209, 4, 35, 1, 66, 91, 96, 59, 28, 24, 224, + 31, 107, 200, 28, 11, 144, 1, 170, 10, 51, 36, 203, 67, 194, 67, 170, 13, 203, 67, 194, 67, 169, 2, 152, 1, 247, 254, + 252, 11, 40, 0, 209, 5, 35, 103, 66, 91, 32, 1, 96, 59, 66, 64, 224, 9, 152, 1, 169, 2, 28, 42, 247, 254, 250, 66, 104, + 99, 32, 0, 96, 107, 104, 35, 97, 171, 176, 81, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, 149, 147, 5, 35, 1, + 144, 7, 28, 14, 146, 6, 147, 19, 41, 0, 208, 5, 109, 75, 43, 0, 208, 2, 108, 203, 43, 0, 209, 5, 152, 7, 35, 1, 66, + 91, 96, 3, 28, 24, 225, 175, 107, 205, 104, 48, 104, 105, 154, 5, 145, 8, 28, 4, 33, 0, 35, 0, 25, 18, 65, 89, 41, 0, + 208, 1, 67, 192, 144, 5, 154, 5, 42, 0, 209, 1, 32, 0, 225, 156, 104, 116, 44, 0, 209, 17, 28, 40, 33, 0, 240, 0, 254, + 116, 40, 1, 216, 0, 225, 150, 107, 235, 66, 152, 217, 0, 225, 146, 96, 112, 97, 176, 97, 244, 98, 52, 96, 240, 97, 52, + 97, 116, 109, 51, 43, 0, 208, 5, 28, 50, 171, 16, 50, 24, 202, 145, 195, 145, 224, 26, 104, 178, 104, 51, 66, 154, 217, + 6, 152, 7, 28, 49, 247, 255, 253, 129, 40, 0, 209, 0, 225, 123, 28, 50, 171, 16, 50, 12, 202, 145, 195, 145, 154, 5, + 104, 180, 35, 0, 33, 0, 25, 18, 65, 89, 104, 51, 41, 0, 209, 1, 66, 154, 217, 2, 33, 1, 145, 10, 224, 1, 34, 0, 146, + 10, 172, 16, 171, 19, 147, 0, 28, 33, 155, 5, 152, 7, 28, 42, 247, 255, 253, 34, 104, 164, 35, 128, 0, 155, 70, 164, + 27, 27, 156, 5, 66, 156, 217, 0, 28, 28, 75, 172, 66, 156, 216, 39, 155, 19, 43, 0, 208, 36, 154, 16, 42, 1, 217, 5, + 106, 235, 58, 2, 67, 90, 106, 107, 24, 211, 224, 0, 105, 171, 175, 16, 104, 122, 152, 8, 24, 154, 153, 6, 70, 99, 148, + 0, 247, 254, 248, 50, 152, 6, 155, 5, 25, 0, 27, 27, 147, 9, 144, 6, 104, 187, 74, 156, 24, 227, 96, 187, 66, 147, 221, + 7, 35, 0, 96, 187, 104, 123, 51, 1, 96, 123, 224, 1, 153, 5, 145, 9, 106, 232, 159, 17, 154, 9, 27, 196, 2, 99, 66, + 154, 216, 0, 10, 84, 44, 0, 209, 0, 224, 137, 66, 132, 211, 0, 224, 134, 155, 19, 43, 0, 209, 0, 224, 130, 155, 16, + 43, 1, 217, 5, 59, 2, 28, 2, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 25, 201, 152, 8, 28, 34, 155, 6, 247, 253, + 254, 240, 40, 0, 209, 5, 35, 103, 156, 7, 66, 91, 144, 19, 96, 35, 224, 106, 159, 6, 152, 9, 2, 99, 24, 255, 26, 192, + 151, 6, 144, 9, 170, 16, 104, 83, 24, 227, 96, 83, 224, 94, 169, 19, 145, 0, 155, 9, 152, 7, 169, 16, 28, 42, 247, 255, + 252, 174, 155, 19, 43, 0, 208, 96, 154, 16, 155, 3, 146, 11, 154, 2, 107, 47, 202, 19, 195, 19, 156, 11, 224, 21, 106, + 235, 154, 9, 168, 19, 147, 14, 144, 0, 27, 211, 152, 7, 169, 13, 28, 42, 247, 255, 252, 151, 155, 19, 43, 0, 208, 15, + 155, 11, 156, 13, 51, 1, 66, 156, 209, 10, 107, 43, 148, 11, 24, 255, 155, 19, 43, 0, 208, 4, 107, 43, 153, 9, 24, 251, + 66, 139, 211, 225, 154, 16, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 10, 122, 152, + 8, 155, 6, 247, 253, 254, 155, 40, 0, 209, 5, 35, 103, 154, 7, 66, 91, 144, 19, 96, 19, 224, 34, 155, 11, 66, 163, 208, + 7, 44, 1, 217, 5, 107, 235, 66, 156, 216, 2, 148, 16, 35, 0, 224, 2, 156, 11, 148, 16, 106, 235, 152, 6, 153, 9, 25, + 192, 27, 201, 147, 17, 144, 6, 145, 9, 224, 5, 70, 106, 70, 107, 50, 64, 51, 52, 146, 2, 147, 3, 107, 43, 156, 9, 66, + 156, 211, 2, 155, 19, 43, 0, 209, 147, 171, 19, 147, 0, 152, 7, 169, 16, 28, 42, 155, 9, 159, 9, 247, 255, 252, 65, + 152, 9, 10, 68, 44, 0, 208, 35, 155, 19, 43, 0, 208, 32, 153, 16, 41, 1, 217, 5, 106, 235, 30, 138, 67, 90, 106, 107, + 24, 209, 224, 0, 105, 169, 152, 8, 28, 34, 155, 6, 247, 253, 254, 81, 40, 0, 209, 5, 35, 103, 153, 7, 66, 91, 144, 19, + 96, 11, 224, 9, 154, 6, 2, 99, 24, 210, 152, 9, 146, 6, 170, 16, 26, 199, 104, 83, 24, 227, 96, 83, 47, 0, 208, 47, + 155, 19, 43, 0, 208, 44, 153, 10, 41, 0, 208, 18, 154, 16, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, + 224, 0, 105, 168, 154, 17, 153, 6, 24, 130, 35, 0, 152, 8, 151, 0, 247, 253, 255, 5, 224, 17, 154, 16, 42, 1, 217, 5, + 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, 224, 0, 105, 168, 154, 17, 153, 6, 24, 130, 35, 0, 152, 8, 151, 0, 247, + 253, 255, 30, 170, 16, 104, 147, 24, 251, 96, 147, 39, 0, 35, 1, 154, 5, 101, 179, 109, 51, 27, 208, 172, 16, 43, 0, + 208, 7, 28, 51, 51, 24, 204, 162, 195, 162, 104, 51, 24, 27, 96, 51, 224, 10, 28, 51, 51, 12, 204, 162, 195, 162, 104, + 179, 24, 196, 104, 51, 96, 180, 66, 163, 210, 0, 96, 52, 176, 21, 188, 240, 188, 2, 71, 8, 35, 108, 154, 7, 66, 91, + 96, 19, 32, 1, 66, 64, 231, 244, 70, 192, 0, 0, 1, 255, 181, 240, 176, 143, 144, 7, 145, 6, 146, 5, 147, 4, 43, 0, 208, + 27, 153, 6, 41, 0, 208, 5, 109, 75, 43, 0, 208, 2, 108, 139, 43, 0, 209, 5, 35, 1, 154, 7, 66, 91, 96, 19, 28, 24, 225, + 57, 155, 6, 104, 152, 104, 30, 107, 221, 66, 176, 210, 2, 104, 91, 43, 0, 209, 5, 35, 121, 153, 7, 66, 91, 96, 11, 32, + 0, 225, 42, 154, 4, 33, 0, 28, 4, 35, 0, 25, 18, 65, 89, 41, 0, 209, 1, 66, 178, 217, 8, 154, 7, 35, 121, 66, 91, 96, + 19, 155, 6, 104, 26, 104, 155, 26, 211, 147, 4, 153, 6, 156, 4, 104, 202, 105, 15, 146, 12, 105, 75, 147, 13, 107, 203, + 153, 13, 104, 91, 147, 8, 35, 128, 0, 155, 26, 91, 66, 156, 217, 0, 28, 28, 75, 138, 66, 156, 217, 1, 158, 4, 224, 30, + 154, 12, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 210, 224, 0, 105, 170, 25, 210, 153, 5, 155, 13, 152, + 8, 148, 0, 247, 253, 254, 222, 155, 4, 153, 5, 154, 13, 27, 30, 75, 125, 25, 9, 24, 162, 145, 5, 146, 13, 66, 154, 221, + 2, 35, 0, 55, 1, 147, 13, 106, 233, 27, 204, 2, 99, 66, 158, 216, 0, 10, 116, 44, 0, 208, 30, 154, 12, 42, 1, 217, 6, + 28, 19, 59, 2, 28, 10, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 25, 201, 152, 8, 28, 34, 155, 5, 247, 253, 255, + 5, 40, 0, 209, 5, 35, 103, 153, 7, 66, 91, 96, 11, 34, 0, 224, 6, 154, 5, 2, 99, 24, 210, 146, 5, 26, 246, 25, 63, 34, + 1, 106, 235, 66, 159, 211, 97, 42, 0, 208, 95, 28, 40, 153, 12, 240, 0, 250, 169, 46, 0, 209, 5, 75, 96, 66, 152, 209, + 2, 106, 239, 34, 1, 224, 83, 40, 1, 216, 0, 224, 170, 107, 235, 66, 152, 217, 0, 224, 166, 144, 12, 34, 1, 39, 0, 224, + 72, 155, 12, 33, 0, 147, 9, 145, 10, 28, 40, 153, 9, 240, 0, 250, 142, 107, 42, 155, 10, 28, 4, 24, 155, 147, 10, 155, + 9, 51, 1, 66, 152, 209, 5, 153, 10, 24, 139, 66, 179, 216, 1, 144, 9, 231, 236, 154, 12, 42, 1, 217, 5, 106, 235, 58, + 2, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 155, 10, 152, 8, 10, 90, 155, 5, 247, 253, 254, 179, 40, 0, 209, 6, + 35, 103, 153, 7, 66, 91, 96, 11, 34, 0, 151, 11, 224, 33, 154, 10, 26, 182, 46, 0, 209, 7, 75, 61, 66, 156, 209, 4, + 153, 9, 106, 239, 34, 1, 145, 12, 224, 7, 44, 1, 217, 106, 107, 235, 66, 156, 216, 103, 148, 12, 34, 1, 39, 0, 155, + 5, 153, 10, 24, 91, 147, 5, 224, 2, 35, 103, 66, 91, 147, 3, 107, 43, 66, 158, 211, 1, 42, 0, 209, 174, 151, 11, 10, + 116, 44, 0, 208, 33, 42, 0, 208, 31, 153, 12, 41, 1, 217, 6, 28, 10, 106, 235, 58, 2, 67, 90, 106, 107, 24, 209, 224, + 0, 105, 169, 152, 8, 28, 34, 155, 5, 247, 253, 254, 115, 40, 0, 209, 5, 154, 7, 35, 103, 66, 91, 96, 19, 34, 0, 224, + 7, 153, 5, 2, 99, 24, 201, 25, 231, 145, 5, 26, 246, 151, 11, 34, 1, 46, 0, 208, 23, 42, 0, 208, 21, 154, 12, 42, 1, + 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, 224, 0, 105, 168, 155, 11, 153, 5, 24, 194, 152, 8, 35, 0, 150, + 0, 247, 253, 253, 255, 153, 13, 24, 113, 145, 13, 38, 0, 155, 4, 153, 11, 27, 154, 155, 6, 28, 16, 97, 25, 153, 12, + 96, 217, 153, 13, 97, 89, 153, 6, 104, 139, 24, 155, 96, 139, 176, 15, 188, 240, 188, 2, 71, 8, 154, 7, 35, 103, 66, + 91, 96, 19, 34, 0, 231, 159, 155, 3, 153, 7, 34, 0, 96, 11, 231, 149, 0, 0, 1, 255, 15, 255, 255, 255, 181, 48, 176, + 139, 28, 5, 40, 0, 208, 98, 109, 67, 43, 0, 208, 95, 108, 195, 43, 0, 208, 88, 109, 131, 43, 0, 208, 85, 107, 193, 107, + 42, 104, 72, 42, 1, 217, 5, 106, 203, 58, 2, 67, 90, 106, 75, 24, 211, 224, 0, 105, 139, 107, 106, 172, 2, 24, 154, + 107, 171, 33, 32, 1, 91, 145, 0, 28, 33, 247, 253, 253, 182, 104, 43, 10, 26, 119, 35, 119, 98, 12, 26, 14, 27, 119, + 227, 104, 107, 119, 162, 118, 163, 10, 26, 12, 27, 117, 35, 10, 27, 118, 226, 117, 99, 240, 0, 251, 166, 117, 160, 10, + 0, 117, 224, 240, 0, 251, 163, 118, 32, 10, 0, 118, 96, 240, 0, 251, 158, 122, 227, 34, 32, 116, 160, 67, 19, 10, 0, + 107, 233, 107, 42, 116, 224, 114, 227, 104, 72, 42, 1, 217, 5, 106, 203, 58, 2, 67, 90, 106, 75, 24, 211, 224, 0, 105, + 139, 107, 106, 33, 32, 24, 154, 107, 171, 145, 0, 1, 91, 169, 2, 247, 253, 253, 48, 107, 235, 104, 88, 247, 253, 251, + 254, 40, 0, 209, 1, 32, 103, 224, 4, 35, 0, 101, 171, 32, 0, 224, 1, 32, 1, 66, 64, 176, 11, 188, 48, 188, 2, 71, 8, + 181, 16, 109, 75, 28, 4, 28, 8, 43, 0, 209, 4, 35, 1, 66, 91, 96, 35, 28, 24, 224, 6, 247, 255, 255, 133, 40, 0, 208, + 2, 96, 32, 32, 1, 66, 64, 188, 16, 188, 2, 71, 8, 70, 192, 181, 48, 109, 75, 176, 129, 28, 5, 28, 12, 43, 0, 209, 4, + 35, 1, 66, 91, 96, 3, 28, 24, 224, 31, 108, 203, 43, 0, 209, 1, 32, 0, 224, 7, 28, 8, 247, 255, 255, 104, 40, 0, 208, + 2, 96, 40, 32, 1, 66, 64, 107, 226, 35, 0, 101, 99, 108, 147, 59, 1, 100, 147, 108, 98, 42, 0, 208, 1, 108, 35, 100, + 19, 108, 35, 108, 98, 43, 0, 208, 1, 100, 90, 224, 1, 107, 227, 100, 218, 176, 1, 188, 48, 188, 2, 71, 8, 181, 240, + 176, 211, 144, 2, 28, 16, 28, 13, 28, 23, 147, 1, 240, 0, 251, 225, 28, 6, 40, 0, 209, 5, 152, 2, 35, 1, 66, 91, 96, + 3, 32, 6, 224, 17, 28, 56, 33, 58, 240, 2, 250, 68, 40, 0, 208, 0, 28, 71, 28, 56, 33, 58, 240, 2, 250, 61, 40, 0, 208, + 6, 35, 101, 153, 2, 66, 91, 96, 11, 32, 1, 66, 64, 225, 3, 154, 1, 35, 3, 64, 26, 209, 4, 35, 1, 100, 171, 100, 234, + 101, 42, 224, 13, 42, 1, 209, 2, 100, 168, 100, 234, 224, 4, 42, 2, 209, 4, 35, 1, 100, 171, 100, 235, 101, 40, 224, + 1, 35, 102, 224, 32, 108, 235, 43, 0, 208, 3, 109, 115, 43, 0, 208, 0, 224, 131, 172, 4, 35, 0, 28, 33, 28, 58, 28, + 48, 247, 254, 253, 11, 28, 1, 30, 75, 65, 153, 154, 1, 35, 160, 1, 27, 64, 26, 66, 154, 209, 3, 41, 0, 208, 11, 35, + 105, 224, 80, 41, 0, 208, 7, 122, 227, 6, 217, 213, 4, 35, 122, 154, 2, 66, 91, 96, 19, 231, 192, 35, 0, 101, 171, 40, + 0, 209, 79, 155, 1, 5, 155, 213, 70, 109, 115, 43, 0, 209, 91, 28, 56, 33, 47, 240, 2, 251, 218, 28, 4, 40, 0, 209, + 3, 108, 112, 28, 57, 144, 3, 224, 19, 28, 48, 169, 4, 28, 58, 28, 35, 247, 254, 252, 217, 40, 0, 208, 3, 70, 105, 126, + 203, 6, 218, 212, 1, 35, 101, 224, 67, 169, 4, 28, 48, 247, 253, 253, 173, 28, 97, 144, 3, 172, 4, 34, 255, 168, 18, + 240, 2, 251, 70, 33, 0, 34, 32, 28, 32, 240, 1, 252, 99, 35, 0, 115, 99, 240, 0, 250, 143, 115, 160, 10, 0, 115, 224, + 240, 0, 250, 140, 116, 32, 10, 0, 116, 96, 28, 33, 28, 48, 154, 3, 247, 254, 249, 66, 40, 0, 209, 4, 35, 108, 152, 2, + 66, 91, 96, 3, 231, 117, 35, 1, 101, 171, 224, 5, 35, 106, 153, 2, 66, 91, 96, 11, 32, 2, 231, 109, 169, 4, 127, 74, + 127, 139, 2, 18, 4, 27, 67, 26, 127, 11, 67, 26, 127, 203, 6, 27, 67, 26, 108, 235, 96, 42, 43, 0, 208, 7, 122, 203, + 7, 218, 213, 4, 35, 103, 156, 2, 66, 91, 96, 35, 231, 85, 169, 4, 99, 238, 28, 48, 247, 253, 253, 100, 28, 1, 96, 104, + 152, 1, 5, 64, 213, 12, 108, 235, 43, 0, 208, 9, 41, 0, 208, 7, 28, 48, 240, 0, 249, 123, 35, 0, 96, 107, 96, 43, 35, + 1, 101, 171, 28, 42, 50, 36, 171, 12, 203, 19, 194, 19, 171, 15, 203, 19, 194, 19, 35, 0, 104, 105, 154, 1, 96, 171, + 97, 43, 97, 107, 35, 8, 96, 233, 64, 19, 208, 27, 35, 1, 101, 43, 28, 48, 240, 0, 248, 193, 104, 44, 97, 168, 107, 49, + 28, 32, 240, 0, 254, 159, 75, 22, 10, 73, 64, 35, 97, 233, 98, 43, 44, 0, 208, 16, 28, 32, 107, 49, 240, 0, 254, 148, + 41, 0, 209, 10, 106, 243, 98, 41, 97, 235, 224, 6, 101, 43, 28, 42, 28, 43, 50, 24, 51, 12, 203, 19, 194, 19, 35, 1, + 101, 107, 108, 179, 51, 1, 100, 179, 108, 243, 43, 0, 208, 3, 100, 107, 108, 243, 100, 29, 224, 0, 100, 107, 35, 0, + 100, 43, 28, 40, 100, 245, 176, 83, 188, 240, 188, 2, 71, 8, 0, 0, 1, 255, 181, 240, 176, 135, 28, 5, 28, 15, 41, 0, + 209, 1, 32, 0, 224, 97, 35, 0, 147, 5, 122, 1, 41, 2, 208, 54, 41, 3, 208, 70, 41, 1, 208, 2, 32, 1, 66, 64, 224, 85, + 0, 124, 107, 67, 25, 228, 10, 162, 24, 211, 5, 164, 147, 3, 13, 228, 104, 64, 28, 26, 145, 0, 28, 35, 169, 5, 247, 253, + 251, 245, 35, 128, 28, 102, 0, 155, 66, 158, 209, 3, 155, 3, 38, 0, 51, 1, 147, 3, 35, 0, 147, 4, 154, 3, 28, 51, 104, + 104, 36, 1, 169, 4, 148, 0, 247, 253, 251, 226, 155, 4, 154, 5, 2, 27, 67, 26, 66, 39, 208, 1, 9, 19, 224, 1, 75, 23, + 64, 19, 147, 5, 154, 5, 75, 22, 224, 13, 107, 107, 0, 122, 10, 82, 24, 210, 35, 255, 64, 59, 104, 64, 0, 91, 145, 0, + 169, 5, 247, 253, 251, 200, 154, 5, 75, 16, 66, 154, 217, 20, 75, 15, 224, 17, 107, 107, 0, 186, 10, 82, 24, 210, 35, + 127, 33, 4, 64, 59, 104, 64, 0, 155, 145, 0, 169, 5, 247, 253, 251, 181, 154, 5, 75, 8, 66, 154, 217, 1, 51, 9, 147, + 5, 152, 5, 176, 7, 188, 240, 188, 2, 71, 8, 0, 0, 15, 255, 0, 0, 15, 246, 0, 0, 255, 246, 15, 255, 255, 255, 15, 255, + 255, 246, 181, 112, 28, 6, 37, 0, 36, 2, 224, 7, 28, 48, 28, 33, 247, 255, 255, 127, 40, 0, 209, 0, 53, 1, 52, 1, 107, + 243, 66, 156, 217, 244, 28, 40, 188, 112, 188, 2, 71, 8, 181, 112, 28, 5, 28, 12, 78, 11, 224, 4, 28, 33, 28, 40, 247, + 255, 255, 107, 28, 4, 28, 40, 28, 33, 247, 255, 255, 102, 40, 0, 208, 5, 28, 40, 28, 33, 247, 255, 255, 96, 66, 176, + 209, 238, 28, 32, 188, 112, 188, 2, 71, 8, 15, 255, 255, 255, 181, 240, 176, 137, 28, 6, 28, 12, 146, 3, 41, 1, 217, + 117, 107, 195, 66, 153, 216, 114, 122, 5, 45, 2, 208, 86, 45, 3, 208, 98, 45, 1, 209, 107, 0, 75, 24, 91, 10, 153, 5, + 155, 107, 66, 13, 219, 147, 4, 51, 1, 104, 64, 24, 143, 147, 2, 66, 44, 208, 36, 169, 7, 28, 58, 155, 4, 149, 0, 247, + 253, 251, 76, 155, 3, 34, 15, 1, 25, 155, 7, 104, 112, 64, 19, 67, 25, 35, 255, 145, 5, 28, 58, 64, 25, 155, 4, 149, + 0, 247, 253, 250, 241, 35, 128, 156, 2, 0, 155, 66, 156, 209, 1, 55, 1, 36, 0, 155, 5, 104, 112, 4, 25, 35, 1, 147, + 0, 14, 9, 28, 58, 28, 35, 224, 42, 155, 4, 153, 3, 28, 58, 149, 0, 247, 253, 250, 219, 35, 128, 157, 2, 0, 155, 66, + 157, 209, 1, 55, 1, 37, 0, 36, 1, 169, 7, 28, 58, 28, 43, 104, 112, 148, 0, 247, 253, 251, 24, 155, 3, 34, 240, 5, 25, + 155, 7, 15, 9, 64, 19, 67, 25, 104, 112, 148, 0, 28, 58, 28, 43, 224, 9, 107, 115, 0, 74, 10, 82, 24, 210, 35, 255, + 64, 11, 104, 64, 0, 91, 149, 0, 153, 3, 247, 253, 250, 180, 32, 1, 224, 11, 0, 138, 107, 115, 10, 82, 24, 210, 35, 127, + 64, 11, 33, 4, 104, 64, 0, 155, 145, 0, 231, 239, 32, 0, 176, 9, 188, 240, 188, 2, 71, 8, 181, 240, 176, 129, 28, 6, + 28, 13, 41, 1, 217, 27, 107, 195, 66, 153, 216, 24, 108, 3, 66, 153, 210, 13, 100, 49, 224, 11, 28, 41, 28, 48, 247, + 255, 254, 196, 28, 41, 28, 4, 34, 0, 28, 48, 247, 255, 255, 102, 28, 37, 224, 0, 79, 7, 66, 189, 208, 6, 45, 0, 208, + 4, 28, 107, 209, 236, 224, 1, 32, 0, 224, 0, 32, 1, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 15, 255, 255, 255, 181, + 240, 176, 129, 28, 7, 28, 13, 42, 0, 209, 3, 247, 255, 255, 204, 38, 0, 224, 32, 30, 86, 247, 255, 254, 157, 224, 5, + 28, 56, 28, 33, 247, 255, 254, 152, 62, 1, 28, 37, 28, 4, 46, 0, 208, 4, 40, 0, 208, 2, 75, 11, 66, 152, 209, 241, 28, + 46, 44, 0, 208, 6, 75, 8, 66, 156, 208, 3, 28, 56, 28, 33, 247, 255, 255, 174, 28, 56, 28, 41, 74, 3, 247, 255, 255, + 39, 176, 1, 28, 48, 188, 240, 188, 2, 71, 8, 15, 255, 255, 255, 181, 240, 107, 199, 176, 131, 28, 5, 28, 14, 66, 185, + 216, 20, 247, 255, 254, 111, 40, 1, 217, 1, 66, 184, 217, 42, 108, 43, 43, 1, 216, 14, 35, 2, 224, 12, 52, 1, 66, 188, + 217, 12, 154, 1, 35, 2, 42, 0, 209, 1, 34, 1, 224, 4, 100, 44, 32, 1, 66, 64, 224, 24, 34, 0, 146, 1, 28, 28, 28, 40, + 28, 33, 247, 255, 254, 82, 40, 0, 209, 233, 100, 44, 46, 1, 217, 6, 66, 190, 210, 4, 28, 40, 28, 49, 28, 34, 247, 255, + 254, 238, 28, 40, 28, 33, 74, 3, 247, 255, 254, 233, 28, 32, 176, 3, 188, 240, 188, 2, 71, 8, 15, 255, 255, 255, 181, + 240, 176, 131, 28, 7, 247, 255, 255, 189, 30, 67, 28, 5, 51, 3, 217, 2, 37, 1, 66, 109, 224, 29, 76, 17, 34, 128, 33, + 0, 28, 32, 0, 146, 240, 1, 249, 239, 30, 169, 38, 0, 145, 1, 224, 15, 104, 120, 45, 1, 217, 5, 153, 1, 28, 26, 67, 74, + 106, 123, 24, 209, 224, 0, 105, 185, 25, 137, 34, 1, 28, 35, 247, 253, 248, 176, 54, 1, 106, 251, 66, 158, 211, 236, + 176, 3, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 117, 184, 128, 32, 0, 71, 112, 32, 0, 71, 112, 181, 0, 176, 139, + 170, 1, 10, 195, 96, 147, 5, 67, 14, 155, 96, 83, 35, 31, 64, 24, 64, 11, 96, 211, 5, 203, 15, 27, 59, 1, 0, 64, 97, + 19, 10, 73, 35, 0, 144, 1, 97, 81, 98, 19, 28, 16, 240, 1, 251, 25, 176, 11, 188, 2, 71, 8, 181, 240, 76, 16, 176, 129, + 28, 39, 28, 6, 55, 16, 104, 37, 45, 0, 208, 13, 104, 40, 34, 0, 224, 2, 43, 58, 208, 3, 50, 1, 92, 179, 43, 0, 209, + 249, 28, 49, 240, 2, 248, 43, 40, 0, 208, 5, 52, 4, 66, 188, 209, 235, 28, 35, 59, 16, 104, 29, 176, 1, 28, 40, 188, + 240, 188, 2, 71, 8, 19, 117, 186, 128, 181, 240, 176, 129, 28, 7, 247, 255, 255, 215, 28, 6, 40, 0, 208, 36, 74, 20, + 104, 131, 66, 147, 209, 32, 77, 19, 36, 0, 104, 40, 40, 0, 208, 17, 104, 0, 34, 0, 224, 2, 43, 58, 208, 3, 50, 1, 92, + 187, 43, 0, 209, 249, 28, 57, 240, 1, 255, 255, 40, 0, 209, 3, 74, 10, 0, 163, 80, 152, 224, 9, 52, 1, 53, 4, 44, 4, + 209, 230, 109, 176, 240, 0, 248, 94, 28, 48, 247, 252, 248, 189, 176, 1, 188, 240, 188, 1, 71, 0, 70, 192, 19, 115, + 90, 13, 19, 117, 186, 128, 181, 240, 176, 131, 144, 1, 28, 14, 28, 23, 28, 28, 240, 1, 255, 100, 48, 93, 247, 252, 248, + 181, 28, 5, 40, 0, 208, 10, 28, 48, 28, 33, 28, 58, 240, 0, 248, 85, 28, 6, 40, 0, 209, 4, 28, 40, 247, 252, 248, 155, + 32, 0, 224, 26, 28, 44, 34, 92, 52, 92, 73, 13, 28, 40, 240, 1, 248, 152, 153, 1, 28, 32, 240, 1, 255, 34, 74, 10, 96, + 44, 101, 174, 33, 0, 104, 19, 43, 0, 209, 3, 74, 7, 0, 139, 80, 157, 224, 3, 49, 1, 50, 4, 41, 4, 209, 244, 32, 1, 176, + 3, 188, 240, 188, 2, 71, 8, 19, 115, 172, 128, 19, 117, 186, 128, 181, 0, 176, 129, 34, 0, 35, 4, 247, 255, 255, 188, + 176, 1, 188, 2, 71, 8, 70, 192, 181, 0, 176, 129, 247, 255, 255, 90, 40, 0, 208, 0, 109, 128, 176, 1, 188, 2, 71, 8, + 181, 48, 176, 129, 28, 5, 108, 196, 224, 3, 28, 32, 247, 255, 251, 80, 108, 100, 44, 0, 209, 249, 104, 104, 247, 253, + 249, 154, 28, 40, 247, 252, 248, 81, 176, 1, 188, 48, 188, 1, 71, 0, 70, 192, 181, 240, 77, 213, 176, 159, 35, 0, 145, + 5, 146, 4, 112, 43, 28, 17, 28, 43, 34, 1, 144, 6, 247, 254, 250, 55, 40, 0, 209, 0, 225, 144, 35, 255, 0, 91, 92, 235, + 43, 85, 208, 0, 225, 138, 75, 203, 92, 235, 43, 170, 208, 0, 225, 133, 153, 4, 41, 0, 208, 0, 224, 172, 28, 46, 76, + 199, 54, 54, 28, 48, 28, 33, 34, 3, 240, 0, 255, 255, 40, 0, 209, 0, 224, 161, 28, 40, 48, 82, 28, 33, 34, 3, 240, 0, + 255, 246, 40, 0, 209, 0, 224, 152, 34, 223, 0, 82, 172, 14, 24, 169, 28, 32, 34, 64, 240, 1, 248, 23, 79, 184, 121, + 33, 122, 37, 122, 99, 122, 162, 122, 224, 41, 0, 208, 127, 4, 18, 2, 27, 67, 19, 67, 43, 6, 2, 67, 19, 147, 8, 41, 15, + 209, 88, 35, 228, 33, 0, 0, 91, 145, 9, 147, 3, 154, 8, 152, 6, 24, 142, 28, 49, 34, 1, 28, 59, 247, 254, 249, 235, + 40, 0, 209, 0, 225, 68, 75, 170, 153, 3, 92, 250, 92, 123, 2, 18, 4, 27, 67, 26, 35, 227, 0, 91, 92, 251, 152, 6, 67, + 26, 75, 165, 92, 251, 6, 27, 67, 26, 35, 235, 0, 91, 92, 251, 24, 181, 147, 13, 75, 162, 28, 41, 92, 251, 34, 1, 147, + 12, 35, 236, 0, 91, 92, 251, 147, 11, 75, 158, 92, 251, 147, 10, 28, 59, 247, 254, 249, 196, 40, 0, 209, 0, 225, 29, + 78, 150, 72, 154, 28, 49, 34, 3, 240, 0, 255, 157, 40, 0, 208, 60, 28, 56, 48, 82, 28, 49, 34, 3, 240, 0, 255, 149, + 40, 0, 208, 52, 154, 12, 153, 11, 2, 19, 4, 10, 67, 19, 154, 13, 153, 10, 67, 19, 6, 10, 28, 25, 67, 17, 208, 34, 154, + 9, 50, 1, 146, 9, 42, 8, 209, 172, 224, 28, 152, 6, 153, 8, 34, 1, 75, 129, 247, 254, 249, 153, 40, 0, 209, 0, 224, + 242, 72, 126, 78, 128, 48, 54, 28, 49, 34, 3, 240, 0, 255, 113, 40, 0, 208, 18, 72, 122, 28, 49, 48, 82, 34, 3, 240, + 0, 255, 105, 40, 0, 208, 10, 155, 8, 147, 4, 224, 0, 149, 4, 171, 26, 66, 156, 208, 5, 52, 16, 231, 115, 149, 4, 224, + 1, 153, 8, 145, 4, 76, 118, 77, 113, 28, 32, 28, 41, 34, 3, 240, 0, 255, 83, 40, 0, 208, 8, 28, 32, 48, 28, 28, 41, + 34, 3, 240, 0, 255, 75, 40, 0, 208, 0, 224, 194, 32, 88, 247, 251, 255, 119, 28, 7, 40, 0, 209, 0, 224, 188, 154, 6, + 73, 98, 96, 2, 125, 203, 125, 138, 2, 27, 67, 19, 99, 131, 43, 0, 209, 15, 29, 139, 127, 218, 29, 203, 127, 219, 2, + 18, 4, 27, 67, 26, 29, 75, 127, 219, 67, 26, 28, 11, 51, 8, 127, 219, 6, 27, 67, 26, 99, 130, 73, 86, 125, 11, 124, + 202, 2, 27, 67, 19, 98, 59, 43, 0, 209, 14, 28, 139, 127, 218, 28, 203, 127, 219, 2, 18, 4, 27, 67, 26, 28, 75, 127, + 219, 67, 26, 29, 11, 127, 219, 6, 27, 67, 26, 98, 58, 35, 128, 73, 74, 0, 155, 98, 187, 123, 11, 122, 202, 2, 27, 67, + 19, 123, 74, 28, 16, 67, 88, 18, 64, 144, 7, 98, 248, 154, 7, 106, 62, 2, 83, 99, 59, 123, 205, 123, 139, 2, 45, 67, + 29, 155, 4, 32, 0, 25, 93, 99, 125, 124, 10, 107, 187, 67, 83, 24, 237, 97, 189, 124, 139, 124, 74, 2, 27, 67, 19, 9, + 27, 24, 237, 98, 125, 154, 4, 28, 49, 26, 171, 28, 28, 35, 0, 27, 9, 65, 152, 75, 51, 74, 49, 240, 0, 250, 171, 97, + 56, 97, 121, 155, 4, 27, 118, 24, 246, 153, 7, 28, 48, 240, 0, 250, 8, 75, 53, 34, 2, 99, 248, 100, 58, 66, 152, 216, + 1, 35, 1, 224, 5, 75, 50, 66, 152, 216, 1, 114, 58, 224, 1, 35, 3, 114, 59, 122, 59, 43, 3, 208, 2, 35, 0, 97, 251, + 224, 30, 73, 35, 28, 11, 51, 45, 120, 26, 51, 1, 120, 27, 2, 18, 4, 27, 67, 26, 28, 11, 51, 44, 120, 27, 67, 26, 28, + 11, 51, 47, 120, 27, 49, 40, 6, 27, 67, 26, 97, 250, 120, 10, 6, 19, 43, 0, 219, 6, 35, 15, 64, 26, 107, 187, 67, 90, + 107, 123, 24, 155, 99, 123, 106, 252, 44, 16, 216, 1, 44, 15, 216, 0, 36, 16, 106, 58, 153, 4, 104, 59, 24, 138, 107, + 120, 153, 5, 146, 0, 28, 34, 247, 253, 248, 24, 105, 251, 96, 120, 100, 123, 155, 6, 104, 90, 35, 1, 8, 82, 67, 147, + 101, 123, 35, 0, 100, 187, 100, 251, 224, 0, 39, 0, 176, 31, 28, 56, 188, 240, 188, 2, 71, 8, 70, 192, 0, 0, 0, 0, 0, + 0, 2, 0, 19, 117, 186, 160, 0, 0, 1, 255, 19, 115, 172, 220, 0, 0, 1, 199, 0, 0, 1, 201, 0, 0, 1, 215, 0, 0, 1, 217, + 19, 117, 186, 214, 0, 0, 15, 244, 0, 0, 255, 244, 72, 82, 104, 0, 70, 192, 104, 0, 70, 192, 70, 135, 70, 192, 70, 192, + 28, 32, 180, 254, 247, 250, 255, 102, 40, 0, 218, 20, 72, 75, 104, 3, 104, 88, 188, 254, 70, 135, 70, 192, 70, 192, + 70, 192, 70, 192, 70, 192, 28, 32, 180, 254, 247, 250, 248, 150, 40, 0, 218, 4, 72, 67, 104, 3, 104, 152, 188, 254, + 70, 135, 188, 254, 28, 1, 72, 65, 104, 0, 70, 135, 28, 32, 180, 254, 247, 250, 248, 138, 40, 0, 218, 244, 72, 59, 104, + 3, 104, 216, 188, 254, 70, 135, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 28, 32, 180, 254, 247, 250, 248, 126, 40, + 0, 218, 228, 72, 51, 104, 3, 105, 24, 188, 254, 70, 135, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 28, 32, 180, 254, + 247, 250, 248, 114, 40, 0, 218, 212, 72, 43, 104, 3, 105, 88, 188, 254, 70, 135, 70, 192, 70, 192, 70, 192, 70, 192, + 70, 192, 28, 32, 180, 254, 180, 1, 70, 105, 247, 250, 252, 200, 188, 8, 43, 0, 209, 193, 40, 0, 218, 191, 72, 33, 104, + 3, 105, 152, 188, 254, 70, 135, 28, 32, 180, 254, 180, 1, 70, 105, 247, 250, 251, 180, 188, 8, 43, 0, 209, 177, 40, + 0, 218, 175, 72, 25, 104, 3, 105, 216, 188, 254, 70, 135, 233, 45, 64, 240, 233, 45, 0, 12, 225, 160, 0, 0, 229, 159, + 64, 80, 225, 47, 255, 20, 225, 160, 0, 0, 225, 160, 0, 0, 225, 160, 0, 0, 247, 251, 253, 134, 74, 16, 104, 17, 188, + 12, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 76, 13, 104, 36, 70, 192, 70, 167, 70, 192, 70, 192, 180, 124, 181, 0, + 247, 250, 254, 250, 188, 2, 188, 124, 71, 8, 181, 112, 176, 136, 104, 133, 28, 1, 75, 6, 71, 24, 0, 0, 19, 115, 247, + 44, 19, 115, 160, 28, 19, 115, 102, 177, 19, 115, 247, 48, 19, 115, 247, 52, 32, 16, 0, 213, 70, 192, 70, 192, 70, 192, + 70, 192, 70, 192, 70, 192, 239, 0, 0, 204, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 230, 0, 0, 16, 225, 47, + 255, 30, 230, 0, 0, 48, 225, 47, 255, 30, 230, 0, 0, 80, 225, 47, 255, 30, 230, 0, 0, 112, 225, 47, 255, 30, 230, 0, + 0, 144, 225, 47, 255, 30, 230, 0, 0, 176, 225, 47, 255, 30, 230, 0, 0, 208, 225, 47, 255, 30, 230, 0, 0, 240, 225, 47, + 255, 30, 230, 0, 1, 16, 225, 47, 255, 30, 230, 0, 1, 48, 225, 47, 255, 30, 230, 0, 1, 80, 225, 47, 255, 30, 230, 0, + 1, 112, 225, 47, 255, 30, 230, 0, 1, 144, 225, 47, 255, 30, 230, 0, 1, 176, 225, 47, 255, 30, 230, 0, 1, 208, 225, 47, + 255, 30, 230, 0, 1, 240, 225, 47, 255, 30, 230, 0, 2, 16, 225, 47, 255, 30, 230, 0, 2, 48, 225, 47, 255, 30, 230, 0, + 2, 80, 225, 47, 255, 30, 230, 0, 2, 112, 225, 47, 255, 30, 230, 0, 2, 144, 225, 47, 255, 30, 230, 0, 2, 176, 225, 47, + 255, 30, 230, 0, 2, 208, 225, 47, 255, 30, 230, 0, 2, 240, 225, 47, 255, 30, 230, 0, 3, 16, 225, 47, 255, 30, 230, 0, + 3, 48, 225, 47, 255, 30, 230, 0, 3, 80, 225, 47, 255, 30, 230, 0, 3, 112, 225, 47, 255, 30, 230, 0, 3, 144, 225, 47, + 255, 30, 230, 0, 3, 176, 225, 47, 255, 30, 230, 0, 3, 208, 225, 47, 255, 30, 230, 0, 3, 240, 225, 47, 255, 30, 230, + 0, 4, 16, 225, 47, 255, 30, 230, 0, 4, 48, 225, 47, 255, 30, 230, 0, 4, 80, 225, 47, 255, 30, 230, 0, 4, 112, 225, 47, + 255, 30, 230, 0, 4, 144, 225, 47, 255, 30, 230, 0, 4, 176, 225, 47, 255, 30, 230, 0, 4, 208, 225, 47, 255, 30, 230, + 0, 4, 240, 225, 47, 255, 30, 230, 0, 5, 16, 225, 47, 255, 30, 230, 0, 5, 48, 225, 47, 255, 30, 230, 0, 5, 80, 225, 47, + 255, 30, 230, 0, 5, 112, 225, 47, 255, 30, 230, 0, 5, 176, 225, 47, 255, 30, 230, 0, 6, 144, 225, 47, 255, 30, 230, + 0, 7, 240, 225, 47, 255, 30, 230, 0, 8, 16, 225, 47, 255, 30, 230, 0, 8, 48, 225, 47, 255, 30, 230, 0, 8, 80, 225, 47, + 255, 30, 230, 0, 9, 240, 225, 47, 255, 30, 230, 0, 10, 16, 225, 47, 255, 30, 239, 0, 0, 204, 225, 47, 255, 30, 239, + 0, 0, 205, 225, 47, 255, 30, 41, 0, 208, 52, 35, 1, 34, 0, 180, 16, 66, 136, 211, 44, 36, 1, 7, 36, 66, 161, 210, 4, + 66, 129, 210, 2, 1, 9, 1, 27, 231, 248, 0, 228, 66, 161, 210, 4, 66, 129, 210, 2, 0, 73, 0, 91, 231, 248, 66, 136, 211, + 1, 26, 64, 67, 26, 8, 76, 66, 160, 211, 2, 27, 0, 8, 92, 67, 34, 8, 140, 66, 160, 211, 2, 27, 0, 8, 156, 67, 34, 8, + 204, 66, 160, 211, 2, 27, 0, 8, 220, 67, 34, 40, 0, 208, 3, 9, 27, 208, 1, 9, 9, 231, 227, 28, 16, 188, 16, 71, 112, + 181, 2, 240, 0, 248, 94, 32, 0, 188, 6, 71, 16, 70, 192, 181, 3, 247, 255, 255, 191, 188, 14, 67, 66, 26, 137, 71, 24, + 70, 192, 41, 0, 208, 65, 180, 16, 28, 4, 64, 76, 70, 164, 35, 1, 34, 0, 41, 0, 213, 0, 66, 73, 40, 0, 213, 0, 66, 64, + 66, 136, 211, 44, 36, 1, 7, 36, 66, 161, 210, 4, 66, 129, 210, 2, 1, 9, 1, 27, 231, 248, 0, 228, 66, 161, 210, 4, 66, + 129, 210, 2, 0, 73, 0, 91, 231, 248, 66, 136, 211, 1, 26, 64, 67, 26, 8, 76, 66, 160, 211, 2, 27, 0, 8, 92, 67, 34, + 8, 140, 66, 160, 211, 2, 27, 0, 8, 156, 67, 34, 8, 204, 66, 160, 211, 2, 27, 0, 8, 220, 67, 34, 40, 0, 208, 3, 9, 27, + 208, 1, 9, 9, 231, 227, 28, 16, 70, 100, 44, 0, 213, 0, 66, 64, 188, 16, 71, 112, 181, 2, 240, 0, 248, 11, 32, 0, 188, + 6, 71, 16, 181, 3, 247, 255, 255, 179, 188, 14, 67, 66, 26, 137, 71, 24, 70, 192, 71, 112, 70, 192, 181, 240, 70, 87, + 70, 70, 180, 192, 28, 30, 75, 22, 70, 144, 28, 10, 64, 26, 64, 51, 70, 130, 28, 16, 67, 88, 12, 12, 28, 15, 12, 49, + 70, 132, 67, 74, 28, 32, 67, 88, 28, 37, 67, 77, 70, 97, 24, 130, 12, 11, 24, 210, 66, 144, 217, 2, 35, 128, 2, 91, + 24, 237, 75, 9, 70, 97, 4, 20, 12, 16, 64, 11, 24, 42, 24, 225, 70, 64, 67, 120, 70, 83, 67, 115, 24, 192, 24, 128, + 188, 12, 70, 144, 70, 154, 188, 240, 188, 4, 71, 16, 0, 0, 255, 255, 181, 48, 176, 131, 156, 6, 28, 5, 44, 0, 208, 23, + 42, 0, 208, 13, 28, 40, 148, 0, 240, 0, 248, 166, 28, 67, 209, 3, 35, 0, 96, 35, 35, 138, 96, 43, 176, 3, 188, 48, 188, + 2, 71, 8, 74, 5, 28, 40, 33, 0, 35, 1, 148, 0, 240, 0, 248, 149, 231, 237, 32, 130, 0, 64, 24, 44, 231, 227, 19, 115, + 173, 16, 181, 112, 28, 22, 74, 7, 28, 13, 176, 130, 28, 4, 28, 33, 104, 16, 147, 0, 28, 42, 28, 51, 247, 255, 255, 207, + 176, 2, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, 163, 32, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, + 135, 70, 139, 153, 16, 70, 130, 28, 22, 147, 3, 70, 136, 41, 0, 208, 68, 70, 91, 43, 0, 208, 72, 154, 3, 42, 0, 208, + 76, 156, 3, 73, 38, 70, 93, 39, 0, 104, 50, 70, 137, 224, 10, 104, 50, 70, 91, 24, 18, 96, 50, 43, 0, 208, 34, 53, 4, + 60, 1, 55, 1, 44, 0, 208, 18, 70, 73, 104, 11, 70, 65, 145, 0, 70, 80, 28, 41, 247, 255, 255, 153, 40, 0, 220, 234, + 28, 129, 209, 19, 73, 24, 104, 50, 104, 11, 24, 210, 96, 50, 44, 0, 209, 236, 159, 3, 176, 7, 28, 56, 188, 60, 70, 144, + 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 37, 0, 231, 219, 40, 0, 208, 8, 35, 0, 70, 66, 96, 19, 70, 81, 35, + 138, 39, 1, 96, 11, 66, 127, 231, 232, 96, 48, 231, 230, 34, 134, 0, 82, 68, 82, 70, 91, 70, 144, 43, 0, 209, 182, 104, + 51, 36, 1, 66, 100, 147, 5, 174, 5, 148, 3, 231, 179, 39, 0, 231, 214, 19, 115, 162, 160, 181, 112, 28, 22, 74, 7, 28, + 13, 176, 130, 28, 4, 28, 33, 104, 16, 147, 0, 28, 42, 28, 51, 247, 255, 255, 141, 176, 2, 188, 112, 188, 2, 71, 8, 70, + 192, 19, 115, 163, 32, 181, 240, 70, 87, 70, 70, 180, 192, 176, 131, 28, 15, 28, 21, 28, 30, 41, 0, 208, 98, 45, 0, + 208, 11, 46, 0, 209, 9, 36, 2, 66, 100, 176, 3, 28, 32, 188, 12, 70, 144, 70, 154, 188, 240, 188, 2, 71, 8, 76, 203, + 28, 32, 240, 1, 250, 16, 40, 1, 217, 69, 73, 201, 28, 32, 240, 1, 249, 184, 40, 0, 209, 74, 45, 0, 208, 122, 152, 10, + 104, 1, 41, 0, 209, 112, 35, 1, 120, 42, 70, 156, 42, 0, 209, 0, 224, 153, 42, 127, 217, 112, 28, 19, 59, 192, 43, 31, + 216, 0, 225, 230, 28, 19, 59, 224, 43, 15, 216, 0, 225, 158, 28, 19, 59, 240, 43, 7, 216, 0, 225, 251, 28, 19, 59, 248, + 43, 3, 217, 0, 224, 140, 152, 10, 113, 2, 41, 0, 208, 0, 225, 15, 35, 1, 96, 3, 46, 1, 217, 190, 154, 10, 104, 17, 41, + 1, 209, 0, 226, 78, 155, 10, 121, 90, 152, 10, 121, 0, 70, 128, 40, 248, 209, 0, 226, 81, 28, 19, 59, 128, 43, 63, 216, + 0, 226, 90, 36, 1, 66, 100, 231, 171, 45, 0, 208, 58, 120, 42, 96, 58, 120, 43, 28, 28, 30, 98, 65, 148, 231, 162, 175, + 1, 231, 154, 73, 162, 28, 32, 240, 1, 249, 103, 40, 0, 209, 51, 45, 0, 208, 41, 152, 10, 120, 42, 104, 3, 28, 17, 43, + 0, 209, 81, 28, 19, 59, 129, 43, 30, 217, 0, 224, 211, 153, 10, 35, 1, 113, 10, 96, 11, 46, 1, 216, 0, 231, 132, 120, + 105, 32, 2, 28, 11, 59, 64, 43, 62, 217, 2, 59, 64, 43, 124, 216, 206, 154, 10, 121, 19, 2, 27, 24, 203, 96, 59, 35, + 0, 96, 19, 28, 4, 231, 116, 152, 10, 35, 0, 54, 1, 121, 2, 70, 156, 231, 139, 36, 0, 231, 108, 152, 10, 35, 0, 96, 3, + 36, 1, 96, 58, 231, 102, 73, 134, 28, 32, 240, 1, 249, 45, 40, 0, 208, 0, 224, 172, 45, 0, 208, 238, 152, 10, 120, 41, + 104, 3, 28, 10, 43, 0, 208, 0, 225, 12, 28, 11, 59, 161, 43, 93, 216, 169, 35, 1, 113, 1, 96, 3, 46, 1, 216, 0, 231, + 74, 120, 105, 32, 2, 28, 11, 59, 161, 43, 93, 216, 151, 231, 199, 157, 10, 96, 58, 36, 0, 96, 42, 231, 64, 43, 1, 209, + 149, 32, 1, 231, 183, 28, 19, 59, 252, 43, 1, 216, 137, 155, 10, 113, 26, 41, 0, 208, 0, 225, 213, 152, 10, 35, 1, 96, + 3, 46, 1, 216, 0, 231, 43, 154, 10, 104, 17, 41, 1, 209, 0, 226, 67, 155, 10, 121, 90, 152, 10, 121, 0, 70, 128, 40, + 252, 209, 0, 226, 68, 28, 19, 59, 128, 43, 63, 217, 0, 231, 108, 155, 10, 113, 90, 41, 1, 209, 0, 226, 54, 54, 1, 46, + 2, 216, 0, 231, 16, 154, 10, 104, 17, 41, 2, 209, 0, 226, 64, 155, 10, 121, 154, 28, 19, 59, 128, 43, 63, 217, 0, 231, + 87, 152, 10, 113, 130, 41, 2, 209, 0, 226, 49, 54, 1, 46, 3, 216, 0, 230, 251, 154, 10, 104, 17, 41, 3, 209, 0, 226, + 35, 155, 10, 121, 218, 28, 19, 59, 128, 43, 63, 217, 0, 231, 66, 152, 10, 113, 194, 41, 3, 209, 0, 226, 20, 54, 1, 46, + 4, 216, 0, 230, 230, 46, 5, 209, 0, 231, 54, 70, 97, 92, 110, 28, 51, 59, 128, 43, 63, 217, 0, 231, 47, 155, 10, 121, + 90, 33, 63, 64, 10, 6, 18, 70, 96, 35, 1, 70, 148, 70, 66, 64, 19, 7, 155, 70, 98, 67, 26, 155, 10, 121, 155, 64, 11, + 4, 155, 67, 26, 155, 10, 121, 219, 64, 11, 3, 27, 67, 26, 28, 51, 64, 11, 48, 1, 1, 155, 67, 26, 92, 43, 157, 10, 64, + 11, 67, 26, 35, 0, 96, 58, 28, 68, 96, 43, 230, 185, 59, 95, 43, 15, 217, 0, 231, 12, 231, 38, 54, 1, 230, 239, 73, + 45, 28, 32, 240, 1, 248, 121, 40, 0, 208, 0, 230, 255, 45, 0, 209, 0, 225, 64, 153, 10, 120, 200, 46, 0, 208, 42, 74, + 39, 75, 39, 28, 44, 70, 172, 70, 144, 37, 0, 70, 154, 120, 33, 41, 40, 209, 0, 225, 36, 41, 40, 216, 82, 41, 27, 209, + 0, 225, 37, 41, 36, 209, 0, 225, 32, 41, 0, 209, 83, 34, 6, 0, 195, 24, 27, 24, 155, 70, 66, 92, 208, 70, 82, 92, 211, + 43, 5, 217, 0, 230, 213, 74, 25, 0, 155, 88, 211, 70, 159, 154, 10, 113, 17, 28, 98, 53, 1, 28, 20, 66, 174, 216, 219, + 153, 10, 36, 2, 96, 8, 66, 100, 230, 116, 28, 98, 70, 148, 231, 243, 152, 10, 35, 1, 96, 3, 121, 3, 120, 34, 2, 27, + 24, 210, 96, 58, 28, 108, 230, 103, 152, 10, 35, 0, 96, 3, 70, 97, 120, 11, 28, 108, 96, 59, 230, 95, 19, 115, 162, + 164, 19, 115, 172, 228, 19, 115, 172, 252, 19, 115, 172, 244, 19, 115, 172, 236, 19, 115, 173, 160, 19, 115, 173, 88, + 19, 115, 173, 64, 157, 10, 35, 0, 96, 43, 36, 0, 96, 59, 230, 73, 43, 1, 208, 0, 230, 157, 32, 1, 230, 249, 41, 66, + 209, 0, 224, 202, 41, 74, 209, 0, 224, 197, 41, 64, 209, 0, 224, 200, 28, 11, 59, 33, 43, 93, 216, 0, 224, 210, 34, + 8, 231, 165, 152, 10, 113, 2, 41, 0, 208, 0, 224, 178, 35, 1, 96, 3, 46, 1, 216, 0, 230, 40, 153, 10, 104, 11, 43, 1, + 209, 0, 225, 49, 153, 10, 121, 74, 155, 10, 121, 27, 70, 152, 43, 224, 209, 0, 225, 20, 28, 19, 59, 128, 43, 63, 217, + 0, 230, 105, 152, 10, 35, 2, 113, 66, 96, 3, 46, 2, 209, 0, 230, 15, 70, 97, 92, 108, 28, 35, 59, 128, 43, 63, 217, + 0, 230, 91, 35, 0, 96, 3, 121, 67, 73, 159, 32, 63, 70, 69, 64, 3, 3, 42, 64, 10, 1, 155, 67, 19, 28, 34, 64, 2, 28, + 25, 72, 155, 67, 17, 75, 155, 24, 10, 66, 154, 216, 0, 230, 70, 70, 100, 52, 1, 96, 57, 229, 241, 153, 10, 35, 1, 113, + 10, 96, 11, 46, 1, 216, 0, 229, 232, 70, 99, 92, 234, 28, 19, 59, 128, 43, 63, 217, 0, 230, 52, 157, 10, 121, 41, 41, + 193, 216, 0, 230, 47, 35, 0, 96, 43, 35, 63, 64, 26, 35, 31, 64, 11, 1, 155, 70, 100, 67, 26, 52, 1, 96, 58, 229, 210, + 155, 10, 113, 26, 41, 0, 209, 83, 152, 10, 35, 1, 96, 3, 46, 1, 216, 0, 229, 198, 154, 10, 104, 17, 41, 1, 209, 0, 224, + 217, 155, 10, 121, 90, 152, 10, 121, 0, 70, 128, 40, 240, 208, 100, 28, 19, 59, 128, 43, 63, 217, 0, 230, 8, 155, 10, + 113, 90, 41, 1, 208, 87, 54, 1, 46, 2, 216, 0, 229, 173, 153, 10, 104, 11, 43, 2, 209, 0, 224, 187, 153, 10, 121, 138, + 28, 19, 59, 128, 43, 63, 217, 0, 229, 244, 155, 10, 113, 154, 152, 10, 35, 3, 96, 3, 46, 3, 209, 0, 229, 153, 70, 97, + 92, 104, 28, 3, 59, 128, 43, 63, 217, 0, 229, 229, 155, 10, 121, 90, 33, 63, 70, 69, 35, 7, 64, 43, 64, 10, 157, 10, + 4, 155, 3, 18, 67, 26, 121, 171, 64, 11, 1, 155, 67, 26, 28, 3, 64, 11, 67, 26, 70, 100, 35, 0, 96, 58, 52, 1, 96, 43, + 229, 124, 54, 1, 231, 76, 54, 1, 231, 172, 34, 5, 230, 231, 34, 4, 230, 229, 34, 2, 230, 227, 34, 3, 230, 225, 34, 1, + 230, 223, 34, 0, 230, 221, 70, 99, 32, 1, 92, 234, 68, 132, 229, 173, 155, 10, 36, 1, 96, 29, 229, 99, 34, 7, 230, 210, + 42, 135, 220, 0, 229, 175, 229, 169, 54, 1, 230, 42, 152, 10, 35, 2, 96, 3, 231, 164, 42, 143, 220, 0, 229, 165, 231, + 150, 155, 10, 113, 90, 41, 1, 208, 87, 54, 1, 46, 2, 216, 0, 229, 73, 154, 10, 104, 17, 41, 2, 208, 74, 155, 10, 121, + 154, 28, 19, 59, 128, 43, 63, 217, 0, 229, 145, 152, 10, 113, 130, 41, 2, 208, 60, 54, 1, 46, 3, 216, 0, 229, 54, 153, + 10, 104, 11, 43, 3, 208, 47, 153, 10, 121, 202, 28, 19, 59, 128, 43, 63, 217, 0, 229, 126, 155, 10, 113, 218, 152, 10, + 35, 4, 96, 3, 46, 4, 209, 0, 229, 35, 121, 66, 33, 63, 70, 64, 35, 3, 64, 10, 64, 3, 152, 10, 6, 27, 4, 146, 67, 26, + 121, 131, 64, 11, 3, 27, 67, 26, 121, 195, 64, 11, 1, 155, 70, 96, 67, 26, 92, 43, 64, 11, 153, 10, 67, 26, 70, 100, + 35, 0, 96, 58, 52, 1, 96, 11, 229, 8, 42, 159, 220, 0, 229, 86, 230, 230, 70, 99, 32, 1, 92, 234, 68, 132, 231, 204, + 35, 3, 96, 3, 231, 192, 70, 99, 32, 1, 92, 234, 68, 132, 231, 177, 152, 10, 35, 2, 96, 3, 231, 164, 70, 99, 32, 1, 92, + 234, 68, 132, 230, 202, 70, 99, 32, 1, 92, 234, 68, 132, 231, 64, 70, 99, 32, 1, 92, 234, 68, 132, 231, 34, 70, 99, + 32, 1, 92, 234, 68, 132, 229, 184, 152, 10, 35, 2, 96, 3, 229, 197, 42, 131, 220, 0, 229, 41, 229, 182, 35, 4, 96, 3, + 229, 232, 70, 99, 32, 1, 92, 234, 68, 132, 229, 216, 35, 3, 96, 3, 229, 203, 70, 99, 32, 1, 92, 234, 68, 132, 229, 187, + 0, 0, 255, 255, 255, 255, 40, 0, 0, 0, 7, 255, 181, 112, 28, 14, 28, 21, 28, 4, 42, 3, 217, 32, 28, 51, 67, 3, 7, 154, + 208, 18, 120, 35, 120, 8, 66, 131, 209, 27, 30, 106, 224, 6, 52, 1, 49, 1, 120, 35, 120, 8, 58, 1, 66, 131, 209, 18, + 42, 0, 209, 246, 32, 0, 188, 112, 188, 2, 71, 8, 104, 2, 104, 11, 66, 154, 209, 4, 61, 4, 48, 4, 49, 4, 45, 3, 216, + 246, 28, 4, 45, 0, 209, 224, 231, 238, 26, 24, 231, 237, 181, 240, 28, 7, 28, 14, 28, 4, 28, 21, 28, 8, 28, 17, 42, + 15, 217, 3, 28, 51, 67, 59, 7, 154, 208, 11, 41, 0, 208, 5, 34, 0, 92, 131, 84, 163, 50, 1, 66, 138, 209, 250, 28, 56, + 188, 240, 188, 2, 71, 8, 28, 58, 28, 49, 28, 40, 104, 11, 96, 19, 104, 75, 96, 83, 104, 139, 96, 147, 104, 203, 56, + 16, 96, 211, 49, 16, 50, 16, 40, 15, 216, 242, 28, 43, 59, 16, 9, 26, 1, 17, 50, 1, 1, 18, 26, 89, 24, 176, 24, 188, + 41, 3, 217, 216, 34, 0, 88, 131, 80, 163, 50, 4, 26, 139, 43, 3, 216, 249, 31, 11, 8, 154, 0, 145, 50, 1, 0, 146, 26, + 89, 24, 128, 24, 164, 231, 200, 181, 240, 28, 15, 70, 132, 28, 12, 28, 22, 28, 5, 28, 17, 69, 188, 217, 16, 24, 184, + 69, 132, 210, 13, 42, 0, 208, 7, 24, 169, 58, 1, 56, 1, 120, 3, 57, 1, 112, 11, 58, 1, 210, 249, 70, 96, 188, 240, 188, + 2, 71, 8, 46, 15, 216, 8, 41, 0, 208, 247, 34, 0, 92, 163, 84, 171, 50, 1, 66, 138, 209, 250, 231, 240, 70, 99, 67, + 59, 7, 154, 209, 242, 70, 98, 28, 57, 28, 48, 104, 11, 96, 19, 104, 75, 96, 83, 104, 139, 96, 147, 104, 203, 56, 16, + 96, 211, 49, 16, 50, 16, 40, 15, 216, 242, 28, 51, 59, 16, 9, 26, 1, 17, 50, 1, 1, 18, 26, 89, 70, 99, 24, 190, 24, + 156, 41, 3, 217, 14, 34, 0, 88, 179, 80, 163, 50, 4, 26, 139, 43, 3, 216, 249, 31, 11, 8, 154, 0, 145, 50, 1, 0, 146, + 26, 89, 24, 182, 24, 164, 28, 37, 28, 52, 231, 196, 70, 192, 181, 240, 28, 7, 70, 140, 28, 16, 28, 57, 7, 186, 208, + 14, 40, 0, 208, 73, 70, 98, 6, 19, 56, 1, 14, 27, 34, 3, 224, 2, 40, 0, 208, 65, 56, 1, 112, 11, 49, 1, 66, 17, 209, + 248, 28, 5, 28, 10, 40, 3, 217, 46, 35, 255, 70, 98, 64, 26, 2, 19, 67, 19, 4, 26, 28, 20, 28, 14, 67, 28, 40, 15, 217, + 18, 28, 2, 28, 11, 58, 16, 96, 28, 96, 92, 96, 156, 96, 220, 51, 16, 42, 15, 216, 247, 28, 3, 59, 16, 28, 29, 9, 27, + 51, 1, 34, 15, 1, 27, 64, 21, 24, 206, 45, 3, 217, 13, 34, 0, 80, 180, 50, 4, 26, 171, 43, 3, 216, 250, 31, 43, 28, + 29, 8, 155, 51, 1, 34, 3, 0, 155, 64, 21, 24, 246, 28, 50, 45, 0, 208, 7, 70, 97, 6, 11, 14, 25, 35, 0, 84, 209, 51, + 1, 66, 157, 209, 251, 28, 56, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, + 104, 1, 176, 131, 28, 6, 41, 59, 217, 0, 224, 216, 104, 65, 41, 59, 217, 0, 224, 193, 104, 177, 41, 23, 217, 0, 224, + 171, 105, 53, 45, 11, 221, 0, 224, 152, 105, 119, 7, 185, 209, 69, 28, 56, 33, 100, 247, 255, 250, 131, 41, 0, 208, + 55, 104, 244, 34, 29, 44, 0, 220, 63, 33, 11, 70, 138, 73, 111, 35, 3, 70, 153, 70, 136, 224, 13, 41, 1, 209, 0, 224, + 203, 28, 16, 0, 139, 70, 65, 88, 90, 24, 163, 96, 243, 43, 0, 220, 75, 105, 53, 28, 2, 28, 28, 30, 105, 97, 49, 28, + 75, 209, 237, 28, 61, 70, 81, 63, 1, 70, 75, 97, 119, 97, 49, 66, 31, 208, 0, 224, 176, 28, 56, 33, 100, 247, 255, 250, + 87, 41, 0, 209, 8, 73, 93, 24, 104, 33, 200, 0, 73, 247, 255, 250, 79, 41, 0, 208, 0, 224, 161, 32, 29, 33, 11, 231, + 214, 75, 88, 33, 200, 24, 248, 0, 73, 247, 255, 250, 67, 41, 0, 208, 191, 104, 244, 34, 28, 44, 0, 221, 191, 73, 80, + 35, 0, 70, 136, 70, 138, 33, 3, 70, 155, 70, 137, 224, 16, 0, 171, 70, 65, 88, 91, 66, 163, 218, 16, 45, 1, 208, 23, + 0, 171, 70, 81, 88, 91, 53, 1, 26, 227, 96, 243, 97, 53, 45, 12, 208, 21, 28, 28, 45, 1, 209, 236, 28, 19, 66, 163, + 219, 238, 176, 3, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 1, 71, 0, 28, 19, 26, 227, 53, 1, 96, + 243, 97, 53, 45, 12, 209, 233, 28, 60, 70, 91, 55, 1, 70, 73, 97, 119, 97, 51, 66, 15, 209, 17, 28, 56, 33, 100, 247, + 255, 250, 3, 41, 0, 209, 7, 75, 53, 33, 200, 24, 224, 0, 73, 247, 255, 249, 251, 41, 0, 209, 3, 34, 29, 104, 244, 105, + 53, 231, 208, 34, 28, 104, 244, 105, 53, 231, 204, 28, 41, 70, 104, 34, 12, 240, 1, 253, 116, 105, 119, 155, 0, 153, + 1, 24, 255, 97, 119, 97, 49, 41, 0, 219, 62, 28, 13, 231, 88, 34, 24, 70, 104, 240, 1, 253, 102, 104, 242, 155, 0, 24, + 210, 155, 1, 96, 242, 96, 179, 43, 0, 219, 0, 231, 70, 51, 24, 96, 179, 30, 83, 96, 243, 231, 65, 70, 104, 34, 60, 240, + 1, 253, 84, 104, 177, 155, 0, 24, 201, 155, 1, 96, 177, 96, 115, 43, 0, 219, 0, 231, 49, 51, 60, 96, 115, 30, 75, 96, + 179, 28, 25, 231, 43, 70, 104, 34, 60, 240, 1, 253, 65, 104, 113, 155, 0, 24, 201, 155, 1, 96, 113, 96, 51, 43, 0, 219, + 0, 231, 26, 51, 60, 96, 51, 30, 75, 96, 115, 28, 25, 231, 20, 32, 28, 33, 11, 231, 52, 28, 16, 231, 53, 28, 10, 50, + 12, 30, 123, 97, 50, 97, 115, 28, 21, 28, 31, 231, 19, 70, 192, 19, 115, 174, 24, 0, 0, 7, 107, 0, 0, 7, 108, 0, 0, + 7, 109, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 131, 28, 6, 240, 1, 253, 52, 70, 130, 28, 48, 247, + 255, 254, 228, 104, 49, 104, 178, 104, 115, 105, 48, 145, 1, 73, 149, 70, 145, 70, 155, 104, 242, 0, 131, 88, 91, 58, + 1, 24, 213, 40, 1, 220, 0, 224, 236, 105, 119, 7, 188, 209, 0, 224, 134, 75, 142, 24, 250, 75, 142, 97, 245, 66, 154, + 217, 0, 224, 141, 47, 70, 220, 0, 224, 149, 33, 3, 36, 70, 70, 136, 224, 19, 28, 32, 33, 100, 247, 255, 249, 96, 41, + 0, 209, 7, 75, 134, 33, 200, 24, 224, 0, 73, 247, 255, 249, 88, 41, 0, 209, 8, 35, 183, 0, 91, 52, 1, 24, 237, 66, 167, + 221, 7, 70, 66, 66, 20, 208, 232, 75, 127, 52, 1, 24, 237, 66, 167, 220, 247, 29, 40, 33, 7, 247, 255, 249, 68, 97, + 177, 41, 0, 218, 0, 224, 165, 70, 74, 1, 19, 26, 155, 1, 25, 70, 92, 26, 201, 1, 35, 27, 27, 0, 155, 1, 9, 24, 201, + 154, 1, 0, 107, 25, 91, 24, 137, 1, 26, 26, 210, 1, 19, 26, 155, 1, 219, 106, 53, 24, 201, 70, 136, 45, 0, 221, 0, 37, + 1, 75, 108, 104, 27, 43, 0, 209, 0, 224, 142, 75, 104, 70, 84, 24, 248, 104, 99, 66, 131, 208, 0, 224, 130, 70, 81, + 106, 12, 107, 139, 27, 24, 105, 202, 107, 207, 70, 164, 69, 128, 219, 0, 224, 147, 27, 209, 70, 82, 104, 19, 43, 0, + 209, 0, 224, 162, 70, 67, 23, 218, 70, 68, 15, 203, 66, 140, 65, 90, 35, 1, 69, 128, 219, 0, 224, 164, 28, 20, 64, 28, + 45, 0, 219, 106, 28, 35, 64, 107, 43, 1, 209, 102, 70, 97, 27, 205, 44, 0, 209, 0, 66, 109, 104, 51, 25, 91, 96, 51, + 28, 48, 247, 255, 254, 75, 68, 168, 224, 89, 28, 56, 33, 100, 247, 255, 248, 231, 41, 0, 208, 93, 53, 1, 75, 71, 24, + 250, 75, 71, 97, 245, 66, 154, 216, 0, 231, 113, 32, 1, 66, 64, 176, 3, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, + 188, 240, 188, 2, 71, 8, 47, 70, 209, 0, 231, 134, 47, 69, 208, 98, 33, 3, 36, 69, 70, 136, 224, 19, 28, 32, 33, 100, + 247, 255, 248, 197, 41, 0, 209, 7, 75, 57, 33, 200, 24, 224, 0, 73, 247, 255, 248, 189, 41, 0, 209, 8, 35, 183, 0, 91, + 60, 1, 26, 237, 66, 167, 218, 7, 70, 66, 66, 20, 208, 232, 75, 49, 60, 1, 26, 237, 66, 167, 219, 247, 7, 188, 209, 64, + 28, 56, 33, 100, 247, 255, 248, 167, 41, 0, 208, 50, 35, 183, 0, 91, 26, 237, 29, 40, 33, 7, 247, 255, 248, 158, 97, + 177, 41, 0, 219, 0, 231, 89, 29, 203, 97, 179, 231, 86, 240, 0, 248, 75, 40, 0, 208, 0, 231, 119, 28, 44, 44, 1, 208, + 22, 70, 82, 106, 19, 70, 65, 24, 200, 98, 52, 231, 173, 105, 119, 231, 20, 73, 27, 24, 120, 33, 200, 0, 73, 247, 255, + 248, 129, 41, 0, 208, 0, 231, 11, 53, 1, 231, 151, 27, 219, 69, 152, 219, 230, 231, 103, 70, 82, 107, 211, 70, 65, 24, + 200, 98, 52, 231, 150, 73, 16, 24, 120, 33, 200, 0, 73, 247, 255, 248, 108, 41, 0, 208, 196, 75, 13, 26, 237, 231, 196, + 70, 67, 23, 218, 70, 68, 15, 203, 66, 140, 65, 90, 35, 1, 69, 128, 218, 4, 28, 20, 67, 28, 231, 92, 35, 0, 231, 88, + 35, 0, 231, 248, 70, 192, 19, 115, 173, 232, 0, 0, 39, 16, 0, 0, 78, 32, 0, 0, 7, 108, 0, 0, 1, 109, 19, 117, 188, 160, + 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 133, 28, 6, 240, 1, 251, 234, 75, 92, 70, 130, 66, 158, 220, + 0, 224, 143, 73, 91, 75, 91, 24, 117, 74, 91, 33, 100, 96, 70, 66, 73, 24, 240, 24, 180, 247, 254, 255, 230, 0, 235, + 25, 91, 73, 87, 0, 219, 25, 91, 16, 164, 0, 154, 24, 36, 24, 112, 33, 200, 24, 155, 0, 73, 24, 228, 247, 254, 255, 215, + 33, 100, 24, 36, 28, 48, 247, 255, 248, 28, 145, 1, 33, 200, 28, 48, 0, 73, 247, 255, 248, 22, 66, 74, 65, 74, 0, 83, + 24, 155, 1, 27, 147, 3, 35, 3, 64, 30, 75, 72, 34, 0, 145, 2, 147, 0, 70, 161, 70, 87, 70, 144, 70, 179, 122, 59, 43, + 74, 208, 89, 43, 68, 208, 107, 70, 90, 42, 0, 208, 77, 155, 3, 152, 0, 24, 198, 104, 248, 40, 1, 221, 110, 28, 49, 70, + 77, 34, 1, 201, 8, 50, 1, 24, 237, 66, 130, 219, 250, 33, 1, 26, 67, 0, 156, 29, 40, 33, 7, 247, 254, 255, 233, 105, + 123, 26, 88, 212, 90, 105, 58, 0, 211, 26, 155, 59, 7, 24, 24, 89, 51, 66, 152, 219, 7, 31, 196, 33, 7, 26, 192, 247, + 254, 255, 73, 0, 195, 26, 192, 25, 0, 25, 64, 105, 187, 106, 57, 24, 201, 0, 67, 24, 27, 1, 26, 26, 210, 1, 19, 26, + 155, 34, 1, 1, 219, 68, 144, 24, 201, 70, 67, 97, 249, 55, 28, 43, 2, 209, 188, 70, 80, 105, 194, 107, 131, 33, 1, 66, + 154, 219, 0, 33, 0, 70, 82, 96, 17, 32, 1, 176, 5, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, + 8, 155, 1, 43, 0, 208, 174, 35, 48, 231, 173, 32, 0, 231, 239, 70, 88, 105, 121, 40, 0, 208, 19, 155, 2, 43, 0, 209, + 20, 34, 59, 15, 203, 32, 0, 66, 138, 65, 67, 34, 1, 64, 83, 6, 27, 14, 26, 70, 72, 24, 67, 24, 152, 231, 191, 105, 123, + 70, 73, 24, 200, 231, 187, 154, 1, 42, 0, 209, 235, 231, 231, 34, 0, 231, 241, 48, 7, 231, 162, 70, 77, 36, 0, 231, + 152, 0, 0, 7, 177, 255, 255, 248, 78, 255, 255, 248, 147, 255, 255, 248, 79, 255, 255, 249, 191, 19, 115, 174, 72, 181, + 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 129, 70, 147, 70, 129, 28, 15, 240, 1, 251, 24, 70, 73, 104, 12, + 70, 130, 73, 200, 28, 32, 247, 254, 255, 29, 73, 198, 70, 128, 28, 32, 247, 254, 255, 98, 28, 14, 41, 0, 218, 17, 74, + 194, 67, 200, 24, 141, 28, 17, 247, 254, 254, 201, 0, 67, 24, 27, 1, 26, 26, 210, 70, 68, 1, 19, 60, 1, 26, 155, 26, + 36, 1, 219, 70, 160, 24, 238, 75, 186, 66, 158, 221, 17, 75, 185, 24, 245, 28, 40, 73, 182, 247, 254, 254, 180, 0, 66, + 24, 18, 1, 19, 26, 155, 70, 68, 1, 26, 52, 1, 26, 155, 24, 36, 1, 219, 70, 160, 24, 238, 33, 225, 1, 9, 28, 48, 247, + 254, 254, 233, 33, 225, 96, 184, 1, 9, 28, 48, 247, 254, 255, 45, 28, 12, 28, 8, 33, 60, 247, 254, 254, 222, 33, 60, + 96, 120, 28, 32, 247, 254, 255, 35, 70, 64, 96, 57, 48, 4, 33, 7, 247, 254, 255, 29, 70, 69, 97, 185, 41, 0, 218, 0, + 224, 199, 70, 68, 44, 0, 218, 0, 224, 166, 33, 3, 76, 159, 78, 159, 70, 136, 224, 12, 28, 32, 33, 100, 247, 254, 255, + 11, 41, 0, 208, 9, 34, 1, 0, 147, 88, 243, 66, 157, 219, 15, 52, 1, 26, 237, 70, 66, 66, 20, 208, 239, 33, 200, 28, + 32, 0, 73, 247, 254, 254, 250, 66, 74, 65, 74, 0, 147, 88, 243, 66, 157, 218, 239, 73, 145, 24, 99, 97, 123, 0, 83, + 24, 155, 74, 144, 1, 27, 24, 210, 35, 0, 97, 253, 97, 59, 104, 19, 70, 144, 66, 157, 219, 8, 28, 17, 49, 4, 34, 0, 50, + 1, 97, 58, 26, 237, 201, 8, 66, 171, 221, 249, 28, 107, 70, 90, 96, 251, 42, 0, 208, 11, 35, 0, 98, 59, 176, 1, 28, + 56, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 240, 1, 248, 149, 75, 126, 104, 27, 43, 0, + 209, 119, 70, 90, 98, 58, 70, 84, 106, 37, 33, 225, 28, 40, 1, 9, 247, 254, 254, 188, 28, 12, 28, 8, 33, 60, 247, 254, + 254, 183, 104, 59, 26, 94, 28, 32, 33, 60, 96, 62, 247, 254, 254, 102, 104, 124, 33, 225, 26, 36, 1, 9, 28, 40, 96, + 124, 247, 254, 254, 94, 104, 189, 26, 41, 28, 13, 96, 185, 46, 59, 220, 0, 224, 140, 28, 51, 28, 98, 59, 60, 96, 122, + 96, 59, 28, 20, 44, 59, 221, 124, 28, 35, 28, 77, 59, 60, 96, 189, 96, 123, 45, 23, 221, 89, 105, 251, 51, 1, 97, 251, + 105, 187, 51, 1, 97, 187, 43, 6, 221, 1, 35, 0, 97, 187, 104, 251, 28, 90, 28, 43, 59, 24, 105, 56, 96, 187, 96, 250, + 0, 131, 70, 68, 89, 25, 66, 138, 221, 11, 26, 83, 96, 251, 28, 67, 97, 59, 43, 12, 209, 5, 105, 123, 34, 0, 51, 1, 97, + 58, 97, 123, 97, 250, 240, 1, 248, 60, 231, 151, 35, 3, 76, 75, 78, 76, 70, 152, 224, 11, 28, 32, 33, 100, 247, 254, + 254, 100, 41, 0, 208, 9, 34, 1, 0, 147, 88, 243, 24, 237, 212, 0, 231, 103, 60, 1, 70, 65, 66, 12, 208, 239, 33, 200, + 28, 32, 0, 73, 247, 254, 254, 83, 66, 74, 65, 74, 231, 238, 29, 203, 97, 187, 231, 52, 70, 81, 104, 75, 66, 163, 208, + 4, 28, 32, 247, 255, 253, 252, 40, 0, 208, 72, 70, 82, 104, 19, 43, 0, 208, 53, 70, 75, 104, 24, 105, 211, 66, 152, + 218, 67, 35, 0, 98, 59, 231, 116, 45, 0, 218, 197, 105, 251, 59, 1, 97, 251, 105, 187, 59, 1, 97, 187, 43, 0, 219, 62, + 104, 251, 28, 42, 59, 1, 50, 24, 96, 251, 96, 186, 43, 0, 209, 181, 105, 59, 59, 1, 97, 59, 43, 0, 219, 52, 0, 155, + 70, 68, 89, 27, 96, 251, 231, 171, 44, 0, 218, 133, 28, 35, 30, 77, 51, 60, 96, 189, 96, 123, 231, 127, 46, 0, 219, + 0, 231, 117, 28, 51, 30, 98, 51, 60, 96, 122, 96, 59, 28, 20, 231, 110, 70, 76, 70, 81, 104, 32, 105, 203, 66, 152, + 218, 15, 107, 139, 34, 1, 66, 152, 219, 0, 34, 0, 98, 58, 42, 1, 208, 9, 231, 55, 35, 1, 66, 91, 98, 59, 231, 51, 107, + 147, 66, 152, 218, 184, 35, 1, 98, 59, 70, 83, 107, 221, 231, 45, 35, 6, 97, 187, 231, 189, 35, 11, 97, 59, 105, 123, + 30, 92, 97, 124, 7, 161, 209, 26, 28, 32, 33, 100, 247, 254, 253, 225, 41, 0, 208, 20, 35, 183, 0, 91, 97, 251, 105, + 59, 231, 184, 0, 1, 81, 128, 0, 1, 81, 127, 255, 254, 174, 128, 0, 0, 7, 178, 19, 115, 174, 168, 255, 255, 248, 148, + 19, 115, 174, 72, 19, 117, 188, 160, 33, 200, 28, 32, 0, 73, 247, 254, 253, 197, 66, 75, 65, 75, 74, 1, 24, 155, 231, + 226, 0, 0, 1, 109, 181, 112, 28, 4, 28, 13, 7, 129, 209, 18, 104, 34, 78, 13, 25, 147, 67, 147, 74, 13, 66, 19, 209, + 11, 28, 17, 48, 4, 104, 2, 78, 9, 25, 147, 67, 147, 66, 11, 208, 248, 120, 3, 43, 0, 208, 3, 48, 1, 120, 3, 43, 0, 209, + 251, 28, 41, 240, 0, 248, 152, 28, 32, 188, 112, 188, 2, 71, 8, 254, 254, 254, 255, 128, 128, 128, 128, 181, 112, 6, + 9, 14, 9, 41, 0, 208, 42, 7, 131, 208, 14, 120, 3, 43, 0, 208, 81, 66, 153, 208, 70, 34, 3, 224, 4, 120, 3, 43, 0, 208, + 74, 66, 153, 208, 63, 48, 1, 66, 16, 209, 247, 2, 11, 67, 11, 4, 26, 28, 21, 78, 33, 104, 2, 67, 29, 76, 33, 25, 147, + 67, 147, 66, 35, 208, 7, 224, 53, 48, 4, 104, 2, 78, 28, 25, 147, 67, 147, 66, 35, 209, 46, 64, 106, 25, 147, 67, 147, + 66, 35, 208, 243, 224, 40, 7, 132, 208, 10, 120, 3, 43, 0, 208, 29, 34, 3, 224, 2, 120, 3, 43, 0, 208, 24, 48, 1, 66, + 16, 209, 249, 104, 2, 78, 15, 25, 147, 67, 147, 74, 15, 66, 19, 209, 7, 28, 17, 48, 4, 104, 2, 76, 11, 25, 19, 67, 147, + 66, 11, 208, 248, 120, 3, 43, 0, 208, 3, 48, 1, 120, 3, 43, 0, 209, 251, 188, 112, 188, 2, 71, 8, 66, 153, 208, 250, + 48, 1, 120, 3, 43, 0, 209, 249, 32, 0, 231, 244, 254, 254, 254, 255, 128, 128, 128, 128, 181, 48, 28, 11, 67, 3, 7, + 154, 209, 28, 104, 2, 104, 11, 66, 154, 209, 24, 76, 16, 25, 19, 67, 147, 74, 15, 66, 19, 209, 11, 28, 20, 48, 4, 49, + 4, 104, 2, 104, 11, 66, 154, 209, 11, 77, 9, 25, 83, 67, 147, 66, 35, 208, 244, 32, 0, 224, 9, 120, 10, 66, 154, 209, + 5, 48, 1, 49, 1, 120, 3, 43, 0, 209, 247, 120, 10, 26, 152, 188, 48, 188, 2, 71, 8, 254, 254, 254, 255, 128, 128, 128, + 128, 181, 112, 28, 11, 67, 3, 28, 5, 7, 154, 209, 14, 104, 10, 76, 12, 25, 19, 76, 12, 67, 147, 66, 35, 209, 7, 192, + 4, 49, 4, 104, 10, 78, 7, 25, 147, 67, 147, 66, 35, 208, 247, 34, 0, 92, 139, 84, 131, 50, 1, 43, 0, 209, 250, 28, 40, + 188, 112, 188, 2, 71, 8, 70, 192, 254, 254, 254, 255, 128, 128, 128, 128, 181, 48, 28, 4, 7, 129, 208, 10, 120, 3, 43, + 0, 208, 33, 34, 3, 224, 2, 120, 3, 43, 0, 208, 24, 48, 1, 66, 16, 209, 249, 104, 2, 77, 13, 25, 83, 67, 147, 74, 13, + 66, 19, 209, 11, 28, 17, 48, 4, 104, 2, 77, 9, 25, 83, 67, 147, 66, 11, 208, 248, 120, 3, 43, 0, 208, 3, 48, 1, 120, + 3, 43, 0, 209, 251, 27, 0, 188, 48, 188, 2, 71, 8, 32, 0, 231, 250, 70, 192, 254, 254, 254, 255, 128, 128, 128, 128, + 181, 240, 70, 87, 70, 78, 70, 69, 180, 224, 28, 6, 28, 13, 42, 0, 208, 59, 75, 31, 104, 27, 32, 1, 30, 84, 70, 156, + 70, 128, 224, 8, 44, 0, 208, 28, 41, 0, 208, 26, 42, 0, 208, 24, 54, 1, 53, 1, 60, 1, 120, 49, 70, 98, 24, 83, 120, + 91, 70, 64, 28, 15, 66, 3, 208, 0, 55, 32, 120, 42, 70, 99, 24, 155, 120, 88, 70, 67, 70, 145, 66, 24, 208, 2, 32, 32, + 24, 128, 70, 129, 69, 79, 208, 224, 70, 96, 24, 67, 120, 91, 7, 216, 213, 0, 49, 32, 28, 16, 70, 98, 24, 19, 120, 91, + 7, 218, 212, 7, 26, 8, 188, 28, 70, 144, 70, 153, 70, 162, 188, 240, 188, 2, 71, 8, 48, 32, 231, 245, 32, 0, 231, 244, + 70, 192, 19, 115, 162, 220, 181, 112, 28, 4, 42, 0, 208, 65, 28, 11, 67, 3, 7, 152, 209, 44, 28, 32, 28, 13, 42, 3, + 217, 38, 104, 36, 104, 11, 66, 156, 209, 34, 58, 4, 42, 0, 208, 50, 73, 27, 24, 99, 73, 27, 67, 163, 66, 11, 209, 44, + 28, 12, 224, 11, 104, 1, 104, 43, 66, 153, 209, 19, 58, 4, 42, 0, 208, 35, 78, 19, 25, 139, 67, 139, 66, 35, 209, 30, + 48, 4, 53, 4, 42, 3, 216, 239, 28, 4, 28, 41, 42, 0, 209, 5, 120, 3, 120, 40, 26, 24, 224, 19, 28, 4, 28, 41, 120, 35, + 120, 8, 58, 1, 66, 152, 208, 9, 231, 245, 40, 0, 208, 8, 52, 1, 49, 1, 120, 35, 120, 8, 66, 152, 209, 237, 58, 1, 42, + 0, 209, 244, 32, 0, 188, 112, 188, 2, 71, 8, 254, 254, 254, 255, 128, 128, 128, 128, 181, 240, 28, 11, 67, 3, 28, 6, + 28, 20, 7, 154, 209, 1, 44, 3, 216, 29, 28, 50, 44, 0, 208, 22, 120, 11, 30, 96, 112, 19, 50, 1, 43, 0, 208, 8, 49, + 1, 40, 0, 208, 13, 120, 11, 56, 1, 112, 19, 50, 1, 43, 0, 209, 246, 40, 0, 208, 5, 35, 0, 33, 0, 84, 209, 51, 1, 66, + 152, 209, 251, 28, 48, 188, 240, 188, 2, 71, 8, 77, 7, 104, 10, 79, 7, 25, 211, 67, 147, 66, 43, 209, 4, 60, 4, 192, + 4, 49, 4, 44, 3, 216, 244, 28, 2, 231, 212, 70, 192, 128, 128, 128, 128, 254, 254, 254, 255, 181, 0, 28, 2, 41, 0, 208, + 14, 120, 3, 43, 0, 208, 11, 57, 1, 224, 3, 120, 3, 57, 1, 43, 0, 208, 2, 48, 1, 41, 0, 209, 248, 26, 128, 188, 2, 71, + 8, 32, 0, 231, 251, 70, 192, 181, 48, 28, 13, 120, 1, 41, 0, 208, 19, 120, 44, 44, 0, 208, 20, 66, 140, 208, 15, 28, + 42, 224, 1, 66, 153, 208, 11, 50, 1, 120, 19, 43, 0, 209, 249, 48, 1, 120, 1, 41, 0, 209, 239, 120, 19, 43, 0, 209, + 0, 32, 0, 188, 48, 188, 2, 71, 8, 48, 1, 120, 1, 28, 42, 41, 0, 209, 227, 231, 242, 70, 192, 181, 48, 176, 129, 28, + 3, 28, 13, 41, 0, 208, 14, 36, 0, 224, 1, 28, 67, 28, 4, 28, 24, 28, 41, 247, 255, 254, 2, 40, 0, 209, 247, 176, 1, + 28, 32, 188, 48, 188, 2, 71, 8, 33, 0, 247, 255, 253, 248, 28, 4, 231, 245, 181, 48, 76, 160, 120, 35, 176, 129, 28, + 5, 43, 67, 209, 2, 120, 99, 43, 0, 208, 42, 73, 156, 28, 32, 247, 255, 254, 74, 40, 0, 209, 12, 28, 40, 33, 1, 240, + 0, 255, 40, 28, 5, 45, 255, 216, 44, 28, 43, 59, 65, 43, 25, 216, 86, 53, 32, 224, 33, 73, 148, 28, 32, 247, 255, 254, + 55, 40, 0, 208, 47, 73, 146, 28, 32, 247, 255, 254, 49, 40, 0, 209, 5, 28, 40, 33, 3, 240, 0, 255, 15, 28, 5, 231, 229, + 73, 141, 28, 32, 247, 255, 254, 37, 40, 0, 208, 223, 45, 254, 216, 7, 75, 138, 104, 27, 25, 91, 120, 91, 28, 40, 7, + 218, 212, 26, 28, 5, 176, 1, 28, 40, 188, 48, 188, 2, 71, 8, 75, 132, 66, 157, 216, 19, 74, 132, 24, 171, 43, 46, 217, + 3, 58, 50, 24, 171, 43, 4, 216, 42, 7, 235, 212, 237, 53, 1, 231, 235, 28, 40, 33, 2, 240, 0, 254, 229, 28, 5, 231, + 187, 48, 32, 231, 226, 75, 123, 66, 157, 216, 64, 74, 122, 24, 171, 43, 26, 217, 98, 74, 121, 24, 171, 43, 22, 216, + 1, 7, 235, 213, 232, 74, 119, 24, 171, 43, 111, 216, 0, 224, 173, 75, 118, 66, 157, 209, 206, 77, 117, 231, 204, 59, + 127, 43, 30, 217, 165, 45, 181, 209, 199, 37, 239, 0, 173, 231, 196, 58, 24, 24, 171, 43, 44, 217, 208, 58, 148, 24, + 171, 43, 16, 217, 204, 58, 26, 24, 171, 43, 38, 217, 200, 58, 42, 24, 171, 43, 16, 217, 196, 74, 105, 24, 171, 43, 14, + 217, 49, 75, 104, 24, 234, 75, 104, 66, 154, 217, 44, 74, 104, 24, 171, 43, 127, 216, 0, 225, 38, 35, 136, 0, 155, 66, + 157, 209, 162, 37, 207, 0, 109, 231, 159, 75, 99, 66, 157, 216, 39, 74, 98, 24, 171, 43, 15, 217, 114, 74, 97, 24, 171, + 43, 31, 216, 0, 231, 111, 74, 96, 24, 171, 43, 32, 217, 159, 58, 42, 24, 171, 43, 52, 217, 155, 58, 70, 24, 171, 43, + 36, 217, 151, 35, 159, 0, 219, 66, 157, 208, 147, 74, 89, 24, 171, 43, 12, 217, 0, 231, 126, 7, 235, 212, 0, 231, 123, + 53, 1, 231, 121, 75, 85, 66, 157, 208, 153, 53, 32, 231, 116, 75, 83, 66, 157, 216, 25, 74, 83, 24, 171, 43, 14, 216, + 0, 231, 124, 74, 81, 24, 171, 43, 148, 216, 0, 231, 119, 58, 160, 24, 171, 43, 88, 216, 0, 231, 114, 74, 77, 24, 171, + 43, 37, 216, 0, 224, 219, 75, 76, 66, 157, 208, 0, 231, 89, 77, 75, 231, 87, 75, 75, 66, 157, 217, 0, 224, 176, 74, + 74, 24, 171, 43, 7, 217, 39, 58, 16, 24, 171, 43, 5, 217, 35, 58, 16, 24, 171, 43, 7, 217, 31, 58, 16, 24, 171, 43, + 7, 217, 27, 58, 16, 24, 171, 43, 5, 217, 23, 58, 32, 24, 171, 43, 7, 217, 19, 58, 32, 24, 171, 43, 7, 217, 15, 58, 16, + 24, 171, 43, 7, 217, 11, 58, 16, 24, 171, 43, 7, 217, 7, 74, 57, 24, 171, 43, 6, 217, 0, 224, 180, 7, 235, 212, 0, 231, + 39, 61, 8, 231, 37, 53, 80, 231, 35, 74, 52, 0, 155, 88, 211, 70, 159, 72, 51, 231, 28, 72, 51, 231, 26, 72, 51, 231, + 24, 32, 240, 0, 128, 231, 21, 72, 49, 231, 19, 72, 49, 231, 17, 72, 49, 231, 15, 72, 49, 231, 13, 32, 243, 0, 128, 231, + 10, 72, 48, 231, 8, 72, 48, 231, 6, 72, 48, 231, 4, 32, 235, 0, 128, 231, 1, 32, 238, 0, 128, 230, 254, 72, 45, 230, + 252, 70, 192, 19, 115, 162, 164, 19, 115, 172, 236, 19, 115, 172, 252, 19, 115, 172, 244, 19, 115, 172, 228, 19, 115, + 162, 220, 0, 0, 2, 255, 255, 255, 255, 0, 0, 0, 3, 255, 255, 255, 252, 111, 255, 255, 252, 40, 255, 255, 252, 122, 0, + 0, 3, 69, 0, 0, 3, 185, 255, 255, 254, 199, 255, 255, 254, 51, 0, 0, 144, 14, 255, 255, 254, 136, 0, 0, 4, 255, 255, + 255, 252, 0, 255, 255, 251, 240, 255, 255, 251, 160, 255, 255, 251, 63, 0, 0, 3, 162, 0, 0, 30, 255, 255, 255, 251, + 0, 255, 255, 226, 0, 255, 255, 250, 207, 0, 0, 30, 155, 0, 0, 30, 97, 0, 0, 31, 255, 255, 255, 224, 248, 255, 255, 224, + 167, 19, 115, 174, 176, 0, 0, 3, 181, 0, 0, 3, 193, 0, 0, 3, 186, 0, 0, 3, 198, 0, 0, 3, 178, 0, 0, 3, 143, 0, 0, 3, + 205, 0, 0, 3, 175, 0, 0, 3, 174, 0, 0, 3, 173, 0, 0, 3, 195, 74, 71, 24, 171, 43, 15, 217, 24, 74, 70, 24, 171, 43, + 25, 217, 22, 74, 69, 24, 171, 43, 25, 216, 0, 230, 113, 74, 68, 24, 171, 43, 37, 217, 21, 75, 67, 66, 157, 208, 22, + 75, 66, 66, 157, 208, 17, 75, 66, 66, 157, 208, 0, 230, 135, 37, 229, 230, 133, 53, 16, 230, 131, 53, 26, 230, 129, + 53, 48, 230, 127, 74, 61, 0, 155, 88, 211, 70, 159, 53, 40, 230, 121, 37, 107, 230, 119, 77, 58, 230, 117, 74, 58, 24, + 171, 43, 68, 217, 0, 230, 112, 74, 56, 0, 155, 88, 211, 70, 159, 72, 55, 230, 105, 72, 55, 230, 103, 72, 55, 230, 101, + 28, 43, 59, 126, 43, 0, 209, 0, 230, 97, 28, 29, 230, 95, 72, 52, 230, 92, 28, 43, 59, 112, 231, 245, 28, 43, 59, 100, + 231, 242, 72, 49, 230, 84, 28, 43, 59, 86, 231, 237, 72, 47, 230, 79, 72, 47, 230, 77, 28, 43, 59, 74, 231, 230, 28, + 43, 59, 8, 231, 227, 28, 168, 230, 69, 72, 43, 230, 67, 72, 43, 230, 65, 72, 43, 230, 63, 32, 162, 0, 128, 230, 60, + 72, 42, 230, 58, 32, 160, 0, 128, 230, 55, 72, 40, 230, 53, 72, 40, 230, 51, 72, 40, 230, 49, 32, 154, 0, 128, 230, + 46, 72, 39, 230, 44, 72, 39, 230, 42, 32, 152, 0, 128, 230, 39, 72, 37, 230, 37, 72, 37, 230, 35, 72, 37, 230, 33, 72, + 37, 230, 31, 72, 37, 230, 29, 32, 149, 0, 128, 230, 26, 72, 36, 230, 24, 32, 115, 230, 22, 28, 104, 230, 20, 32, 255, + 230, 18, 70, 192, 255, 255, 222, 160, 255, 255, 219, 74, 255, 255, 0, 223, 255, 254, 252, 0, 0, 0, 33, 38, 0, 0, 33, + 42, 0, 0, 33, 43, 19, 115, 176, 112, 0, 0, 3, 201, 255, 255, 224, 72, 19, 115, 178, 112, 0, 0, 1, 191, 0, 0, 1, 149, + 0, 0, 31, 243, 0, 0, 31, 229, 0, 0, 31, 195, 0, 0, 3, 185, 0, 0, 31, 179, 0, 0, 2, 146, 0, 0, 2, 139, 0, 0, 2, 138, + 0, 0, 2, 131, 0, 0, 2, 117, 0, 0, 2, 114, 0, 0, 2, 111, 0, 0, 2, 105, 0, 0, 2, 99, 0, 0, 2, 91, 0, 0, 2, 89, 0, 0, 1, + 221, 0, 0, 2, 87, 0, 0, 2, 86, 0, 0, 2, 83, 181, 48, 76, 169, 120, 35, 176, 129, 28, 5, 43, 67, 209, 2, 120, 99, 43, + 0, 208, 48, 73, 165, 28, 32, 247, 255, 251, 220, 40, 0, 209, 18, 28, 40, 33, 1, 240, 0, 252, 186, 28, 5, 45, 255, 216, + 54, 45, 181, 208, 104, 28, 43, 59, 224, 43, 30, 216, 88, 61, 32, 176, 1, 28, 40, 188, 48, 188, 2, 71, 8, 73, 154, 28, + 32, 247, 255, 251, 195, 40, 0, 208, 29, 73, 152, 28, 32, 247, 255, 251, 189, 40, 0, 209, 5, 28, 40, 33, 3, 240, 0, 252, + 155, 28, 5, 231, 223, 73, 147, 28, 32, 247, 255, 251, 177, 40, 0, 208, 217, 45, 254, 216, 224, 75, 144, 104, 27, 25, + 91, 120, 91, 28, 40, 7, 154, 213, 0, 56, 32, 28, 5, 231, 214, 28, 40, 33, 2, 240, 0, 252, 131, 28, 5, 45, 255, 217, + 200, 75, 136, 66, 157, 216, 51, 74, 136, 24, 171, 43, 46, 217, 40, 58, 50, 24, 171, 43, 4, 217, 36, 58, 24, 24, 171, + 43, 44, 217, 32, 58, 148, 24, 171, 43, 16, 217, 28, 58, 26, 24, 171, 43, 38, 217, 24, 58, 42, 24, 171, 43, 16, 217, + 20, 74, 125, 24, 171, 43, 14, 217, 4, 58, 148, 24, 171, 43, 14, 217, 0, 225, 65, 7, 235, 212, 169, 61, 1, 231, 167, + 51, 127, 43, 25, 217, 163, 45, 255, 209, 162, 37, 188, 0, 109, 231, 159, 7, 235, 213, 157, 61, 1, 231, 155, 37, 231, + 0, 173, 231, 152, 75, 112, 66, 157, 216, 72, 33, 235, 0, 137, 66, 141, 208, 27, 75, 109, 28, 42, 64, 26, 35, 232, 0, + 155, 66, 154, 208, 125, 74, 107, 24, 171, 43, 26, 216, 3, 75, 106, 66, 157, 208, 0, 231, 129, 75, 104, 66, 157, 209, + 0, 224, 175, 74, 103, 24, 171, 43, 41, 217, 0, 231, 121, 74, 101, 0, 155, 88, 211, 70, 159, 77, 100, 231, 115, 72, 100, + 28, 5, 231, 112, 72, 100, 28, 5, 231, 109, 72, 99, 28, 5, 231, 106, 72, 99, 28, 5, 231, 103, 30, 107, 43, 0, 209, 0, + 231, 99, 28, 29, 231, 97, 32, 232, 0, 128, 28, 5, 231, 93, 72, 93, 28, 5, 231, 90, 32, 230, 0, 128, 28, 5, 231, 86, + 72, 91, 28, 5, 231, 83, 28, 43, 59, 63, 231, 233, 32, 227, 0, 128, 28, 5, 231, 76, 75, 87, 66, 157, 216, 31, 74, 86, + 24, 171, 43, 15, 217, 116, 74, 85, 24, 171, 43, 31, 216, 0, 231, 63, 74, 84, 24, 171, 43, 32, 217, 156, 58, 42, 24, + 171, 43, 52, 217, 152, 58, 70, 24, 171, 43, 36, 217, 148, 74, 79, 24, 171, 43, 12, 217, 132, 75, 78, 66, 157, 208, 0, + 231, 44, 37, 159, 0, 237, 231, 41, 75, 75, 66, 157, 216, 30, 74, 75, 24, 171, 43, 14, 217, 130, 74, 74, 24, 171, 43, + 148, 216, 0, 231, 125, 58, 160, 24, 171, 43, 88, 216, 0, 231, 120, 74, 70, 24, 171, 43, 37, 216, 0, 224, 201, 75, 68, + 66, 157, 208, 0, 231, 15, 37, 243, 1, 109, 231, 12, 66, 141, 216, 0, 231, 126, 61, 21, 231, 7, 75, 63, 66, 157, 217, + 0, 224, 133, 74, 62, 24, 171, 43, 7, 217, 50, 58, 16, 24, 171, 43, 5, 217, 46, 58, 16, 24, 171, 43, 7, 217, 42, 58, + 16, 24, 171, 43, 7, 217, 38, 58, 16, 24, 171, 43, 5, 217, 34, 58, 32, 24, 171, 43, 7, 217, 30, 58, 32, 24, 171, 43, + 7, 217, 26, 58, 16, 24, 171, 43, 7, 217, 22, 58, 16, 24, 171, 43, 7, 217, 18, 74, 45, 24, 171, 43, 6, 216, 1, 7, 235, + 212, 12, 74, 43, 24, 171, 43, 131, 217, 0, 230, 212, 74, 42, 0, 155, 88, 211, 70, 159, 61, 80, 230, 206, 77, 19, 230, + 204, 53, 8, 230, 202, 70, 192, 19, 115, 162, 164, 19, 115, 172, 236, 19, 115, 172, 252, 19, 115, 172, 244, 19, 115, + 172, 228, 19, 115, 162, 220, 0, 0, 2, 255, 255, 255, 254, 255, 255, 255, 254, 198, 0, 0, 3, 255, 0, 0, 255, 240, 255, + 255, 252, 79, 0, 0, 3, 194, 255, 255, 252, 52, 19, 115, 179, 132, 0, 0, 3, 134, 0, 0, 3, 149, 0, 0, 3, 163, 0, 0, 3, + 161, 0, 0, 3, 154, 0, 0, 3, 166, 0, 0, 3, 146, 0, 0, 4, 255, 255, 255, 251, 176, 255, 255, 251, 208, 255, 255, 251, + 159, 255, 255, 251, 62, 0, 0, 4, 249, 0, 0, 30, 255, 255, 255, 250, 255, 255, 255, 225, 255, 255, 255, 250, 159, 0, + 0, 30, 155, 0, 0, 31, 255, 255, 255, 225, 0, 255, 255, 224, 175, 255, 255, 224, 144, 19, 115, 180, 44, 74, 118, 24, + 171, 43, 15, 217, 43, 74, 117, 24, 171, 43, 25, 217, 41, 74, 116, 24, 171, 43, 25, 216, 0, 230, 111, 74, 115, 24, 171, + 43, 37, 217, 0, 230, 107, 61, 40, 230, 105, 75, 112, 66, 157, 208, 30, 35, 189, 0, 91, 66, 157, 209, 0, 230, 183, 35, + 190, 0, 91, 66, 157, 209, 0, 230, 178, 35, 191, 0, 91, 66, 157, 209, 0, 230, 173, 75, 104, 24, 234, 75, 104, 66, 154, + 217, 0, 230, 81, 0, 147, 74, 103, 88, 211, 70, 159, 61, 16, 230, 75, 61, 26, 230, 73, 61, 48, 230, 71, 37, 73, 230, + 69, 32, 217, 0, 64, 28, 5, 230, 65, 72, 96, 28, 5, 230, 62, 32, 215, 0, 64, 28, 5, 230, 58, 72, 94, 28, 5, 230, 55, + 32, 211, 0, 64, 28, 5, 230, 51, 72, 91, 28, 5, 230, 48, 72, 91, 28, 5, 230, 45, 32, 206, 0, 64, 28, 5, 230, 41, 32, + 203, 0, 64, 28, 5, 230, 37, 72, 86, 28, 5, 230, 34, 32, 202, 0, 64, 28, 5, 230, 30, 72, 84, 28, 5, 230, 27, 32, 200, + 0, 64, 28, 5, 230, 23, 72, 81, 28, 5, 230, 20, 32, 197, 0, 64, 28, 5, 230, 16, 72, 79, 28, 5, 230, 13, 32, 195, 0, 64, + 28, 5, 230, 9, 72, 76, 28, 5, 230, 6, 72, 76, 28, 5, 230, 3, 32, 199, 0, 64, 28, 5, 229, 255, 30, 171, 230, 150, 72, + 72, 28, 5, 229, 250, 32, 136, 0, 128, 28, 5, 229, 246, 32, 204, 0, 64, 28, 5, 229, 242, 72, 68, 28, 5, 229, 239, 32, + 83, 28, 5, 229, 236, 32, 194, 0, 64, 28, 5, 229, 232, 32, 193, 0, 64, 28, 5, 229, 228, 32, 251, 0, 64, 28, 5, 229, 224, + 72, 60, 28, 5, 229, 221, 72, 59, 28, 5, 229, 218, 72, 59, 28, 5, 229, 215, 72, 58, 28, 5, 229, 212, 72, 58, 28, 5, 229, + 209, 72, 57, 28, 5, 229, 206, 72, 57, 28, 5, 229, 203, 72, 56, 28, 5, 229, 200, 72, 56, 28, 5, 229, 197, 72, 55, 28, + 5, 229, 194, 72, 55, 28, 5, 229, 191, 72, 54, 28, 5, 229, 188, 72, 54, 28, 5, 229, 185, 72, 53, 28, 5, 229, 182, 72, + 53, 28, 5, 229, 179, 72, 52, 28, 5, 229, 176, 72, 52, 28, 5, 229, 173, 72, 51, 28, 5, 229, 170, 72, 51, 28, 5, 229, + 167, 72, 50, 28, 5, 229, 164, 72, 50, 28, 5, 229, 161, 72, 49, 28, 5, 229, 158, 72, 49, 28, 5, 229, 155, 72, 48, 28, + 5, 229, 152, 72, 48, 28, 5, 229, 149, 72, 47, 28, 5, 229, 146, 72, 47, 28, 5, 229, 143, 255, 255, 222, 144, 255, 255, + 219, 48, 255, 255, 0, 191, 255, 254, 251, 216, 0, 0, 1, 49, 255, 255, 254, 129, 0, 0, 1, 19, 19, 115, 182, 60, 0, 0, + 1, 177, 0, 0, 1, 169, 0, 0, 1, 159, 0, 0, 1, 157, 0, 0, 1, 151, 0, 0, 1, 147, 0, 0, 1, 143, 0, 0, 1, 137, 0, 0, 1, 129, + 0, 0, 1, 241, 0, 0, 1, 247, 0, 0, 1, 183, 0, 0, 1, 145, 0, 0, 1, 139, 0, 0, 1, 135, 0, 0, 31, 252, 0, 0, 31, 236, 0, + 0, 31, 233, 0, 0, 31, 232, 0, 0, 31, 217, 0, 0, 31, 216, 0, 0, 3, 153, 0, 0, 31, 188, 0, 0, 31, 185, 0, 0, 31, 184, + 0, 0, 31, 251, 0, 0, 31, 250, 0, 0, 31, 235, 0, 0, 31, 234, 0, 0, 31, 249, 0, 0, 31, 248, 0, 0, 31, 219, 0, 0, 31, 218, + 0, 0, 31, 203, 0, 0, 31, 202, 0, 0, 31, 201, 0, 0, 31, 200, 0, 0, 31, 187, 0, 0, 31, 186, 71, 112, 70, 192, 71, 112, + 70, 192, 181, 48, 176, 133, 28, 5, 28, 28, 43, 0, 208, 23, 41, 0, 208, 13, 28, 40, 28, 35, 240, 0, 248, 72, 28, 67, + 209, 3, 35, 0, 96, 35, 35, 138, 96, 43, 176, 5, 188, 48, 188, 2, 71, 8, 70, 105, 28, 40, 49, 6, 34, 0, 28, 35, 240, + 0, 248, 55, 231, 237, 35, 138, 0, 91, 24, 196, 231, 227, 181, 48, 28, 19, 74, 6, 28, 13, 28, 4, 176, 129, 104, 16, 28, + 33, 28, 42, 247, 255, 255, 211, 176, 1, 188, 48, 188, 2, 71, 8, 70, 192, 19, 115, 163, 32, 181, 112, 176, 132, 172, + 1, 28, 5, 33, 0, 34, 8, 28, 32, 247, 254, 250, 249, 70, 110, 75, 9, 54, 15, 104, 24, 28, 42, 28, 49, 28, 35, 240, 0, + 248, 14, 53, 1, 208, 1, 40, 1, 208, 5, 32, 1, 66, 64, 176, 4, 188, 112, 188, 2, 71, 8, 120, 48, 231, 249, 19, 115, 163, + 32, 181, 240, 76, 160, 176, 129, 28, 32, 28, 14, 28, 21, 28, 31, 247, 255, 248, 239, 40, 1, 217, 29, 73, 156, 28, 32, + 247, 255, 248, 151, 40, 0, 209, 31, 46, 0, 208, 66, 45, 127, 217, 61, 28, 42, 75, 151, 58, 128, 66, 154, 216, 61, 5, + 106, 35, 64, 66, 91, 14, 210, 67, 26, 112, 50, 35, 63, 28, 42, 64, 26, 35, 128, 66, 91, 67, 26, 112, 114, 32, 2, 224, + 3, 46, 0, 208, 42, 112, 53, 32, 1, 176, 1, 188, 240, 188, 2, 71, 8, 73, 139, 28, 32, 247, 255, 248, 113, 40, 0, 209, + 99, 46, 0, 208, 28, 4, 43, 14, 25, 41, 0, 208, 237, 28, 11, 51, 127, 6, 27, 14, 27, 43, 30, 217, 0, 224, 166, 72, 130, + 6, 43, 14, 26, 24, 27, 14, 27, 43, 62, 217, 3, 35, 128, 64, 83, 43, 124, 216, 95, 112, 49, 112, 114, 32, 2, 231, 217, + 112, 53, 32, 1, 231, 214, 32, 0, 231, 212, 72, 121, 75, 122, 24, 42, 66, 154, 217, 118, 72, 121, 75, 121, 24, 42, 66, + 154, 216, 22, 2, 234, 35, 16, 66, 91, 15, 82, 67, 26, 112, 50, 3, 171, 34, 128, 66, 82, 14, 155, 67, 19, 112, 115, 5, + 43, 14, 155, 28, 113, 67, 19, 112, 75, 35, 63, 64, 43, 67, 19, 112, 139, 32, 4, 231, 179, 75, 109, 24, 234, 75, 109, + 66, 154, 217, 0, 224, 143, 1, 170, 35, 8, 66, 91, 15, 146, 67, 26, 112, 50, 2, 43, 34, 128, 66, 82, 14, 155, 67, 19, + 112, 115, 3, 171, 14, 155, 28, 113, 67, 19, 112, 75, 5, 43, 14, 155, 28, 72, 67, 19, 112, 67, 35, 63, 64, 43, 67, 19, + 112, 131, 32, 5, 231, 145, 73, 94, 28, 32, 247, 255, 248, 7, 40, 0, 209, 16, 46, 0, 208, 178, 4, 43, 14, 25, 41, 0, + 209, 0, 231, 130, 28, 11, 51, 95, 6, 27, 14, 27, 43, 93, 216, 0, 224, 133, 32, 1, 66, 64, 231, 122, 73, 83, 28, 32, + 247, 254, 255, 240, 40, 0, 208, 0, 231, 111, 46, 0, 209, 0, 231, 111, 6, 43, 14, 28, 4, 43, 14, 25, 41, 0, 209, 47, + 104, 59, 43, 0, 208, 11, 35, 27, 96, 57, 28, 114, 112, 51, 35, 40, 112, 115, 35, 66, 28, 150, 112, 83, 32, 4, 112, 52, + 231, 91, 32, 1, 112, 52, 231, 88, 75, 67, 24, 234, 75, 67, 66, 154, 217, 213, 4, 42, 35, 32, 66, 91, 15, 18, 67, 26, + 112, 50, 5, 43, 34, 128, 66, 82, 14, 155, 67, 19, 112, 115, 35, 63, 64, 43, 67, 19, 112, 179, 32, 3, 231, 65, 28, 11, + 51, 32, 6, 27, 14, 27, 43, 15, 216, 189, 231, 81, 28, 11, 59, 33, 6, 27, 14, 27, 43, 93, 216, 182, 28, 35, 59, 33, 6, + 27, 14, 27, 43, 93, 216, 176, 104, 59, 43, 0, 209, 61, 35, 1, 96, 59, 35, 27, 112, 51, 35, 36, 112, 115, 28, 114, 35, + 66, 112, 83, 28, 150, 32, 5, 112, 49, 112, 116, 231, 29, 72, 40, 75, 40, 24, 42, 66, 154, 216, 154, 0, 106, 35, 4, 66, + 91, 15, 210, 67, 26, 112, 50, 0, 171, 34, 128, 66, 82, 14, 155, 67, 19, 112, 115, 2, 43, 14, 155, 28, 113, 67, 19, 112, + 75, 3, 171, 14, 155, 28, 72, 67, 19, 112, 67, 5, 43, 14, 155, 28, 65, 67, 19, 112, 75, 35, 63, 64, 43, 67, 19, 112, + 139, 32, 6, 230, 247, 32, 190, 6, 43, 5, 192, 14, 26, 24, 27, 14, 27, 43, 93, 216, 0, 231, 16, 231, 111, 32, 2, 231, + 202, 70, 192, 19, 115, 162, 164, 19, 115, 172, 228, 0, 0, 7, 127, 19, 115, 172, 252, 192, 0, 0, 0, 255, 255, 248, 0, + 0, 0, 247, 255, 255, 255, 0, 0, 0, 30, 255, 255, 255, 224, 0, 0, 3, 223, 255, 255, 19, 115, 172, 244, 19, 115, 172, + 236, 255, 255, 40, 0, 0, 0, 7, 255, 252, 0, 0, 0, 123, 255, 255, 255, 181, 240, 28, 12, 176, 129, 28, 6, 28, 8, 28, + 17, 28, 21, 247, 253, 252, 37, 28, 41, 28, 7, 28, 32, 247, 253, 252, 106, 44, 0, 219, 8, 41, 0, 219, 11, 176, 1, 96, + 55, 28, 48, 96, 113, 188, 240, 188, 2, 71, 8, 41, 0, 221, 246, 63, 1, 25, 73, 231, 243, 55, 1, 27, 73, 231, 240, 70, + 192, 72, 0, 71, 112, 19, 115, 162, 224, 181, 16, 41, 2, 208, 69, 41, 3, 208, 62, 41, 1, 208, 4, 32, 1, 66, 64, 188, + 16, 188, 2, 71, 8, 10, 3, 59, 128, 6, 27, 14, 25, 28, 3, 59, 128, 6, 27, 14, 28, 28, 11, 51, 80, 6, 27, 14, 27, 43, + 31, 216, 2, 75, 65, 66, 152, 217, 18, 28, 11, 51, 48, 6, 27, 14, 27, 43, 36, 216, 22, 75, 62, 66, 152, 216, 19, 1, 203, + 26, 91, 0, 91, 73, 60, 25, 27, 74, 60, 24, 91, 0, 91, 90, 208, 231, 216, 1, 203, 26, 91, 0, 91, 73, 57, 25, 27, 74, + 57, 24, 91, 0, 91, 90, 208, 231, 206, 28, 11, 51, 95, 6, 27, 14, 27, 43, 7, 216, 198, 74, 52, 0, 155, 88, 211, 70, 159, + 4, 3, 14, 25, 6, 3, 14, 28, 231, 202, 4, 3, 14, 26, 6, 3, 14, 27, 43, 158, 217, 13, 51, 35, 6, 27, 14, 28, 33, 128, + 42, 159, 216, 13, 28, 19, 59, 112, 6, 91, 14, 27, 24, 203, 6, 27, 14, 25, 231, 182, 59, 126, 6, 27, 14, 28, 33, 127, + 42, 159, 217, 241, 28, 19, 51, 80, 231, 240, 44, 192, 216, 158, 28, 35, 74, 33, 59, 161, 0, 91, 90, 208, 231, 154, 44, + 241, 217, 0, 231, 149, 74, 30, 28, 35, 59, 161, 0, 91, 90, 208, 40, 0, 208, 0, 231, 143, 231, 140, 44, 216, 217, 0, + 231, 137, 74, 25, 231, 242, 44, 246, 217, 0, 231, 132, 35, 192, 1, 155, 24, 224, 231, 130, 44, 243, 217, 0, 231, 125, + 73, 20, 24, 96, 231, 124, 75, 19, 25, 27, 59, 161, 120, 27, 43, 0, 209, 0, 231, 115, 75, 17, 24, 224, 231, 114, 74, + 16, 231, 217, 28, 35, 74, 16, 59, 161, 0, 91, 90, 208, 231, 106, 0, 0, 207, 211, 0, 0, 244, 166, 255, 255, 48, 255, + 19, 115, 210, 218, 255, 255, 80, 191, 19, 115, 187, 176, 19, 115, 187, 144, 19, 115, 240, 60, 19, 115, 239, 154, 19, + 115, 239, 42, 0, 0, 47, 160, 19, 115, 238, 206, 0, 0, 254, 96, 19, 115, 238, 18, 19, 115, 237, 86, 73, 79, 83, 32, 109, + 111, 100, 117, 108, 101, 0, 0, 255, 255, 255, 255, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, 32, 0, 33, 156, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 71, 120, 70, 192, 229, 31, 240, 4, 0, 0, 0, 0, 19, 115, 101, 160, 19, 115, 101, + 176, 19, 115, 101, 208, 19, 115, 101, 240, 19, 115, 102, 16, 19, 115, 102, 48, 19, 115, 102, 80, 19, 115, 102, 112, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 100, 58, 47, 110, 97, 110, 100, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 100, 101, 118, 47, + 115, 100, 105, 111, 47, 115, 108, 111, 116, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 100, 101, 118, + 47, 117, 115, 98, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 67, 45, 85, 84, + 70, 45, 56, 0, 0, 0, 0, 0, 19, 115, 173, 32, 67, 45, 85, 84, 70, 45, 56, 0, 0, 0, 0, 0, 67, 45, 85, 84, 70, 45, 56, + 0, 0, 0, 0, 0, 67, 45, 85, 84, 70, 45, 56, 0, 0, 0, 0, 0, 19, 115, 186, 141, 19, 115, 186, 140, 0, 0, 0, 1, 0, 0, 0, + 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 163, 40, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 166, 20, + 19, 115, 166, 124, 19, 115, 166, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 172, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 51, 14, 171, 205, 18, 52, 230, 109, 222, 236, 0, 5, 0, 11, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, 48, 49, 48, 48, 48, + 48, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, 48, 49, 48, 48, 48, 49, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, + 48, 49, 48, 48, 48, 52, 0, 47, 116, 109, 112, 47, 108, 97, 117, 110, 99, 104, 46, 115, 121, 115, 0, 47, 116, 109, 112, + 0, 47, 116, 105, 99, 107, 101, 116, 47, 48, 48, 48, 49, 48, 48, 48, 48, 0, 47, 116, 105, 99, 107, 101, 116, 47, 48, + 48, 48, 49, 48, 48, 48, 49, 0, 47, 116, 105, 99, 107, 101, 116, 47, 48, 48, 48, 49, 48, 48, 48, 52, 0, 47, 115, 121, + 115, 47, 100, 105, 115, 99, 46, 115, 121, 115, 0, 47, 115, 121, 115, 47, 117, 105, 100, 46, 115, 121, 115, 0, 102, 97, + 116, 0, 47, 116, 105, 99, 107, 101, 116, 0, 47, 115, 121, 115, 0, 47, 116, 105, 116, 108, 101, 0, 115, 100, 58, 47, + 102, 102, 115, 95, 108, 111, 103, 46, 116, 120, 116, 0, 109, 115, 103, 32, 105, 111, 99, 108, 116, 118, 32, 48, 120, + 37, 120, 32, 48, 120, 37, 120, 10, 0, 82, 101, 97, 100, 32, 100, 105, 114, 32, 49, 32, 37, 105, 32, 37, 105, 32, 37, + 115, 10, 0, 82, 101, 97, 100, 32, 100, 105, 114, 32, 50, 32, 37, 105, 32, 37, 115, 32, 114, 101, 116, 58, 32, 37, 105, + 32, 10, 0, 71, 101, 116, 85, 115, 97, 103, 101, 32, 37, 105, 32, 37, 105, 32, 37, 115, 10, 0, 85, 110, 115, 117, 112, + 112, 111, 114, 116, 101, 100, 32, 105, 111, 99, 108, 116, 118, 32, 99, 111, 109, 109, 97, 110, 100, 32, 48, 120, 37, + 120, 10, 0, 109, 115, 103, 32, 105, 111, 99, 108, 116, 32, 48, 120, 37, 120, 32, 48, 120, 37, 120, 10, 0, 67, 114, 101, + 97, 116, 101, 32, 100, 105, 114, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 84, 114, 121, 105, 110, 103, 32, + 67, 114, 101, 97, 116, 101, 32, 102, 105, 108, 101, 32, 37, 115, 32, 10, 0, 67, 114, 101, 97, 116, 101, 32, 102, 105, + 108, 101, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 68, 101, 108, 101, 116, 105, 110, 103, 32, 102, 105, 108, + 101, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 82, 101, 110, 97, 109, 105, 110, 103, 32, 102, 105, 108, 101, + 32, 37, 115, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 86, 70, 83, 83, 116, 97, 116, 115, 32, 37, 115, 32, + 114, 101, 116, 32, 37, 105, 10, 0, 70, 70, 83, 32, 71, 69, 84, 70, 73, 76, 69, 83, 84, 65, 84, 83, 32, 10, 0, 71, 69, + 84, 65, 84, 84, 82, 49, 32, 37, 115, 10, 0, 71, 69, 84, 65, 84, 84, 82, 50, 32, 37, 115, 32, 114, 101, 116, 32, 37, + 105, 10, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, 48, 49, 48, 48, 48, 35, 47, 35, 35, 35, 35, 35, 35, 35, 35, 47, + 100, 97, 116, 97, 47, 110, 111, 99, 111, 112, 121, 0, 83, 101, 116, 32, 65, 84, 84, 82, 32, 32, 37, 115, 32, 114, 101, + 116, 32, 37, 105, 10, 0, 85, 110, 115, 117, 112, 112, 111, 114, 116, 101, 100, 32, 105, 111, 99, 108, 116, 32, 99, 111, + 109, 109, 97, 110, 100, 32, 48, 120, 37, 120, 10, 0, 102, 102, 115, 32, 111, 112, 101, 110, 32, 37, 115, 10, 0, 69, + 83, 32, 105, 111, 99, 116, 108, 118, 58, 32, 48, 120, 37, 120, 10, 0, 76, 97, 117, 110, 99, 104, 32, 84, 105, 116, 108, + 101, 58, 32, 48, 120, 37, 120, 45, 48, 120, 37, 120, 10, 0, 102, 97, 116, 58, 115, 104, 117, 116, 100, 111, 119, 110, + 0, 70, 70, 83, 32, 83, 104, 117, 116, 100, 111, 119, 110, 10, 0, 0, 0, 19, 115, 20, 52, 19, 115, 18, 80, 19, 115, 16, + 174, 19, 115, 20, 60, 19, 115, 19, 226, 19, 115, 19, 52, 19, 115, 17, 78, 19, 115, 17, 148, 19, 115, 16, 246, 19, 115, + 20, 60, 19, 115, 18, 214, 115, 100, 58, 0, 117, 115, 98, 58, 0, 115, 100, 0, 117, 115, 98, 0, 102, 97, 116, 47, 100, + 101, 118, 47, 115, 100, 105, 111, 0, 102, 97, 116, 58, 111, 102, 102, 0, 102, 97, 116, 58, 111, 110, 0, 115, 100, 58, + 47, 110, 97, 110, 100, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 0, 70, 65, 84, 32, 111, 112, 101, 110, 32, 114, 101, + 116, 32, 37, 105, 32, 37, 115, 10, 0, 69, 114, 114, 32, 70, 65, 84, 32, 82, 101, 97, 100, 32, 114, 101, 116, 32, 37, + 105, 32, 108, 101, 110, 32, 105, 32, 10, 0, 69, 114, 114, 32, 70, 65, 84, 32, 83, 101, 101, 107, 32, 114, 101, 116, + 32, 37, 105, 32, 37, 117, 32, 37, 117, 32, 10, 0, 101, 104, 33, 32, 121, 111, 117, 32, 99, 97, 110, 110, 111, 116, 32, + 99, 97, 108, 108, 32, 105, 111, 99, 116, 108, 118, 32, 48, 120, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 33, + 10, 0, 70, 65, 84, 32, 71, 101, 116, 70, 105, 108, 101, 83, 116, 97, 116, 115, 32, 114, 101, 116, 32, 37, 105, 32, 37, + 117, 32, 37, 117, 32, 10, 0, 101, 104, 33, 32, 121, 111, 117, 32, 99, 97, 110, 110, 111, 116, 32, 99, 97, 108, 108, + 32, 105, 111, 99, 116, 108, 32, 48, 120, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 33, 10, 0, 0, 0, 19, 115, 26, + 58, 19, 115, 27, 126, 19, 115, 27, 184, 19, 115, 28, 130, 19, 115, 29, 138, 19, 115, 30, 80, 19, 115, 29, 242, 115, + 100, 58, 47, 110, 97, 110, 100, 0, 0, 0, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 0, 0, 0, 115, 100, 58, 47, 110, + 97, 110, 100, 50, 0, 0, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 50, 0, 0, 115, 100, 58, 47, 110, 97, 110, 100, 51, + 0, 0, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 51, 0, 0, 115, 100, 58, 47, 110, 97, 110, 100, 52, 0, 0, 0, 117, 115, + 98, 58, 47, 110, 97, 110, 100, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 97, 116, 47, 100, 101, 118, 47, 115, + 100, 105, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 100, 58, 47, 108, 111, 103, 46, 116, + 120, 116, 0, 87, 73, 83, 68, 0, 0, 1, 3, 19, 115, 42, 17, 19, 115, 38, 93, 19, 115, 41, 65, 19, 115, 40, 177, 19, 115, + 38, 33, 19, 115, 41, 161, 87, 85, 83, 66, 0, 0, 2, 3, 19, 115, 47, 217, 19, 115, 47, 193, 19, 115, 49, 61, 19, 115, + 49, 9, 19, 115, 47, 45, 19, 115, 47, 49, 46, 46, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 9, 0, + 0, 0, 14, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, 0, 30, 92, 47, 58, 59, + 42, 63, 34, 60, 62, 124, 38, 43, 44, 61, 91, 93, 32, 0, 92, 47, 58, 42, 63, 34, 60, 62, 124, 0, 19, 115, 167, 229, 0, + 0, 0, 92, 19, 115, 90, 13, 19, 115, 89, 173, 19, 115, 82, 53, 19, 115, 85, 221, 19, 115, 80, 193, 19, 115, 81, 205, + 19, 115, 71, 129, 19, 115, 70, 225, 19, 115, 76, 61, 19, 115, 75, 229, 19, 115, 74, 189, 19, 115, 72, 221, 0, 0, 1, + 72, 19, 115, 71, 241, 19, 115, 71, 85, 19, 115, 70, 249, 19, 115, 70, 237, 19, 115, 72, 125, 19, 115, 79, 161, 19, 115, + 89, 129, 0, 0, 0, 0, 70, 65, 84, 0, 67, 0, 0, 0, 67, 45, 85, 84, 70, 45, 56, 0, 67, 45, 74, 73, 83, 0, 0, 0, 67, 45, + 69, 85, 67, 74, 80, 0, 67, 45, 83, 74, 73, 83, 0, 0, 67, 45, 73, 83, 79, 45, 56, 56, 53, 57, 45, 49, 0, 0, 0, 0, 73, + 83, 79, 45, 56, 56, 53, 57, 45, 49, 0, 0, 85, 84, 70, 45, 56, 0, 0, 0, 74, 73, 83, 0, 69, 85, 67, 74, 80, 0, 0, 0, 83, + 74, 73, 83, 0, 0, 0, 0, 46, 0, 0, 0, 19, 115, 111, 32, 19, 115, 110, 238, 19, 115, 111, 12, 19, 115, 111, 6, 19, 115, + 110, 242, 19, 115, 111, 80, 4, 0, 0, 0, 0, 0, 5, 0, 0, 4, 1, 1, 1, 1, 1, 6, 1, 6, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 0, 0, 0, 0, 6, 2, 2, 2, 2, 2, 6, 2, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 6, 6, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 4, 4, 7, 4, 7, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 7, 1, 1, 1, 1, 1, 7, 1, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 59, 0, 0, 0, 90, 0, 0, 0, 120, 0, 0, 0, 151, 0, 0, 0, 181, 0, 0, 0, 212, 0, 0, 0, 243, 0, 0, + 1, 17, 0, 0, 1, 48, 0, 0, 1, 78, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, + 0, 31, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 31, 0, 0, + 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, + 0, 31, 0, 0, 0, 29, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, + 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 1, 109, 0, 0, 1, 110, 19, 115, 133, 70, 19, 115, 131, 174, 19, 115, 133, 66, + 19, 115, 133, 62, 19, 115, 133, 58, 19, 115, 131, 174, 19, 115, 133, 52, 19, 115, 131, 174, 19, 115, 133, 48, 19, 115, + 133, 44, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, + 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, + 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, + 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, + 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, + 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, + 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, + 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, + 131, 174, 19, 115, 133, 82, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, + 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, + 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 133, 40, 19, 115, 133, 76, 19, 115, 131, 174, 19, 115, 131, 174, 19, + 115, 131, 174, 19, 115, 133, 36, 19, 115, 133, 30, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, + 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, + 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, + 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, + 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 133, 26, 19, 115, 133, 22, 19, 115, 133, 82, 19, 115, + 131, 174, 19, 115, 133, 76, 19, 115, 133, 18, 19, 115, 135, 38, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, + 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 30, 19, 115, 132, 4, 19, 115, 135, 26, 19, 115, 135, + 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 20, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, + 135, 16, 19, 115, 135, 12, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 135, 8, 19, 115, 135, 4, 19, + 115, 135, 0, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 250, 19, 115, 134, 246, 19, 115, 132, 4, 19, 115, 134, + 242, 19, 115, 134, 236, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 134, 232, 19, + 115, 134, 228, 19, 115, 132, 4, 19, 115, 134, 224, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, + 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 218, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 214, 19, 115, + 132, 4, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 208, 19, 115, 135, 34, 19, 115, 132, 4, 19, + 115, 134, 204, 19, 115, 134, 200, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, + 196, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, + 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 134, 192, 19, + 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 192, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 192, 19, 115, 135, + 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, + 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, + 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, + 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, + 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, + 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 134, 192, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, + 135, 34, 19, 115, 132, 4, 19, 115, 134, 124, 19, 115, 134, 120, 19, 115, 134, 186, 19, 115, 134, 186, 19, 115, 134, + 180, 19, 115, 134, 180, 19, 115, 134, 176, 19, 115, 131, 82, 19, 115, 134, 172, 19, 115, 131, 82, 19, 115, 131, 82, + 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, + 131, 82, 19, 115, 134, 166, 19, 115, 134, 166, 19, 115, 134, 166, 19, 115, 134, 166, 19, 115, 134, 162, 19, 115, 131, + 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, + 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 134, 186, 19, 115, 134, 186, 19, 115, 134, + 156, 19, 115, 134, 156, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, + 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, + 82, 19, 115, 134, 186, 19, 115, 134, 186, 19, 115, 134, 150, 19, 115, 134, 150, 19, 115, 134, 146, 19, 115, 131, 82, + 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, + 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 134, 132, + 19, 115, 134, 132, 19, 115, 134, 128, 19, 115, 137, 74, 19, 115, 137, 68, 19, 115, 137, 68, 19, 115, 135, 236, 19, 115, + 137, 62, 19, 115, 137, 54, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 48, 19, 115, 137, + 40, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, + 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, + 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, + 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, + 115, 137, 22, 19, 115, 137, 16, 19, 115, 137, 10, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 4, 19, 115, 140, + 198, 19, 115, 140, 192, 19, 115, 140, 186, 19, 115, 140, 180, 19, 115, 140, 174, 19, 115, 140, 168, 19, 115, 140, 162, + 19, 115, 140, 156, 19, 115, 140, 150, 19, 115, 140, 144, 19, 115, 140, 138, 19, 115, 140, 132, 19, 115, 140, 126, 19, + 115, 140, 120, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 140, 114, 19, 115, 140, 108, 19, 115, 135, 236, 19, 115, 140, 102, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 96, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 140, 90, 19, 115, 140, 84, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 78, 19, + 115, 140, 72, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 66, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 60, + 19, 115, 140, 12, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 26, 19, 115, 135, 236, 19, + 115, 140, 18, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 54, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 140, 48, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 140, 42, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 34, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 139, 254, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 139, 246, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, + 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 137, 28, 19, 115, 135, 236, 19, 115, 139, 240, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 236, + 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 139, 228, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 222, 19, 115, 135, 236, 19, 115, 137, + 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, + 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 139, 216, 19, 115, 139, 208, 19, 115, 135, 236, 19, 115, 139, 202, 19, 115, 139, 194, 19, 115, 135, 236, 19, 115, 139, + 188, 19, 115, 135, 236, 19, 115, 139, 180, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 139, 174, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 166, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 160, 19, 115, 139, 152, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 144, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, + 138, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 132, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, + 115, 135, 236, 19, 115, 139, 124, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 118, 19, 115, 135, 236, 19, 115, + 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 110, 19, 115, 135, 236, 19, 115, 139, 104, 19, 115, 139, + 96, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, + 19, 115, 140, 6, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 136, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 65, 65, 65, 65, 65, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 16, 16, 16, 16, 16, 16, 66, 66, 66, 66, 66, 66, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, + 16, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 146, 124, 19, 115, 146, 120, 19, 115, 146, 100, 19, 115, + 146, 88, 19, 115, 146, 74, 19, 115, 146, 64, 19, 115, 146, 40, 19, 115, 146, 24, 78, 156, 85, 22, 90, 3, 150, 63, 84, + 192, 97, 27, 99, 40, 89, 246, 144, 34, 132, 117, 131, 28, 122, 80, 96, 170, 99, 225, 110, 37, 101, 237, 132, 102, 130, + 166, 155, 245, 104, 147, 87, 39, 101, 161, 98, 113, 91, 155, 89, 208, 134, 123, 152, 244, 125, 98, 125, 190, 155, 142, + 98, 22, 124, 159, 136, 183, 91, 137, 94, 181, 99, 9, 102, 151, 104, 72, 149, 199, 151, 141, 103, 79, 78, 229, 79, 10, + 79, 77, 79, 157, 80, 73, 86, 242, 89, 55, 89, 212, 90, 1, 92, 9, 96, 223, 97, 15, 97, 112, 102, 19, 105, 5, 112, 186, + 117, 79, 117, 112, 121, 251, 125, 173, 125, 239, 128, 195, 132, 14, 136, 99, 139, 2, 144, 85, 144, 122, 83, 59, 78, + 149, 78, 165, 87, 223, 128, 178, 144, 193, 120, 239, 78, 0, 88, 241, 110, 162, 144, 56, 122, 50, 131, 40, 130, 139, + 156, 47, 81, 65, 83, 112, 84, 189, 84, 225, 86, 224, 89, 251, 95, 21, 152, 242, 109, 235, 128, 228, 133, 45, 150, 98, + 150, 112, 150, 160, 151, 251, 84, 11, 83, 243, 91, 135, 112, 207, 127, 189, 143, 194, 150, 232, 83, 111, 157, 92, 122, + 186, 78, 17, 120, 147, 129, 252, 110, 38, 86, 24, 85, 4, 107, 29, 133, 26, 156, 59, 89, 229, 83, 169, 109, 102, 116, + 220, 149, 143, 86, 66, 78, 145, 144, 75, 150, 242, 131, 79, 153, 12, 83, 225, 85, 182, 91, 48, 95, 113, 102, 32, 102, + 243, 104, 4, 108, 56, 108, 243, 109, 41, 116, 91, 118, 200, 122, 78, 152, 52, 130, 241, 136, 91, 138, 96, 146, 237, + 109, 178, 117, 171, 118, 202, 153, 197, 96, 166, 139, 1, 141, 138, 149, 178, 105, 142, 83, 173, 81, 134, 87, 18, 88, + 48, 89, 68, 91, 180, 94, 246, 96, 40, 99, 169, 99, 244, 108, 191, 111, 20, 112, 142, 113, 20, 113, 89, 113, 213, 115, + 63, 126, 1, 130, 118, 130, 209, 133, 151, 144, 96, 146, 91, 157, 27, 88, 105, 101, 188, 108, 90, 117, 37, 81, 249, 89, + 46, 89, 101, 95, 128, 95, 220, 98, 188, 101, 250, 106, 42, 107, 39, 107, 180, 115, 139, 127, 193, 137, 86, 157, 44, + 157, 14, 158, 196, 92, 161, 108, 150, 131, 123, 81, 4, 92, 75, 97, 182, 129, 198, 104, 118, 114, 97, 78, 89, 79, 250, + 83, 120, 96, 105, 110, 41, 122, 79, 151, 243, 78, 11, 83, 22, 78, 238, 79, 85, 79, 61, 79, 161, 79, 115, 82, 160, 83, + 239, 86, 9, 89, 15, 90, 193, 91, 182, 91, 225, 121, 209, 102, 135, 103, 156, 103, 182, 107, 76, 108, 179, 112, 107, + 115, 194, 121, 141, 121, 190, 122, 60, 123, 135, 130, 177, 130, 219, 131, 4, 131, 119, 131, 239, 131, 211, 135, 102, + 138, 178, 86, 41, 140, 168, 143, 230, 144, 78, 151, 30, 134, 138, 79, 196, 92, 232, 98, 17, 114, 89, 117, 59, 129, 229, + 130, 189, 134, 254, 140, 192, 150, 197, 153, 19, 153, 213, 78, 203, 79, 26, 137, 227, 86, 222, 88, 74, 88, 202, 94, + 251, 95, 235, 96, 42, 96, 148, 96, 98, 97, 208, 98, 18, 98, 208, 101, 57, 155, 65, 102, 102, 104, 176, 109, 119, 112, + 112, 117, 76, 118, 134, 125, 117, 130, 165, 135, 249, 149, 139, 150, 142, 140, 157, 81, 241, 82, 190, 89, 22, 84, 179, + 91, 179, 93, 22, 97, 104, 105, 130, 109, 175, 120, 141, 132, 203, 136, 87, 138, 114, 147, 167, 154, 184, 109, 108, 153, + 168, 134, 217, 87, 163, 103, 255, 134, 206, 146, 14, 82, 131, 86, 135, 84, 4, 94, 211, 98, 225, 100, 185, 104, 60, 104, + 56, 107, 187, 115, 114, 120, 186, 122, 107, 137, 154, 137, 210, 141, 107, 143, 3, 144, 237, 149, 163, 150, 148, 151, + 105, 91, 102, 92, 179, 105, 125, 152, 77, 152, 78, 99, 155, 123, 32, 106, 43, 106, 127, 104, 182, 156, 13, 111, 95, + 82, 114, 85, 157, 96, 112, 98, 236, 109, 59, 110, 7, 110, 209, 132, 91, 137, 16, 143, 68, 78, 20, 156, 57, 83, 246, + 105, 27, 106, 58, 151, 132, 104, 42, 81, 92, 122, 195, 132, 178, 145, 220, 147, 140, 86, 91, 157, 40, 104, 34, 131, + 5, 132, 49, 124, 165, 82, 8, 130, 197, 116, 230, 78, 126, 79, 131, 81, 160, 91, 210, 82, 10, 82, 216, 82, 231, 93, 251, + 85, 154, 88, 42, 89, 230, 91, 140, 91, 152, 91, 219, 94, 114, 94, 121, 96, 163, 97, 31, 97, 99, 97, 190, 99, 219, 101, + 98, 103, 209, 104, 83, 104, 250, 107, 62, 107, 83, 108, 87, 111, 34, 111, 151, 111, 69, 116, 176, 117, 24, 118, 227, + 119, 11, 122, 255, 123, 161, 124, 33, 125, 233, 127, 54, 127, 240, 128, 157, 130, 102, 131, 158, 137, 179, 138, 204, + 140, 171, 144, 132, 148, 81, 149, 147, 149, 145, 149, 162, 150, 101, 151, 211, 153, 40, 130, 24, 78, 56, 84, 43, 92, + 184, 93, 204, 115, 169, 118, 76, 119, 60, 92, 169, 127, 235, 141, 11, 150, 193, 152, 17, 152, 84, 152, 88, 79, 1, 79, + 14, 83, 113, 85, 156, 86, 104, 87, 250, 89, 71, 91, 9, 91, 196, 92, 144, 94, 12, 94, 126, 95, 204, 99, 238, 103, 58, + 101, 215, 101, 226, 103, 31, 104, 203, 104, 196, 106, 95, 94, 48, 107, 197, 108, 23, 108, 125, 117, 127, 121, 72, 91, + 99, 122, 0, 125, 0, 95, 189, 137, 143, 138, 24, 140, 180, 141, 119, 142, 204, 143, 29, 152, 226, 154, 14, 155, 60, 78, + 128, 80, 125, 81, 0, 89, 147, 91, 156, 98, 47, 98, 128, 100, 236, 107, 58, 114, 160, 117, 145, 121, 71, 127, 169, 135, + 251, 138, 188, 139, 112, 99, 172, 131, 202, 151, 160, 84, 9, 84, 3, 85, 171, 104, 84, 106, 88, 138, 112, 120, 39, 103, + 117, 158, 205, 83, 116, 91, 162, 129, 26, 134, 80, 144, 6, 78, 24, 78, 69, 78, 199, 79, 17, 83, 202, 84, 56, 91, 174, + 95, 19, 96, 37, 101, 81, 103, 61, 108, 66, 108, 114, 108, 227, 112, 120, 116, 3, 122, 118, 122, 174, 123, 8, 125, 26, + 124, 254, 125, 102, 101, 231, 114, 91, 83, 187, 92, 69, 93, 232, 98, 210, 98, 224, 99, 25, 110, 32, 134, 90, 138, 49, + 141, 221, 146, 248, 111, 1, 121, 166, 155, 90, 78, 168, 78, 171, 78, 172, 79, 155, 79, 160, 80, 209, 81, 71, 122, 246, + 81, 113, 81, 246, 83, 84, 83, 33, 83, 127, 83, 235, 85, 172, 88, 131, 92, 225, 95, 55, 95, 74, 96, 47, 96, 80, 96, 109, + 99, 31, 101, 89, 106, 75, 108, 193, 114, 194, 114, 237, 119, 239, 128, 248, 129, 5, 130, 8, 133, 78, 144, 247, 147, + 225, 151, 255, 153, 87, 154, 90, 78, 240, 81, 221, 92, 45, 102, 129, 105, 109, 92, 64, 102, 242, 105, 117, 115, 137, + 104, 80, 124, 129, 80, 197, 82, 228, 87, 71, 93, 254, 147, 38, 101, 164, 107, 35, 107, 61, 116, 52, 121, 129, 121, 189, + 123, 75, 125, 202, 130, 185, 131, 204, 136, 127, 137, 95, 139, 57, 143, 209, 145, 209, 84, 31, 146, 128, 78, 93, 80, + 54, 83, 229, 83, 58, 114, 215, 115, 150, 119, 233, 130, 230, 142, 175, 153, 198, 153, 200, 153, 210, 81, 119, 97, 26, + 134, 94, 85, 176, 122, 122, 80, 118, 91, 211, 144, 71, 150, 133, 78, 50, 106, 219, 145, 231, 92, 81, 92, 72, 99, 152, + 122, 159, 108, 147, 151, 116, 143, 97, 122, 170, 113, 138, 150, 136, 124, 130, 104, 23, 126, 112, 104, 81, 147, 108, + 82, 242, 84, 27, 133, 171, 138, 19, 127, 164, 142, 205, 144, 225, 83, 102, 136, 136, 121, 65, 79, 194, 80, 190, 82, + 17, 81, 68, 85, 83, 87, 45, 115, 234, 87, 139, 89, 81, 95, 98, 95, 132, 96, 117, 97, 118, 97, 103, 97, 169, 99, 178, + 100, 58, 101, 108, 102, 111, 104, 66, 110, 19, 117, 102, 122, 61, 124, 251, 125, 76, 125, 153, 126, 75, 127, 107, 131, + 14, 131, 74, 134, 205, 138, 8, 138, 99, 139, 102, 142, 253, 152, 26, 157, 143, 130, 184, 143, 206, 155, 232, 82, 135, + 98, 31, 100, 131, 111, 192, 150, 153, 104, 65, 80, 145, 107, 32, 108, 122, 111, 84, 122, 116, 125, 80, 136, 64, 138, + 35, 103, 8, 78, 246, 80, 57, 80, 38, 80, 101, 81, 124, 82, 56, 82, 99, 85, 167, 87, 15, 88, 5, 90, 204, 94, 250, 97, + 178, 97, 248, 98, 243, 99, 114, 105, 28, 106, 41, 114, 125, 114, 172, 115, 46, 120, 20, 120, 111, 125, 121, 119, 12, + 128, 169, 137, 139, 139, 25, 140, 226, 142, 210, 144, 99, 147, 117, 150, 122, 152, 85, 154, 19, 158, 120, 81, 67, 83, + 159, 83, 179, 94, 123, 95, 38, 110, 27, 110, 144, 115, 132, 115, 254, 125, 67, 130, 55, 138, 0, 138, 250, 150, 80, 78, + 78, 80, 11, 83, 228, 84, 124, 86, 250, 89, 209, 91, 100, 93, 241, 94, 171, 95, 39, 98, 56, 101, 69, 103, 175, 110, 86, + 114, 208, 124, 202, 136, 180, 128, 161, 128, 225, 131, 240, 134, 78, 138, 135, 141, 232, 146, 55, 150, 199, 152, 103, + 159, 19, 78, 148, 78, 146, 79, 13, 83, 72, 84, 73, 84, 62, 90, 47, 95, 140, 95, 161, 96, 159, 104, 167, 106, 142, 116, + 90, 120, 129, 138, 158, 138, 164, 139, 119, 145, 144, 78, 94, 155, 201, 78, 164, 79, 124, 79, 175, 80, 25, 80, 22, 81, + 73, 81, 108, 82, 159, 82, 185, 82, 254, 83, 154, 83, 227, 84, 17, 84, 14, 85, 137, 87, 81, 87, 162, 89, 125, 91, 84, + 91, 93, 91, 143, 93, 229, 93, 231, 93, 247, 94, 120, 94, 131, 94, 154, 94, 183, 95, 24, 96, 82, 97, 76, 98, 151, 98, + 216, 99, 167, 101, 59, 102, 2, 102, 67, 102, 244, 103, 109, 104, 33, 104, 151, 105, 203, 108, 95, 109, 42, 109, 105, + 110, 47, 110, 157, 117, 50, 118, 135, 120, 108, 122, 63, 124, 224, 125, 5, 125, 24, 125, 94, 125, 177, 128, 21, 128, + 3, 128, 175, 128, 177, 129, 84, 129, 143, 130, 42, 131, 82, 136, 76, 136, 97, 139, 27, 140, 162, 140, 252, 144, 202, + 145, 117, 146, 113, 120, 63, 146, 252, 149, 164, 150, 77, 152, 5, 153, 153, 154, 216, 157, 59, 82, 91, 82, 171, 83, + 247, 84, 8, 88, 213, 98, 247, 111, 224, 140, 106, 143, 95, 158, 185, 81, 75, 82, 59, 84, 74, 86, 253, 122, 64, 145, + 119, 157, 96, 158, 210, 115, 68, 111, 9, 129, 112, 117, 17, 95, 253, 96, 218, 154, 168, 114, 219, 143, 188, 107, 100, + 152, 3, 78, 202, 86, 240, 87, 100, 88, 190, 90, 90, 96, 104, 97, 199, 102, 15, 102, 6, 104, 57, 104, 177, 109, 247, + 117, 213, 125, 58, 130, 110, 155, 66, 78, 155, 79, 80, 83, 201, 85, 6, 93, 111, 93, 230, 93, 238, 103, 251, 108, 153, + 116, 115, 120, 2, 138, 80, 147, 150, 136, 223, 87, 80, 94, 167, 99, 43, 80, 181, 80, 172, 81, 141, 103, 0, 84, 201, + 88, 94, 89, 187, 91, 176, 95, 105, 98, 77, 99, 161, 104, 61, 107, 115, 110, 8, 112, 125, 145, 199, 114, 128, 120, 21, + 120, 38, 121, 109, 101, 142, 125, 48, 131, 220, 136, 193, 143, 9, 150, 155, 82, 100, 87, 40, 103, 80, 127, 106, 140, + 161, 81, 180, 87, 66, 150, 42, 88, 58, 105, 138, 128, 180, 84, 178, 93, 14, 87, 252, 120, 149, 157, 250, 79, 92, 82, + 74, 84, 139, 100, 62, 102, 40, 103, 20, 103, 245, 122, 132, 123, 86, 125, 34, 147, 47, 104, 92, 155, 173, 123, 57, 83, + 25, 81, 138, 82, 55, 91, 223, 98, 246, 100, 174, 100, 230, 103, 45, 107, 186, 133, 169, 150, 209, 118, 144, 155, 214, + 99, 76, 147, 6, 155, 171, 118, 191, 102, 82, 78, 9, 80, 152, 83, 194, 92, 113, 96, 232, 100, 146, 101, 99, 104, 95, + 113, 230, 115, 202, 117, 35, 123, 151, 126, 130, 134, 149, 139, 131, 140, 219, 145, 120, 153, 16, 101, 172, 102, 171, + 107, 139, 78, 213, 78, 212, 79, 58, 79, 127, 82, 58, 83, 248, 83, 242, 85, 227, 86, 219, 88, 235, 89, 203, 89, 201, + 89, 255, 91, 80, 92, 77, 94, 2, 94, 43, 95, 215, 96, 29, 99, 7, 101, 47, 91, 92, 101, 175, 101, 189, 101, 232, 103, + 157, 107, 98, 107, 123, 108, 15, 115, 69, 121, 73, 121, 193, 124, 248, 125, 25, 125, 43, 128, 162, 129, 2, 129, 243, + 137, 150, 138, 94, 138, 105, 138, 102, 138, 140, 138, 238, 140, 199, 140, 220, 150, 204, 152, 252, 107, 111, 78, 139, + 79, 60, 79, 141, 81, 80, 91, 87, 91, 250, 97, 72, 99, 1, 102, 66, 107, 33, 110, 203, 108, 187, 114, 62, 116, 189, 117, + 212, 120, 193, 121, 58, 128, 12, 128, 51, 129, 234, 132, 148, 143, 158, 108, 80, 158, 127, 95, 15, 139, 88, 157, 43, + 122, 250, 142, 248, 91, 141, 150, 235, 78, 3, 83, 241, 87, 247, 89, 49, 90, 201, 91, 164, 96, 137, 110, 127, 111, 6, + 117, 190, 140, 234, 91, 159, 133, 0, 123, 224, 80, 114, 103, 244, 130, 157, 92, 97, 133, 74, 126, 30, 130, 14, 81, 153, + 92, 4, 99, 104, 141, 102, 101, 156, 113, 110, 121, 62, 125, 23, 128, 5, 139, 29, 142, 202, 144, 110, 134, 199, 144, + 170, 80, 31, 82, 250, 92, 58, 103, 83, 112, 124, 114, 53, 145, 76, 145, 200, 147, 43, 130, 229, 91, 194, 95, 49, 96, + 249, 78, 59, 83, 214, 91, 136, 98, 75, 103, 49, 107, 138, 114, 233, 115, 224, 122, 46, 129, 107, 141, 163, 145, 82, + 153, 150, 81, 18, 83, 215, 84, 106, 91, 255, 99, 136, 106, 57, 125, 172, 151, 0, 86, 218, 83, 206, 84, 104, 91, 151, + 92, 49, 93, 222, 79, 238, 97, 1, 98, 254, 109, 50, 121, 192, 121, 203, 125, 66, 126, 77, 127, 210, 129, 237, 130, 31, + 132, 144, 136, 70, 137, 114, 139, 144, 142, 116, 143, 47, 144, 49, 145, 75, 145, 108, 150, 198, 145, 156, 78, 192, 79, + 79, 81, 69, 83, 65, 95, 147, 98, 14, 103, 212, 108, 65, 110, 11, 115, 99, 126, 38, 145, 205, 146, 131, 83, 212, 89, + 25, 91, 191, 109, 209, 121, 93, 126, 46, 124, 155, 88, 126, 113, 159, 81, 250, 136, 83, 143, 240, 79, 202, 92, 251, + 102, 37, 119, 172, 122, 227, 130, 28, 153, 255, 81, 198, 95, 170, 101, 236, 105, 111, 107, 137, 109, 243, 110, 150, + 111, 100, 118, 254, 125, 20, 93, 225, 144, 117, 145, 135, 152, 6, 81, 230, 82, 29, 98, 64, 102, 145, 102, 217, 110, + 26, 94, 182, 125, 210, 127, 114, 102, 248, 133, 175, 133, 247, 138, 248, 82, 169, 83, 217, 89, 115, 94, 143, 95, 144, + 96, 85, 146, 228, 150, 100, 80, 183, 81, 31, 82, 221, 83, 32, 83, 71, 83, 236, 84, 232, 85, 70, 85, 49, 86, 23, 89, + 104, 89, 190, 90, 60, 91, 181, 92, 6, 92, 15, 92, 17, 92, 26, 94, 132, 94, 138, 94, 224, 95, 112, 98, 127, 98, 132, + 98, 219, 99, 140, 99, 119, 102, 7, 102, 12, 102, 45, 102, 118, 103, 126, 104, 162, 106, 31, 106, 53, 108, 188, 109, + 136, 110, 9, 110, 88, 113, 60, 113, 38, 113, 103, 117, 199, 119, 1, 120, 93, 121, 1, 121, 101, 121, 240, 122, 224, 123, + 17, 124, 167, 125, 57, 128, 150, 131, 214, 132, 139, 133, 73, 136, 93, 136, 243, 138, 31, 138, 60, 138, 84, 138, 115, + 140, 97, 140, 222, 145, 164, 146, 102, 147, 126, 148, 24, 150, 156, 151, 152, 78, 10, 78, 8, 78, 30, 78, 87, 81, 151, + 82, 112, 87, 206, 88, 52, 88, 204, 91, 34, 94, 56, 96, 197, 100, 254, 103, 97, 103, 86, 109, 68, 114, 182, 117, 115, + 122, 99, 132, 184, 139, 114, 145, 184, 147, 32, 86, 49, 87, 244, 152, 254, 98, 237, 105, 13, 107, 150, 113, 237, 126, + 84, 128, 119, 130, 114, 137, 230, 152, 223, 135, 85, 143, 177, 92, 59, 79, 56, 79, 225, 79, 181, 85, 7, 90, 32, 91, + 221, 91, 233, 95, 195, 97, 78, 99, 47, 101, 176, 102, 75, 104, 238, 105, 155, 109, 120, 109, 241, 117, 51, 117, 185, + 119, 31, 121, 94, 121, 230, 125, 51, 129, 227, 130, 175, 133, 170, 137, 170, 138, 58, 142, 171, 143, 155, 144, 50, 145, + 221, 151, 7, 78, 186, 78, 193, 82, 3, 88, 117, 88, 236, 92, 11, 117, 26, 92, 61, 129, 78, 138, 10, 143, 197, 150, 99, + 151, 109, 123, 37, 138, 207, 152, 8, 145, 98, 86, 243, 83, 168, 144, 23, 84, 57, 87, 130, 94, 37, 99, 168, 108, 52, + 112, 138, 119, 97, 124, 139, 127, 224, 136, 112, 144, 66, 145, 84, 147, 16, 147, 24, 150, 143, 116, 94, 154, 196, 93, + 7, 93, 105, 101, 112, 103, 162, 141, 168, 150, 219, 99, 110, 103, 73, 105, 25, 131, 197, 152, 23, 150, 192, 136, 254, + 111, 132, 100, 122, 91, 248, 78, 22, 112, 44, 117, 93, 102, 47, 81, 196, 82, 54, 82, 226, 89, 211, 95, 129, 96, 39, + 98, 16, 101, 63, 101, 116, 102, 31, 102, 116, 104, 242, 104, 22, 107, 99, 110, 5, 114, 114, 117, 31, 118, 219, 124, + 190, 128, 86, 88, 240, 136, 253, 137, 127, 138, 160, 138, 147, 138, 203, 144, 29, 145, 146, 151, 82, 151, 89, 101, 137, + 122, 14, 129, 6, 150, 187, 94, 45, 96, 220, 98, 26, 101, 165, 102, 20, 103, 144, 119, 243, 122, 77, 124, 77, 126, 62, + 129, 10, 140, 172, 141, 100, 141, 225, 142, 95, 120, 169, 82, 7, 98, 217, 99, 165, 100, 66, 98, 152, 138, 45, 122, 131, + 123, 192, 138, 172, 150, 234, 125, 118, 130, 12, 135, 73, 78, 217, 81, 72, 83, 67, 83, 96, 91, 163, 92, 2, 92, 22, 93, + 221, 98, 38, 98, 71, 100, 176, 104, 19, 104, 52, 108, 201, 109, 69, 109, 23, 103, 211, 111, 92, 113, 78, 113, 125, 101, + 203, 122, 127, 123, 173, 125, 218, 126, 74, 127, 168, 129, 122, 130, 27, 130, 57, 133, 166, 138, 110, 140, 206, 141, + 245, 144, 120, 144, 119, 146, 173, 146, 145, 149, 131, 155, 174, 82, 77, 85, 132, 111, 56, 113, 54, 81, 104, 121, 133, + 126, 85, 129, 179, 124, 206, 86, 76, 88, 81, 92, 168, 99, 170, 102, 254, 102, 253, 105, 90, 114, 217, 117, 143, 117, + 142, 121, 14, 121, 86, 121, 223, 124, 151, 125, 32, 125, 68, 134, 7, 138, 52, 150, 59, 144, 97, 159, 32, 80, 231, 82, + 117, 83, 204, 83, 226, 80, 9, 85, 170, 88, 238, 89, 79, 114, 61, 91, 139, 92, 100, 83, 29, 96, 227, 96, 243, 99, 92, + 99, 131, 99, 63, 99, 187, 100, 205, 101, 233, 102, 249, 93, 227, 105, 205, 105, 253, 111, 21, 113, 229, 78, 137, 117, + 233, 118, 248, 122, 147, 124, 223, 125, 207, 125, 156, 128, 97, 131, 73, 131, 88, 132, 108, 132, 188, 133, 251, 136, + 197, 141, 112, 144, 1, 144, 109, 147, 151, 151, 28, 154, 18, 80, 207, 88, 151, 97, 142, 129, 211, 133, 53, 141, 8, 144, + 32, 79, 195, 80, 116, 82, 71, 83, 115, 96, 111, 99, 73, 103, 95, 110, 44, 141, 179, 144, 31, 79, 215, 92, 94, 140, 202, + 101, 207, 125, 154, 83, 82, 136, 150, 81, 118, 99, 195, 91, 88, 91, 107, 92, 10, 100, 13, 103, 81, 144, 92, 78, 214, + 89, 26, 89, 42, 108, 112, 138, 81, 85, 62, 88, 21, 89, 165, 96, 240, 98, 83, 103, 193, 130, 53, 105, 85, 150, 64, 153, + 196, 154, 40, 79, 83, 88, 6, 91, 254, 128, 16, 92, 177, 94, 47, 95, 133, 96, 32, 97, 75, 98, 52, 102, 255, 108, 240, + 110, 222, 128, 206, 129, 127, 130, 212, 136, 139, 140, 184, 144, 0, 144, 46, 150, 138, 158, 219, 155, 219, 78, 227, + 83, 240, 89, 39, 123, 44, 145, 141, 152, 76, 157, 249, 110, 221, 112, 39, 83, 83, 85, 68, 91, 133, 98, 88, 98, 158, + 98, 211, 108, 162, 111, 239, 116, 34, 138, 23, 148, 56, 111, 193, 138, 254, 131, 56, 81, 231, 134, 248, 83, 234, 83, + 233, 79, 70, 144, 84, 143, 176, 89, 106, 129, 49, 93, 253, 122, 234, 143, 191, 104, 218, 140, 55, 114, 248, 156, 72, + 106, 61, 138, 176, 78, 57, 83, 88, 86, 6, 87, 102, 98, 197, 99, 162, 101, 230, 107, 78, 109, 225, 110, 91, 112, 173, + 119, 237, 122, 239, 123, 170, 125, 187, 128, 61, 128, 198, 134, 203, 138, 149, 147, 91, 86, 227, 88, 199, 95, 62, 101, + 173, 102, 150, 106, 128, 107, 181, 117, 55, 138, 199, 80, 36, 119, 229, 87, 48, 95, 27, 96, 101, 102, 122, 108, 96, + 117, 244, 122, 26, 127, 110, 129, 244, 135, 24, 144, 69, 153, 179, 123, 201, 117, 92, 122, 249, 123, 81, 132, 196, 144, + 16, 121, 233, 122, 146, 131, 54, 90, 225, 119, 64, 78, 45, 78, 242, 91, 153, 95, 224, 98, 189, 102, 60, 103, 241, 108, + 232, 134, 107, 136, 119, 138, 59, 145, 78, 146, 243, 153, 208, 106, 23, 112, 38, 115, 42, 130, 231, 132, 87, 140, 175, + 78, 1, 81, 70, 81, 203, 85, 139, 91, 245, 94, 22, 94, 51, 94, 129, 95, 20, 95, 53, 95, 107, 95, 180, 97, 242, 99, 17, + 102, 162, 103, 29, 111, 110, 114, 82, 117, 58, 119, 58, 128, 116, 129, 57, 129, 120, 135, 118, 138, 191, 138, 220, 141, + 133, 141, 243, 146, 154, 149, 119, 152, 2, 156, 229, 82, 197, 99, 87, 118, 244, 103, 21, 108, 136, 115, 205, 140, 195, + 147, 174, 150, 115, 109, 37, 88, 156, 105, 14, 105, 204, 143, 253, 147, 154, 117, 219, 144, 26, 88, 90, 104, 2, 99, + 180, 105, 251, 79, 67, 111, 44, 103, 216, 143, 187, 133, 38, 125, 180, 147, 84, 105, 63, 111, 112, 87, 106, 88, 247, + 91, 44, 125, 44, 114, 42, 84, 10, 145, 227, 157, 180, 78, 173, 79, 78, 80, 92, 80, 117, 82, 67, 140, 158, 84, 72, 88, + 36, 91, 154, 94, 29, 94, 149, 94, 173, 94, 247, 95, 31, 96, 140, 98, 181, 99, 58, 99, 208, 104, 175, 108, 64, 120, 135, + 121, 142, 122, 11, 125, 224, 130, 71, 138, 2, 138, 230, 142, 68, 144, 19, 144, 184, 145, 45, 145, 216, 159, 14, 108, + 229, 100, 88, 100, 226, 101, 117, 110, 244, 118, 132, 123, 27, 144, 105, 147, 209, 110, 186, 84, 242, 95, 185, 100, + 164, 143, 77, 143, 237, 146, 68, 81, 120, 88, 107, 89, 41, 92, 85, 94, 151, 109, 251, 126, 143, 117, 28, 140, 188, 142, + 226, 152, 91, 112, 185, 79, 29, 107, 191, 111, 177, 117, 48, 150, 251, 81, 78, 84, 16, 88, 53, 88, 87, 89, 172, 92, + 96, 95, 146, 101, 151, 103, 92, 110, 33, 118, 123, 131, 223, 140, 237, 144, 20, 144, 253, 147, 77, 120, 37, 120, 58, + 82, 170, 94, 166, 87, 31, 89, 116, 96, 18, 80, 18, 81, 90, 81, 172, 81, 205, 82, 0, 85, 16, 88, 84, 88, 88, 89, 87, + 91, 149, 92, 246, 93, 139, 96, 188, 98, 149, 100, 45, 103, 113, 104, 67, 104, 188, 104, 223, 118, 215, 109, 216, 110, + 111, 109, 155, 112, 111, 113, 200, 95, 83, 117, 216, 121, 119, 123, 73, 123, 84, 123, 82, 124, 214, 125, 113, 82, 48, + 132, 99, 133, 105, 133, 228, 138, 14, 139, 4, 140, 70, 142, 15, 144, 3, 144, 15, 148, 25, 150, 118, 152, 45, 154, 48, + 149, 216, 80, 205, 82, 213, 84, 12, 88, 2, 92, 14, 97, 167, 100, 158, 109, 30, 119, 179, 122, 229, 128, 244, 132, 4, + 144, 83, 146, 133, 92, 224, 157, 7, 83, 63, 95, 151, 95, 179, 109, 156, 114, 121, 119, 99, 121, 191, 123, 228, 107, + 210, 114, 236, 138, 173, 104, 3, 106, 97, 81, 248, 122, 129, 105, 52, 92, 74, 156, 246, 130, 235, 91, 197, 145, 73, + 112, 30, 86, 120, 92, 111, 96, 199, 101, 102, 108, 140, 140, 90, 144, 65, 152, 19, 84, 81, 102, 199, 146, 13, 89, 72, + 144, 163, 81, 133, 78, 77, 81, 234, 133, 153, 139, 14, 112, 88, 99, 122, 147, 75, 105, 98, 153, 180, 126, 4, 117, 119, + 83, 87, 105, 96, 142, 223, 150, 227, 108, 93, 78, 140, 92, 60, 95, 16, 143, 233, 83, 2, 140, 209, 128, 137, 134, 121, + 94, 255, 101, 229, 78, 115, 81, 101, 89, 130, 92, 63, 151, 238, 78, 251, 89, 138, 95, 205, 138, 141, 111, 225, 121, + 176, 121, 98, 91, 231, 132, 113, 115, 43, 113, 177, 94, 116, 95, 245, 99, 123, 100, 154, 113, 195, 124, 152, 78, 67, + 94, 252, 78, 75, 87, 220, 86, 162, 96, 169, 111, 195, 125, 13, 128, 253, 129, 51, 129, 191, 143, 178, 137, 151, 134, + 164, 93, 244, 98, 138, 100, 173, 137, 135, 103, 119, 108, 226, 109, 62, 116, 54, 120, 52, 90, 70, 127, 117, 130, 173, + 153, 172, 79, 243, 94, 195, 98, 221, 99, 146, 101, 87, 103, 111, 118, 195, 114, 76, 128, 204, 128, 186, 143, 41, 145, + 77, 80, 13, 87, 249, 90, 146, 104, 133, 105, 115, 113, 100, 114, 253, 140, 183, 88, 242, 140, 224, 150, 106, 144, 25, + 135, 127, 121, 228, 119, 231, 132, 41, 79, 47, 82, 101, 83, 90, 98, 205, 103, 207, 108, 202, 118, 125, 123, 148, 124, + 149, 130, 54, 133, 132, 143, 235, 102, 221, 111, 32, 114, 6, 126, 27, 131, 171, 153, 193, 158, 166, 81, 253, 123, 177, + 120, 114, 123, 184, 128, 135, 123, 72, 106, 232, 94, 97, 128, 140, 117, 81, 117, 96, 81, 107, 146, 98, 110, 140, 118, + 122, 145, 151, 154, 234, 79, 16, 127, 112, 98, 156, 123, 79, 149, 165, 156, 233, 86, 122, 88, 89, 134, 228, 150, 188, + 79, 52, 82, 36, 83, 74, 83, 205, 83, 219, 94, 6, 100, 44, 101, 145, 103, 127, 108, 62, 108, 78, 114, 72, 114, 175, 115, + 237, 117, 84, 126, 65, 130, 44, 133, 233, 140, 169, 123, 196, 145, 198, 113, 105, 152, 18, 152, 239, 99, 61, 102, 105, + 117, 106, 118, 228, 120, 208, 133, 67, 134, 238, 83, 42, 83, 81, 84, 38, 89, 131, 94, 135, 95, 124, 96, 178, 98, 73, + 98, 121, 98, 171, 101, 144, 107, 212, 108, 204, 117, 178, 118, 174, 120, 145, 121, 216, 125, 203, 127, 119, 128, 165, + 136, 171, 138, 185, 140, 187, 144, 127, 151, 94, 152, 219, 106, 11, 124, 56, 80, 153, 92, 62, 95, 174, 103, 135, 107, + 216, 116, 53, 119, 9, 127, 142, 159, 59, 103, 202, 122, 23, 83, 57, 117, 139, 154, 237, 95, 102, 129, 157, 131, 241, + 128, 152, 95, 60, 95, 197, 117, 98, 123, 70, 144, 60, 104, 103, 89, 235, 90, 155, 125, 16, 118, 126, 139, 44, 79, 245, + 95, 106, 106, 25, 108, 55, 111, 2, 116, 226, 121, 104, 136, 104, 138, 85, 140, 121, 94, 223, 99, 207, 117, 197, 121, + 210, 130, 215, 147, 40, 146, 242, 132, 156, 134, 237, 156, 45, 84, 193, 95, 108, 101, 140, 109, 92, 112, 21, 140, 167, + 140, 211, 152, 59, 101, 79, 116, 246, 78, 13, 78, 216, 87, 224, 89, 43, 90, 102, 91, 204, 81, 168, 94, 3, 94, 156, 96, + 22, 98, 118, 101, 119, 101, 167, 102, 110, 109, 110, 114, 54, 123, 38, 129, 80, 129, 154, 130, 153, 139, 92, 140, 160, + 140, 230, 141, 116, 150, 28, 150, 68, 79, 174, 100, 171, 107, 102, 130, 30, 132, 97, 133, 106, 144, 232, 92, 1, 105, + 83, 152, 168, 132, 122, 133, 87, 79, 15, 82, 111, 95, 169, 94, 69, 103, 13, 121, 143, 129, 121, 137, 7, 137, 134, 109, + 245, 95, 23, 98, 85, 108, 184, 78, 207, 114, 105, 155, 146, 82, 6, 84, 59, 86, 116, 88, 179, 97, 164, 98, 110, 113, + 26, 89, 110, 124, 137, 124, 222, 125, 27, 150, 240, 101, 135, 128, 94, 78, 25, 79, 117, 81, 117, 88, 64, 94, 99, 94, + 115, 95, 10, 103, 196, 78, 38, 133, 61, 149, 137, 150, 91, 124, 115, 152, 1, 80, 251, 88, 193, 118, 86, 120, 167, 82, + 37, 119, 165, 133, 17, 123, 134, 80, 79, 89, 9, 114, 71, 123, 199, 125, 232, 143, 186, 143, 212, 144, 77, 79, 191, 82, + 201, 90, 41, 95, 1, 151, 173, 79, 221, 130, 23, 146, 234, 87, 3, 99, 85, 107, 105, 117, 43, 136, 220, 143, 20, 122, + 66, 82, 223, 88, 147, 97, 85, 98, 10, 102, 174, 107, 205, 124, 63, 131, 233, 80, 35, 79, 248, 83, 5, 84, 70, 88, 49, + 89, 73, 91, 157, 92, 240, 92, 239, 93, 41, 94, 150, 98, 177, 99, 103, 101, 62, 101, 185, 103, 11, 108, 213, 108, 225, + 112, 249, 120, 50, 126, 43, 128, 222, 130, 179, 132, 12, 132, 236, 135, 2, 137, 18, 138, 42, 140, 74, 144, 166, 146, + 210, 152, 253, 156, 243, 157, 108, 78, 79, 78, 161, 80, 141, 82, 86, 87, 74, 89, 168, 94, 61, 95, 216, 95, 217, 98, + 63, 102, 180, 103, 27, 103, 208, 104, 210, 81, 146, 125, 33, 128, 170, 129, 168, 139, 0, 140, 140, 140, 191, 146, 126, + 150, 50, 84, 32, 152, 44, 83, 23, 80, 213, 83, 92, 88, 168, 100, 178, 103, 52, 114, 103, 119, 102, 122, 70, 145, 230, + 82, 195, 108, 161, 107, 134, 88, 0, 94, 76, 89, 84, 103, 44, 127, 251, 81, 225, 118, 198, 100, 105, 120, 232, 155, 84, + 158, 187, 87, 203, 89, 185, 102, 39, 103, 154, 107, 206, 84, 233, 105, 217, 94, 85, 129, 156, 103, 149, 155, 170, 103, + 254, 156, 82, 104, 93, 78, 166, 79, 227, 83, 200, 98, 185, 103, 43, 108, 171, 143, 196, 79, 173, 126, 109, 158, 191, + 78, 7, 97, 98, 110, 128, 111, 43, 133, 19, 84, 115, 103, 42, 155, 69, 93, 243, 123, 149, 92, 172, 91, 198, 135, 28, + 110, 74, 132, 209, 122, 20, 129, 8, 89, 153, 124, 141, 108, 17, 119, 32, 82, 217, 89, 34, 113, 33, 114, 95, 119, 219, + 151, 39, 157, 97, 105, 11, 90, 127, 90, 24, 81, 165, 84, 13, 84, 125, 102, 14, 118, 223, 143, 247, 146, 152, 156, 244, + 89, 234, 114, 93, 110, 197, 81, 77, 104, 201, 125, 191, 125, 236, 151, 98, 158, 186, 100, 120, 106, 33, 131, 2, 89, + 132, 91, 95, 107, 219, 115, 27, 118, 242, 125, 178, 128, 23, 132, 153, 81, 50, 103, 40, 158, 217, 118, 238, 103, 98, + 82, 255, 153, 5, 92, 36, 98, 59, 124, 126, 140, 176, 85, 79, 96, 182, 125, 11, 149, 128, 83, 1, 78, 95, 81, 182, 89, + 28, 114, 58, 128, 54, 145, 206, 95, 37, 119, 226, 83, 132, 95, 121, 125, 4, 133, 172, 138, 51, 142, 141, 151, 86, 103, + 243, 133, 174, 148, 83, 97, 9, 97, 8, 108, 185, 118, 82, 138, 237, 143, 56, 85, 47, 79, 81, 81, 42, 82, 199, 83, 203, + 91, 165, 94, 125, 96, 160, 97, 130, 99, 214, 103, 9, 103, 218, 110, 103, 109, 140, 115, 54, 115, 55, 117, 49, 121, 80, + 136, 213, 138, 152, 144, 74, 144, 145, 144, 245, 150, 196, 135, 141, 89, 21, 78, 136, 79, 89, 78, 14, 138, 137, 143, + 63, 152, 16, 80, 173, 94, 124, 89, 150, 91, 185, 94, 184, 99, 218, 99, 250, 100, 193, 102, 220, 105, 74, 105, 216, 109, + 11, 110, 182, 113, 148, 117, 40, 122, 175, 127, 138, 128, 0, 132, 73, 132, 201, 137, 129, 139, 33, 142, 10, 144, 101, + 150, 125, 153, 10, 97, 126, 98, 145, 107, 50, 108, 131, 109, 116, 127, 204, 127, 252, 109, 192, 127, 133, 135, 186, + 136, 248, 103, 101, 131, 177, 152, 60, 150, 247, 109, 27, 125, 97, 132, 61, 145, 106, 78, 113, 83, 117, 93, 80, 107, + 4, 111, 235, 133, 205, 134, 45, 137, 167, 82, 41, 84, 15, 92, 101, 103, 78, 104, 168, 116, 6, 116, 131, 117, 226, 136, + 207, 136, 225, 145, 204, 150, 226, 150, 120, 95, 139, 115, 135, 122, 203, 132, 78, 99, 160, 117, 101, 82, 137, 109, + 65, 110, 156, 116, 9, 117, 89, 120, 107, 124, 146, 150, 134, 122, 220, 159, 141, 79, 182, 97, 110, 101, 197, 134, 92, + 78, 134, 78, 174, 80, 218, 78, 33, 81, 204, 91, 238, 101, 153, 104, 129, 109, 188, 115, 31, 118, 66, 119, 173, 122, + 28, 124, 231, 130, 111, 138, 210, 144, 124, 145, 207, 150, 117, 152, 24, 82, 155, 125, 209, 80, 43, 83, 152, 103, 151, + 109, 203, 113, 208, 116, 51, 129, 232, 143, 42, 150, 163, 156, 87, 158, 159, 116, 96, 88, 65, 109, 153, 125, 47, 152, + 94, 78, 228, 79, 54, 79, 139, 81, 183, 82, 177, 93, 186, 96, 28, 115, 178, 121, 60, 130, 211, 146, 52, 150, 183, 150, + 246, 151, 10, 158, 151, 159, 98, 102, 166, 107, 116, 82, 23, 82, 163, 112, 200, 136, 194, 94, 201, 96, 75, 97, 144, + 111, 35, 113, 73, 124, 62, 125, 244, 128, 111, 132, 238, 144, 35, 147, 44, 84, 66, 155, 111, 106, 211, 112, 137, 140, + 194, 141, 239, 151, 50, 82, 180, 90, 65, 94, 202, 95, 4, 103, 23, 105, 124, 105, 148, 109, 106, 111, 15, 114, 98, 114, + 252, 123, 237, 128, 1, 128, 126, 135, 75, 144, 206, 81, 109, 158, 147, 121, 132, 128, 139, 147, 50, 138, 214, 80, 45, + 84, 140, 138, 113, 107, 106, 140, 196, 129, 7, 96, 209, 103, 160, 157, 242, 78, 153, 78, 152, 156, 16, 138, 107, 133, + 193, 133, 104, 105, 0, 110, 126, 120, 151, 129, 85, 95, 12, 78, 16, 78, 21, 78, 42, 78, 49, 78, 54, 78, 60, 78, 63, + 78, 66, 78, 86, 78, 88, 78, 130, 78, 133, 140, 107, 78, 138, 130, 18, 95, 13, 78, 142, 78, 158, 78, 159, 78, 160, 78, + 162, 78, 176, 78, 179, 78, 182, 78, 206, 78, 205, 78, 196, 78, 198, 78, 194, 78, 215, 78, 222, 78, 237, 78, 223, 78, + 247, 79, 9, 79, 90, 79, 48, 79, 91, 79, 93, 79, 87, 79, 71, 79, 118, 79, 136, 79, 143, 79, 152, 79, 123, 79, 105, 79, + 112, 79, 145, 79, 111, 79, 134, 79, 150, 81, 24, 79, 212, 79, 223, 79, 206, 79, 216, 79, 219, 79, 209, 79, 218, 79, + 208, 79, 228, 79, 229, 80, 26, 80, 40, 80, 20, 80, 42, 80, 37, 80, 5, 79, 28, 79, 246, 80, 33, 80, 41, 80, 44, 79, 254, + 79, 239, 80, 17, 80, 6, 80, 67, 80, 71, 103, 3, 80, 85, 80, 80, 80, 72, 80, 90, 80, 86, 80, 108, 80, 120, 80, 128, 80, + 154, 80, 133, 80, 180, 80, 178, 80, 201, 80, 202, 80, 179, 80, 194, 80, 214, 80, 222, 80, 229, 80, 237, 80, 227, 80, + 238, 80, 249, 80, 245, 81, 9, 81, 1, 81, 2, 81, 22, 81, 21, 81, 20, 81, 26, 81, 33, 81, 58, 81, 55, 81, 60, 81, 59, + 81, 63, 81, 64, 81, 82, 81, 76, 81, 84, 81, 98, 122, 248, 81, 105, 81, 106, 81, 110, 81, 128, 81, 130, 86, 216, 81, + 140, 81, 137, 81, 143, 81, 145, 81, 147, 81, 149, 81, 150, 81, 164, 81, 166, 81, 162, 81, 169, 81, 170, 81, 171, 81, + 179, 81, 177, 81, 178, 81, 176, 81, 181, 81, 189, 81, 197, 81, 201, 81, 219, 81, 224, 134, 85, 81, 233, 81, 237, 81, + 240, 81, 245, 81, 254, 82, 4, 82, 11, 82, 20, 82, 14, 82, 39, 82, 42, 82, 46, 82, 51, 82, 57, 82, 79, 82, 68, 82, 75, + 82, 76, 82, 94, 82, 84, 82, 106, 82, 116, 82, 105, 82, 115, 82, 127, 82, 125, 82, 141, 82, 148, 82, 146, 82, 113, 82, + 136, 82, 145, 143, 168, 143, 167, 82, 172, 82, 173, 82, 188, 82, 181, 82, 193, 82, 205, 82, 215, 82, 222, 82, 227, 82, + 230, 152, 237, 82, 224, 82, 243, 82, 245, 82, 248, 82, 249, 83, 6, 83, 8, 117, 56, 83, 13, 83, 16, 83, 15, 83, 21, 83, + 26, 83, 35, 83, 47, 83, 49, 83, 51, 83, 56, 83, 64, 83, 70, 83, 69, 78, 23, 83, 73, 83, 77, 81, 214, 83, 94, 83, 105, + 83, 110, 89, 24, 83, 123, 83, 119, 83, 130, 83, 150, 83, 160, 83, 166, 83, 165, 83, 174, 83, 176, 83, 182, 83, 195, + 124, 18, 150, 217, 83, 223, 102, 252, 113, 238, 83, 238, 83, 232, 83, 237, 83, 250, 84, 1, 84, 61, 84, 64, 84, 44, 84, + 45, 84, 60, 84, 46, 84, 54, 84, 41, 84, 29, 84, 78, 84, 143, 84, 117, 84, 142, 84, 95, 84, 113, 84, 119, 84, 112, 84, + 146, 84, 123, 84, 128, 84, 118, 84, 132, 84, 144, 84, 134, 84, 199, 84, 162, 84, 184, 84, 165, 84, 172, 84, 196, 84, + 200, 84, 168, 84, 171, 84, 194, 84, 164, 84, 190, 84, 188, 84, 216, 84, 229, 84, 230, 85, 15, 85, 20, 84, 253, 84, 238, + 84, 237, 84, 250, 84, 226, 85, 57, 85, 64, 85, 99, 85, 76, 85, 46, 85, 92, 85, 69, 85, 86, 85, 87, 85, 56, 85, 51, 85, + 93, 85, 153, 85, 128, 84, 175, 85, 138, 85, 159, 85, 123, 85, 126, 85, 152, 85, 158, 85, 174, 85, 124, 85, 131, 85, + 169, 85, 135, 85, 168, 85, 218, 85, 197, 85, 223, 85, 196, 85, 220, 85, 228, 85, 212, 86, 20, 85, 247, 86, 22, 85, 254, + 85, 253, 86, 27, 85, 249, 86, 78, 86, 80, 113, 223, 86, 52, 86, 54, 86, 50, 86, 56, 86, 107, 86, 100, 86, 47, 86, 108, + 86, 106, 86, 134, 86, 128, 86, 138, 86, 160, 86, 148, 86, 143, 86, 165, 86, 174, 86, 182, 86, 180, 86, 194, 86, 188, + 86, 193, 86, 195, 86, 192, 86, 200, 86, 206, 86, 209, 86, 211, 86, 215, 86, 238, 86, 249, 87, 0, 86, 255, 87, 4, 87, + 9, 87, 8, 87, 11, 87, 13, 87, 19, 87, 24, 87, 22, 85, 199, 87, 28, 87, 38, 87, 55, 87, 56, 87, 78, 87, 59, 87, 64, 87, + 79, 87, 105, 87, 192, 87, 136, 87, 97, 87, 127, 87, 137, 87, 147, 87, 160, 87, 179, 87, 164, 87, 170, 87, 176, 87, 195, + 87, 198, 87, 212, 87, 210, 87, 211, 88, 10, 87, 214, 87, 227, 88, 11, 88, 25, 88, 29, 88, 114, 88, 33, 88, 98, 88, 75, + 88, 112, 107, 192, 88, 82, 88, 61, 88, 121, 88, 133, 88, 185, 88, 159, 88, 171, 88, 186, 88, 222, 88, 187, 88, 184, + 88, 174, 88, 197, 88, 211, 88, 209, 88, 215, 88, 217, 88, 216, 88, 229, 88, 220, 88, 228, 88, 223, 88, 239, 88, 250, + 88, 249, 88, 251, 88, 252, 88, 253, 89, 2, 89, 10, 89, 16, 89, 27, 104, 166, 89, 37, 89, 44, 89, 45, 89, 50, 89, 56, + 89, 62, 122, 210, 89, 85, 89, 80, 89, 78, 89, 90, 89, 88, 89, 98, 89, 96, 89, 103, 89, 108, 89, 105, 89, 120, 89, 129, + 89, 157, 79, 94, 79, 171, 89, 163, 89, 178, 89, 198, 89, 232, 89, 220, 89, 141, 89, 217, 89, 218, 90, 37, 90, 31, 90, + 17, 90, 28, 90, 9, 90, 26, 90, 64, 90, 108, 90, 73, 90, 53, 90, 54, 90, 98, 90, 106, 90, 154, 90, 188, 90, 190, 90, + 203, 90, 194, 90, 189, 90, 227, 90, 215, 90, 230, 90, 233, 90, 214, 90, 250, 90, 251, 91, 12, 91, 11, 91, 22, 91, 50, + 90, 208, 91, 42, 91, 54, 91, 62, 91, 67, 91, 69, 91, 64, 91, 81, 91, 85, 91, 90, 91, 91, 91, 101, 91, 105, 91, 112, + 91, 115, 91, 117, 91, 120, 101, 136, 91, 122, 91, 128, 91, 131, 91, 166, 91, 184, 91, 195, 91, 199, 91, 201, 91, 212, + 91, 208, 91, 228, 91, 230, 91, 226, 91, 222, 91, 229, 91, 235, 91, 240, 91, 246, 91, 243, 92, 5, 92, 7, 92, 8, 92, 13, + 92, 19, 92, 32, 92, 34, 92, 40, 92, 56, 92, 57, 92, 65, 92, 70, 92, 78, 92, 83, 92, 80, 92, 79, 91, 113, 92, 108, 92, + 110, 78, 98, 92, 118, 92, 121, 92, 140, 92, 145, 92, 148, 89, 155, 92, 171, 92, 187, 92, 182, 92, 188, 92, 183, 92, + 197, 92, 190, 92, 199, 92, 217, 92, 233, 92, 253, 92, 250, 92, 237, 93, 140, 92, 234, 93, 11, 93, 21, 93, 23, 93, 92, + 93, 31, 93, 27, 93, 17, 93, 20, 93, 34, 93, 26, 93, 25, 93, 24, 93, 76, 93, 82, 93, 78, 93, 75, 93, 108, 93, 115, 93, + 118, 93, 135, 93, 132, 93, 130, 93, 162, 93, 157, 93, 172, 93, 174, 93, 189, 93, 144, 93, 183, 93, 188, 93, 201, 93, + 205, 93, 211, 93, 210, 93, 214, 93, 219, 93, 235, 93, 242, 93, 245, 94, 11, 94, 26, 94, 25, 94, 17, 94, 27, 94, 54, + 94, 55, 94, 68, 94, 67, 94, 64, 94, 78, 94, 87, 94, 84, 94, 95, 94, 98, 94, 100, 94, 71, 94, 117, 94, 118, 94, 122, + 158, 188, 94, 127, 94, 160, 94, 193, 94, 194, 94, 200, 94, 208, 94, 207, 94, 214, 94, 227, 94, 221, 94, 218, 94, 219, + 94, 226, 94, 225, 94, 232, 94, 233, 94, 236, 94, 241, 94, 243, 94, 240, 94, 244, 94, 248, 94, 254, 95, 3, 95, 9, 95, + 93, 95, 92, 95, 11, 95, 17, 95, 22, 95, 41, 95, 45, 95, 56, 95, 65, 95, 72, 95, 76, 95, 78, 95, 47, 95, 81, 95, 86, + 95, 87, 95, 89, 95, 97, 95, 109, 95, 115, 95, 119, 95, 131, 95, 130, 95, 127, 95, 138, 95, 136, 95, 145, 95, 135, 95, + 158, 95, 153, 95, 152, 95, 160, 95, 168, 95, 173, 95, 188, 95, 214, 95, 251, 95, 228, 95, 248, 95, 241, 95, 221, 96, + 179, 95, 255, 96, 33, 96, 96, 96, 25, 96, 16, 96, 41, 96, 14, 96, 49, 96, 27, 96, 21, 96, 43, 96, 38, 96, 15, 96, 58, + 96, 90, 96, 65, 96, 106, 96, 119, 96, 95, 96, 74, 96, 70, 96, 77, 96, 99, 96, 67, 96, 100, 96, 66, 96, 108, 96, 107, + 96, 89, 96, 129, 96, 141, 96, 231, 96, 131, 96, 154, 96, 132, 96, 155, 96, 150, 96, 151, 96, 146, 96, 167, 96, 139, + 96, 225, 96, 184, 96, 224, 96, 211, 96, 180, 95, 240, 96, 189, 96, 198, 96, 181, 96, 216, 97, 77, 97, 21, 97, 6, 96, + 246, 96, 247, 97, 0, 96, 244, 96, 250, 97, 3, 97, 33, 96, 251, 96, 241, 97, 13, 97, 14, 97, 71, 97, 62, 97, 40, 97, + 39, 97, 74, 97, 63, 97, 60, 97, 44, 97, 52, 97, 61, 97, 66, 97, 68, 97, 115, 97, 119, 97, 88, 97, 89, 97, 90, 97, 107, + 97, 116, 97, 111, 97, 101, 97, 113, 97, 95, 97, 93, 97, 83, 97, 117, 97, 153, 97, 150, 97, 135, 97, 172, 97, 148, 97, + 154, 97, 138, 97, 145, 97, 171, 97, 174, 97, 204, 97, 202, 97, 201, 97, 247, 97, 200, 97, 195, 97, 198, 97, 186, 97, + 203, 127, 121, 97, 205, 97, 230, 97, 227, 97, 246, 97, 250, 97, 244, 97, 255, 97, 253, 97, 252, 97, 254, 98, 0, 98, + 8, 98, 9, 98, 13, 98, 12, 98, 20, 98, 27, 98, 30, 98, 33, 98, 42, 98, 46, 98, 48, 98, 50, 98, 51, 98, 65, 98, 78, 98, + 94, 98, 99, 98, 91, 98, 96, 98, 104, 98, 124, 98, 130, 98, 137, 98, 126, 98, 146, 98, 147, 98, 150, 98, 212, 98, 131, + 98, 148, 98, 215, 98, 209, 98, 187, 98, 207, 98, 255, 98, 198, 100, 212, 98, 200, 98, 220, 98, 204, 98, 202, 98, 194, + 98, 199, 98, 155, 98, 201, 99, 12, 98, 238, 98, 241, 99, 39, 99, 2, 99, 8, 98, 239, 98, 245, 99, 80, 99, 62, 99, 77, + 100, 28, 99, 79, 99, 150, 99, 142, 99, 128, 99, 171, 99, 118, 99, 163, 99, 143, 99, 137, 99, 159, 99, 181, 99, 107, + 99, 105, 99, 190, 99, 233, 99, 192, 99, 198, 99, 227, 99, 201, 99, 210, 99, 246, 99, 196, 100, 22, 100, 52, 100, 6, + 100, 19, 100, 38, 100, 54, 101, 29, 100, 23, 100, 40, 100, 15, 100, 103, 100, 111, 100, 118, 100, 78, 101, 42, 100, + 149, 100, 147, 100, 165, 100, 169, 100, 136, 100, 188, 100, 218, 100, 210, 100, 197, 100, 199, 100, 187, 100, 216, 100, + 194, 100, 241, 100, 231, 130, 9, 100, 224, 100, 225, 98, 172, 100, 227, 100, 239, 101, 44, 100, 246, 100, 244, 100, + 242, 100, 250, 101, 0, 100, 253, 101, 24, 101, 28, 101, 5, 101, 36, 101, 35, 101, 43, 101, 52, 101, 53, 101, 55, 101, + 54, 101, 56, 117, 75, 101, 72, 101, 86, 101, 85, 101, 77, 101, 88, 101, 94, 101, 93, 101, 114, 101, 120, 101, 130, 101, + 131, 139, 138, 101, 155, 101, 159, 101, 171, 101, 183, 101, 195, 101, 198, 101, 193, 101, 196, 101, 204, 101, 210, 101, + 219, 101, 217, 101, 224, 101, 225, 101, 241, 103, 114, 102, 10, 102, 3, 101, 251, 103, 115, 102, 53, 102, 54, 102, 52, + 102, 28, 102, 79, 102, 68, 102, 73, 102, 65, 102, 94, 102, 93, 102, 100, 102, 103, 102, 104, 102, 95, 102, 98, 102, + 112, 102, 131, 102, 136, 102, 142, 102, 137, 102, 132, 102, 152, 102, 157, 102, 193, 102, 185, 102, 201, 102, 190, 102, + 188, 102, 196, 102, 184, 102, 214, 102, 218, 102, 224, 102, 63, 102, 230, 102, 233, 102, 240, 102, 245, 102, 247, 103, + 15, 103, 22, 103, 30, 103, 38, 103, 39, 151, 56, 103, 46, 103, 63, 103, 54, 103, 65, 103, 56, 103, 55, 103, 70, 103, + 94, 103, 96, 103, 89, 103, 99, 103, 100, 103, 137, 103, 112, 103, 169, 103, 124, 103, 106, 103, 140, 103, 139, 103, + 166, 103, 161, 103, 133, 103, 183, 103, 239, 103, 180, 103, 236, 103, 179, 103, 233, 103, 184, 103, 228, 103, 222, 103, + 221, 103, 226, 103, 238, 103, 185, 103, 206, 103, 198, 103, 231, 106, 156, 104, 30, 104, 70, 104, 41, 104, 64, 104, + 77, 104, 50, 104, 78, 104, 179, 104, 43, 104, 89, 104, 99, 104, 119, 104, 127, 104, 159, 104, 143, 104, 173, 104, 148, + 104, 157, 104, 155, 104, 131, 106, 174, 104, 185, 104, 116, 104, 181, 104, 160, 104, 186, 105, 15, 104, 141, 104, 126, + 105, 1, 104, 202, 105, 8, 104, 216, 105, 34, 105, 38, 104, 225, 105, 12, 104, 205, 104, 212, 104, 231, 104, 213, 105, + 54, 105, 18, 105, 4, 104, 215, 104, 227, 105, 37, 104, 249, 104, 224, 104, 239, 105, 40, 105, 42, 105, 26, 105, 35, + 105, 33, 104, 198, 105, 121, 105, 119, 105, 92, 105, 120, 105, 107, 105, 84, 105, 126, 105, 110, 105, 57, 105, 116, + 105, 61, 105, 89, 105, 48, 105, 97, 105, 94, 105, 93, 105, 129, 105, 106, 105, 178, 105, 174, 105, 208, 105, 191, 105, + 193, 105, 211, 105, 190, 105, 206, 91, 232, 105, 202, 105, 221, 105, 187, 105, 195, 105, 167, 106, 46, 105, 145, 105, + 160, 105, 156, 105, 149, 105, 180, 105, 222, 105, 232, 106, 2, 106, 27, 105, 255, 107, 10, 105, 249, 105, 242, 105, + 231, 106, 5, 105, 177, 106, 30, 105, 237, 106, 20, 105, 235, 106, 10, 106, 18, 106, 193, 106, 35, 106, 19, 106, 68, + 106, 12, 106, 114, 106, 54, 106, 120, 106, 71, 106, 98, 106, 89, 106, 102, 106, 72, 106, 56, 106, 34, 106, 144, 106, + 141, 106, 160, 106, 132, 106, 162, 106, 163, 106, 151, 134, 23, 106, 187, 106, 195, 106, 194, 106, 184, 106, 179, 106, + 172, 106, 222, 106, 209, 106, 223, 106, 170, 106, 218, 106, 234, 106, 251, 107, 5, 134, 22, 106, 250, 107, 18, 107, + 22, 155, 49, 107, 31, 107, 56, 107, 55, 118, 220, 107, 57, 152, 238, 107, 71, 107, 67, 107, 73, 107, 80, 107, 89, 107, + 84, 107, 91, 107, 95, 107, 97, 107, 120, 107, 121, 107, 127, 107, 128, 107, 132, 107, 131, 107, 141, 107, 152, 107, + 149, 107, 158, 107, 164, 107, 170, 107, 171, 107, 175, 107, 178, 107, 177, 107, 179, 107, 183, 107, 188, 107, 198, 107, + 203, 107, 211, 107, 223, 107, 236, 107, 235, 107, 243, 107, 239, 158, 190, 108, 8, 108, 19, 108, 20, 108, 27, 108, 36, + 108, 35, 108, 94, 108, 85, 108, 98, 108, 106, 108, 130, 108, 141, 108, 154, 108, 129, 108, 155, 108, 126, 108, 104, + 108, 115, 108, 146, 108, 144, 108, 196, 108, 241, 108, 211, 108, 189, 108, 215, 108, 197, 108, 221, 108, 174, 108, 177, + 108, 190, 108, 186, 108, 219, 108, 239, 108, 217, 108, 234, 109, 31, 136, 77, 109, 54, 109, 43, 109, 61, 109, 56, 109, + 25, 109, 53, 109, 51, 109, 18, 109, 12, 109, 99, 109, 147, 109, 100, 109, 90, 109, 121, 109, 89, 109, 142, 109, 149, + 111, 228, 109, 133, 109, 249, 110, 21, 110, 10, 109, 181, 109, 199, 109, 230, 109, 184, 109, 198, 109, 236, 109, 222, + 109, 204, 109, 232, 109, 210, 109, 197, 109, 250, 109, 217, 109, 228, 109, 213, 109, 234, 109, 238, 110, 45, 110, 110, + 110, 46, 110, 25, 110, 114, 110, 95, 110, 62, 110, 35, 110, 107, 110, 43, 110, 118, 110, 77, 110, 31, 110, 67, 110, + 58, 110, 78, 110, 36, 110, 255, 110, 29, 110, 56, 110, 130, 110, 170, 110, 152, 110, 201, 110, 183, 110, 211, 110, 189, + 110, 175, 110, 196, 110, 178, 110, 212, 110, 213, 110, 143, 110, 165, 110, 194, 110, 159, 111, 65, 111, 17, 112, 76, + 110, 236, 110, 248, 110, 254, 111, 63, 110, 242, 111, 49, 110, 239, 111, 50, 110, 204, 111, 62, 111, 19, 110, 247, 111, + 134, 111, 122, 111, 120, 111, 129, 111, 128, 111, 111, 111, 91, 111, 243, 111, 109, 111, 130, 111, 124, 111, 88, 111, + 142, 111, 145, 111, 194, 111, 102, 111, 179, 111, 163, 111, 161, 111, 164, 111, 185, 111, 198, 111, 170, 111, 223, 111, + 213, 111, 236, 111, 212, 111, 216, 111, 241, 111, 238, 111, 219, 112, 9, 112, 11, 111, 250, 112, 17, 112, 1, 112, 15, + 111, 254, 112, 27, 112, 26, 111, 116, 112, 29, 112, 24, 112, 31, 112, 48, 112, 62, 112, 50, 112, 81, 112, 99, 112, 153, + 112, 146, 112, 175, 112, 241, 112, 172, 112, 184, 112, 179, 112, 174, 112, 223, 112, 203, 112, 221, 112, 217, 113, 9, + 112, 253, 113, 28, 113, 25, 113, 101, 113, 85, 113, 136, 113, 102, 113, 98, 113, 76, 113, 86, 113, 108, 113, 143, 113, + 251, 113, 132, 113, 149, 113, 168, 113, 172, 113, 215, 113, 185, 113, 190, 113, 210, 113, 201, 113, 212, 113, 206, 113, + 224, 113, 236, 113, 231, 113, 245, 113, 252, 113, 249, 113, 255, 114, 13, 114, 16, 114, 27, 114, 40, 114, 45, 114, 44, + 114, 48, 114, 50, 114, 59, 114, 60, 114, 63, 114, 64, 114, 70, 114, 75, 114, 88, 114, 116, 114, 126, 114, 130, 114, + 129, 114, 135, 114, 146, 114, 150, 114, 162, 114, 167, 114, 185, 114, 178, 114, 195, 114, 198, 114, 196, 114, 206, 114, + 210, 114, 226, 114, 224, 114, 225, 114, 249, 114, 247, 80, 15, 115, 23, 115, 10, 115, 28, 115, 22, 115, 29, 115, 52, + 115, 47, 115, 41, 115, 37, 115, 62, 115, 78, 115, 79, 158, 216, 115, 87, 115, 106, 115, 104, 115, 112, 115, 120, 115, + 117, 115, 123, 115, 122, 115, 200, 115, 179, 115, 206, 115, 187, 115, 192, 115, 229, 115, 238, 115, 222, 116, 162, 116, + 5, 116, 111, 116, 37, 115, 248, 116, 50, 116, 58, 116, 85, 116, 63, 116, 95, 116, 89, 116, 65, 116, 92, 116, 105, 116, + 112, 116, 99, 116, 106, 116, 118, 116, 126, 116, 139, 116, 158, 116, 167, 116, 202, 116, 207, 116, 212, 115, 241, 116, + 224, 116, 227, 116, 231, 116, 233, 116, 238, 116, 242, 116, 240, 116, 241, 116, 248, 116, 247, 117, 4, 117, 3, 117, + 5, 117, 12, 117, 14, 117, 13, 117, 21, 117, 19, 117, 30, 117, 38, 117, 44, 117, 60, 117, 68, 117, 77, 117, 74, 117, + 73, 117, 91, 117, 70, 117, 90, 117, 105, 117, 100, 117, 103, 117, 107, 117, 109, 117, 120, 117, 118, 117, 134, 117, + 135, 117, 116, 117, 138, 117, 137, 117, 130, 117, 148, 117, 154, 117, 157, 117, 165, 117, 163, 117, 194, 117, 179, 117, + 195, 117, 181, 117, 189, 117, 184, 117, 188, 117, 177, 117, 205, 117, 202, 117, 210, 117, 217, 117, 227, 117, 222, 117, + 254, 117, 255, 117, 252, 118, 1, 117, 240, 117, 250, 117, 242, 117, 243, 118, 11, 118, 13, 118, 9, 118, 31, 118, 39, + 118, 32, 118, 33, 118, 34, 118, 36, 118, 52, 118, 48, 118, 59, 118, 71, 118, 72, 118, 70, 118, 92, 118, 88, 118, 97, + 118, 98, 118, 104, 118, 105, 118, 106, 118, 103, 118, 108, 118, 112, 118, 114, 118, 118, 118, 120, 118, 124, 118, 128, + 118, 131, 118, 136, 118, 139, 118, 142, 118, 150, 118, 147, 118, 153, 118, 154, 118, 176, 118, 180, 118, 184, 118, 185, + 118, 186, 118, 194, 118, 205, 118, 214, 118, 210, 118, 222, 118, 225, 118, 229, 118, 231, 118, 234, 134, 47, 118, 251, + 119, 8, 119, 7, 119, 4, 119, 41, 119, 36, 119, 30, 119, 37, 119, 38, 119, 27, 119, 55, 119, 56, 119, 71, 119, 90, 119, + 104, 119, 107, 119, 91, 119, 101, 119, 127, 119, 126, 119, 121, 119, 142, 119, 139, 119, 145, 119, 160, 119, 158, 119, + 176, 119, 182, 119, 185, 119, 191, 119, 188, 119, 189, 119, 187, 119, 199, 119, 205, 119, 215, 119, 218, 119, 220, 119, + 227, 119, 238, 119, 252, 120, 12, 120, 18, 121, 38, 120, 32, 121, 42, 120, 69, 120, 142, 120, 116, 120, 134, 120, 124, + 120, 154, 120, 140, 120, 163, 120, 181, 120, 170, 120, 175, 120, 209, 120, 198, 120, 203, 120, 212, 120, 190, 120, 188, + 120, 197, 120, 202, 120, 236, 120, 231, 120, 218, 120, 253, 120, 244, 121, 7, 121, 18, 121, 17, 121, 25, 121, 44, 121, + 43, 121, 64, 121, 96, 121, 87, 121, 95, 121, 90, 121, 85, 121, 83, 121, 122, 121, 127, 121, 138, 121, 157, 121, 167, + 159, 75, 121, 170, 121, 174, 121, 179, 121, 185, 121, 186, 121, 201, 121, 213, 121, 231, 121, 236, 121, 225, 121, 227, + 122, 8, 122, 13, 122, 24, 122, 25, 122, 32, 122, 31, 121, 128, 122, 49, 122, 59, 122, 62, 122, 55, 122, 67, 122, 87, + 122, 73, 122, 97, 122, 98, 122, 105, 159, 157, 122, 112, 122, 121, 122, 125, 122, 136, 122, 151, 122, 149, 122, 152, + 122, 150, 122, 169, 122, 200, 122, 176, 122, 182, 122, 197, 122, 196, 122, 191, 144, 131, 122, 199, 122, 202, 122, 205, + 122, 207, 122, 213, 122, 211, 122, 217, 122, 218, 122, 221, 122, 225, 122, 226, 122, 230, 122, 237, 122, 240, 123, 2, + 123, 15, 123, 10, 123, 6, 123, 51, 123, 24, 123, 25, 123, 30, 123, 53, 123, 40, 123, 54, 123, 80, 123, 122, 123, 4, + 123, 77, 123, 11, 123, 76, 123, 69, 123, 117, 123, 101, 123, 116, 123, 103, 123, 112, 123, 113, 123, 108, 123, 110, + 123, 157, 123, 152, 123, 159, 123, 141, 123, 156, 123, 154, 123, 139, 123, 146, 123, 143, 123, 93, 123, 153, 123, 203, + 123, 193, 123, 204, 123, 207, 123, 180, 123, 198, 123, 221, 123, 233, 124, 17, 124, 20, 123, 230, 123, 229, 124, 96, + 124, 0, 124, 7, 124, 19, 123, 243, 123, 247, 124, 23, 124, 13, 123, 246, 124, 35, 124, 39, 124, 42, 124, 31, 124, 55, + 124, 43, 124, 61, 124, 76, 124, 67, 124, 84, 124, 79, 124, 64, 124, 80, 124, 88, 124, 95, 124, 100, 124, 86, 124, 101, + 124, 108, 124, 117, 124, 131, 124, 144, 124, 164, 124, 173, 124, 162, 124, 171, 124, 161, 124, 168, 124, 179, 124, 178, + 124, 177, 124, 174, 124, 185, 124, 189, 124, 192, 124, 197, 124, 194, 124, 216, 124, 210, 124, 220, 124, 226, 155, 59, + 124, 239, 124, 242, 124, 244, 124, 246, 124, 250, 125, 6, 125, 2, 125, 28, 125, 21, 125, 10, 125, 69, 125, 75, 125, + 46, 125, 50, 125, 63, 125, 53, 125, 70, 125, 115, 125, 86, 125, 78, 125, 114, 125, 104, 125, 110, 125, 79, 125, 99, + 125, 147, 125, 137, 125, 91, 125, 143, 125, 125, 125, 155, 125, 186, 125, 174, 125, 163, 125, 181, 125, 199, 125, 189, + 125, 171, 126, 61, 125, 162, 125, 175, 125, 220, 125, 184, 125, 159, 125, 176, 125, 216, 125, 221, 125, 228, 125, 222, + 125, 251, 125, 242, 125, 225, 126, 5, 126, 10, 126, 35, 126, 33, 126, 18, 126, 49, 126, 31, 126, 9, 126, 11, 126, 34, + 126, 70, 126, 102, 126, 59, 126, 53, 126, 57, 126, 67, 126, 55, 126, 50, 126, 58, 126, 103, 126, 93, 126, 86, 126, 94, + 126, 89, 126, 90, 126, 121, 126, 106, 126, 105, 126, 124, 126, 123, 126, 131, 125, 213, 126, 125, 143, 174, 126, 127, + 126, 136, 126, 137, 126, 140, 126, 146, 126, 144, 126, 147, 126, 148, 126, 150, 126, 142, 126, 155, 126, 156, 127, 56, + 127, 58, 127, 69, 127, 76, 127, 77, 127, 78, 127, 80, 127, 81, 127, 85, 127, 84, 127, 88, 127, 95, 127, 96, 127, 104, + 127, 105, 127, 103, 127, 120, 127, 130, 127, 134, 127, 131, 127, 136, 127, 135, 127, 140, 127, 148, 127, 158, 127, 157, + 127, 154, 127, 163, 127, 175, 127, 178, 127, 185, 127, 174, 127, 182, 127, 184, 139, 113, 127, 197, 127, 198, 127, 202, + 127, 213, 127, 212, 127, 225, 127, 230, 127, 233, 127, 243, 127, 249, 152, 220, 128, 6, 128, 4, 128, 11, 128, 18, 128, + 24, 128, 25, 128, 28, 128, 33, 128, 40, 128, 63, 128, 59, 128, 74, 128, 70, 128, 82, 128, 88, 128, 90, 128, 95, 128, + 98, 128, 104, 128, 115, 128, 114, 128, 112, 128, 118, 128, 121, 128, 125, 128, 127, 128, 132, 128, 134, 128, 133, 128, + 155, 128, 147, 128, 154, 128, 173, 81, 144, 128, 172, 128, 219, 128, 229, 128, 217, 128, 221, 128, 196, 128, 218, 128, + 214, 129, 9, 128, 239, 128, 241, 129, 27, 129, 41, 129, 35, 129, 47, 129, 75, 150, 139, 129, 70, 129, 62, 129, 83, 129, + 81, 128, 252, 129, 113, 129, 110, 129, 101, 129, 102, 129, 116, 129, 131, 129, 136, 129, 138, 129, 128, 129, 130, 129, + 160, 129, 149, 129, 164, 129, 163, 129, 95, 129, 147, 129, 169, 129, 176, 129, 181, 129, 190, 129, 184, 129, 189, 129, + 192, 129, 194, 129, 186, 129, 201, 129, 205, 129, 209, 129, 217, 129, 216, 129, 200, 129, 218, 129, 223, 129, 224, 129, + 231, 129, 250, 129, 251, 129, 254, 130, 1, 130, 2, 130, 5, 130, 7, 130, 10, 130, 13, 130, 16, 130, 22, 130, 41, 130, + 43, 130, 56, 130, 51, 130, 64, 130, 89, 130, 88, 130, 93, 130, 90, 130, 95, 130, 100, 130, 98, 130, 104, 130, 106, 130, + 107, 130, 46, 130, 113, 130, 119, 130, 120, 130, 126, 130, 141, 130, 146, 130, 171, 130, 159, 130, 187, 130, 172, 130, + 225, 130, 227, 130, 223, 130, 210, 130, 244, 130, 243, 130, 250, 131, 147, 131, 3, 130, 251, 130, 249, 130, 222, 131, + 6, 130, 220, 131, 9, 130, 217, 131, 53, 131, 52, 131, 22, 131, 50, 131, 49, 131, 64, 131, 57, 131, 80, 131, 69, 131, + 47, 131, 43, 131, 23, 131, 24, 131, 133, 131, 154, 131, 170, 131, 159, 131, 162, 131, 150, 131, 35, 131, 142, 131, 135, + 131, 138, 131, 124, 131, 181, 131, 115, 131, 117, 131, 160, 131, 137, 131, 168, 131, 244, 132, 19, 131, 235, 131, 206, + 131, 253, 132, 3, 131, 216, 132, 11, 131, 193, 131, 247, 132, 7, 131, 224, 131, 242, 132, 13, 132, 34, 132, 32, 131, + 189, 132, 56, 133, 6, 131, 251, 132, 109, 132, 42, 132, 60, 133, 90, 132, 132, 132, 119, 132, 107, 132, 173, 132, 110, + 132, 130, 132, 105, 132, 70, 132, 44, 132, 111, 132, 121, 132, 53, 132, 202, 132, 98, 132, 185, 132, 191, 132, 159, + 132, 217, 132, 205, 132, 187, 132, 218, 132, 208, 132, 193, 132, 198, 132, 214, 132, 161, 133, 33, 132, 255, 132, 244, + 133, 23, 133, 24, 133, 44, 133, 31, 133, 21, 133, 20, 132, 252, 133, 64, 133, 99, 133, 88, 133, 72, 133, 65, 134, 2, + 133, 75, 133, 85, 133, 128, 133, 164, 133, 136, 133, 145, 133, 138, 133, 168, 133, 109, 133, 148, 133, 155, 133, 234, + 133, 135, 133, 156, 133, 119, 133, 126, 133, 144, 133, 201, 133, 186, 133, 207, 133, 185, 133, 208, 133, 213, 133, 221, + 133, 229, 133, 220, 133, 249, 134, 10, 134, 19, 134, 11, 133, 254, 133, 250, 134, 6, 134, 34, 134, 26, 134, 48, 134, + 63, 134, 77, 78, 85, 134, 84, 134, 95, 134, 103, 134, 113, 134, 147, 134, 163, 134, 169, 134, 170, 134, 139, 134, 140, + 134, 182, 134, 175, 134, 196, 134, 198, 134, 176, 134, 201, 136, 35, 134, 171, 134, 212, 134, 222, 134, 233, 134, 236, + 134, 223, 134, 219, 134, 239, 135, 18, 135, 6, 135, 8, 135, 0, 135, 3, 134, 251, 135, 17, 135, 9, 135, 13, 134, 249, + 135, 10, 135, 52, 135, 63, 135, 55, 135, 59, 135, 37, 135, 41, 135, 26, 135, 96, 135, 95, 135, 120, 135, 76, 135, 78, + 135, 116, 135, 87, 135, 104, 135, 110, 135, 89, 135, 83, 135, 99, 135, 106, 136, 5, 135, 162, 135, 159, 135, 130, 135, + 175, 135, 203, 135, 189, 135, 192, 135, 208, 150, 214, 135, 171, 135, 196, 135, 179, 135, 199, 135, 198, 135, 187, 135, + 239, 135, 242, 135, 224, 136, 15, 136, 13, 135, 254, 135, 246, 135, 247, 136, 14, 135, 210, 136, 17, 136, 22, 136, 21, + 136, 34, 136, 33, 136, 49, 136, 54, 136, 57, 136, 39, 136, 59, 136, 68, 136, 66, 136, 82, 136, 89, 136, 94, 136, 98, + 136, 107, 136, 129, 136, 126, 136, 158, 136, 117, 136, 125, 136, 181, 136, 114, 136, 130, 136, 151, 136, 146, 136, 174, + 136, 153, 136, 162, 136, 141, 136, 164, 136, 176, 136, 191, 136, 177, 136, 195, 136, 196, 136, 212, 136, 216, 136, 217, + 136, 221, 136, 249, 137, 2, 136, 252, 136, 244, 136, 232, 136, 242, 137, 4, 137, 12, 137, 10, 137, 19, 137, 67, 137, + 30, 137, 37, 137, 42, 137, 43, 137, 65, 137, 68, 137, 59, 137, 54, 137, 56, 137, 76, 137, 29, 137, 96, 137, 94, 137, + 102, 137, 100, 137, 109, 137, 106, 137, 111, 137, 116, 137, 119, 137, 126, 137, 131, 137, 136, 137, 138, 137, 147, 137, + 152, 137, 161, 137, 169, 137, 166, 137, 172, 137, 175, 137, 178, 137, 186, 137, 189, 137, 191, 137, 192, 137, 218, 137, + 220, 137, 221, 137, 231, 137, 244, 137, 248, 138, 3, 138, 22, 138, 16, 138, 12, 138, 27, 138, 29, 138, 37, 138, 54, + 138, 65, 138, 91, 138, 82, 138, 70, 138, 72, 138, 124, 138, 109, 138, 108, 138, 98, 138, 133, 138, 130, 138, 132, 138, + 168, 138, 161, 138, 145, 138, 165, 138, 166, 138, 154, 138, 163, 138, 196, 138, 205, 138, 194, 138, 218, 138, 235, 138, + 243, 138, 231, 138, 228, 138, 241, 139, 20, 138, 224, 138, 226, 138, 247, 138, 222, 138, 219, 139, 12, 139, 7, 139, + 26, 138, 225, 139, 22, 139, 16, 139, 23, 139, 32, 139, 51, 151, 171, 139, 38, 139, 43, 139, 62, 139, 40, 139, 65, 139, + 76, 139, 79, 139, 78, 139, 73, 139, 86, 139, 91, 139, 90, 139, 107, 139, 95, 139, 108, 139, 111, 139, 116, 139, 125, + 139, 128, 139, 140, 139, 142, 139, 146, 139, 147, 139, 150, 139, 153, 139, 154, 140, 58, 140, 65, 140, 63, 140, 72, + 140, 76, 140, 78, 140, 80, 140, 85, 140, 98, 140, 108, 140, 120, 140, 122, 140, 130, 140, 137, 140, 133, 140, 138, 140, + 141, 140, 142, 140, 148, 140, 124, 140, 152, 98, 29, 140, 173, 140, 170, 140, 189, 140, 178, 140, 179, 140, 174, 140, + 182, 140, 200, 140, 193, 140, 228, 140, 227, 140, 218, 140, 253, 140, 250, 140, 251, 141, 4, 141, 5, 141, 10, 141, 7, + 141, 15, 141, 13, 141, 16, 159, 78, 141, 19, 140, 205, 141, 20, 141, 22, 141, 103, 141, 109, 141, 113, 141, 115, 141, + 129, 141, 153, 141, 194, 141, 190, 141, 186, 141, 207, 141, 218, 141, 214, 141, 204, 141, 219, 141, 203, 141, 234, 141, + 235, 141, 223, 141, 227, 141, 252, 142, 8, 142, 9, 141, 255, 142, 29, 142, 30, 142, 16, 142, 31, 142, 66, 142, 53, 142, + 48, 142, 52, 142, 74, 142, 71, 142, 73, 142, 76, 142, 80, 142, 72, 142, 89, 142, 100, 142, 96, 142, 42, 142, 99, 142, + 85, 142, 118, 142, 114, 142, 124, 142, 129, 142, 135, 142, 133, 142, 132, 142, 139, 142, 138, 142, 147, 142, 145, 142, + 148, 142, 153, 142, 170, 142, 161, 142, 172, 142, 176, 142, 198, 142, 177, 142, 190, 142, 197, 142, 200, 142, 203, 142, + 219, 142, 227, 142, 252, 142, 251, 142, 235, 142, 254, 143, 10, 143, 5, 143, 21, 143, 18, 143, 25, 143, 19, 143, 28, + 143, 31, 143, 27, 143, 12, 143, 38, 143, 51, 143, 59, 143, 57, 143, 69, 143, 66, 143, 62, 143, 76, 143, 73, 143, 70, + 143, 78, 143, 87, 143, 92, 143, 98, 143, 99, 143, 100, 143, 156, 143, 159, 143, 163, 143, 173, 143, 175, 143, 183, 143, + 218, 143, 229, 143, 226, 143, 234, 143, 239, 144, 135, 143, 244, 144, 5, 143, 249, 143, 250, 144, 17, 144, 21, 144, + 33, 144, 13, 144, 30, 144, 22, 144, 11, 144, 39, 144, 54, 144, 53, 144, 57, 143, 248, 144, 79, 144, 80, 144, 81, 144, + 82, 144, 14, 144, 73, 144, 62, 144, 86, 144, 88, 144, 94, 144, 104, 144, 111, 144, 118, 150, 168, 144, 114, 144, 130, + 144, 125, 144, 129, 144, 128, 144, 138, 144, 137, 144, 143, 144, 168, 144, 175, 144, 177, 144, 181, 144, 226, 144, 228, + 98, 72, 144, 219, 145, 2, 145, 18, 145, 25, 145, 50, 145, 48, 145, 74, 145, 86, 145, 88, 145, 99, 145, 101, 145, 105, + 145, 115, 145, 114, 145, 139, 145, 137, 145, 130, 145, 162, 145, 171, 145, 175, 145, 170, 145, 181, 145, 180, 145, 186, + 145, 192, 145, 193, 145, 201, 145, 203, 145, 208, 145, 214, 145, 223, 145, 225, 145, 219, 145, 252, 145, 245, 145, 246, + 146, 30, 145, 255, 146, 20, 146, 44, 146, 21, 146, 17, 146, 94, 146, 87, 146, 69, 146, 73, 146, 100, 146, 72, 146, 149, + 146, 63, 146, 75, 146, 80, 146, 156, 146, 150, 146, 147, 146, 155, 146, 90, 146, 207, 146, 185, 146, 183, 146, 233, + 147, 15, 146, 250, 147, 68, 147, 46, 147, 25, 147, 34, 147, 26, 147, 35, 147, 58, 147, 53, 147, 59, 147, 92, 147, 96, + 147, 124, 147, 110, 147, 86, 147, 176, 147, 172, 147, 173, 147, 148, 147, 185, 147, 214, 147, 215, 147, 232, 147, 229, + 147, 216, 147, 195, 147, 221, 147, 208, 147, 200, 147, 228, 148, 26, 148, 20, 148, 19, 148, 3, 148, 7, 148, 16, 148, + 54, 148, 43, 148, 53, 148, 33, 148, 58, 148, 65, 148, 82, 148, 68, 148, 91, 148, 96, 148, 98, 148, 94, 148, 106, 146, + 41, 148, 112, 148, 117, 148, 119, 148, 125, 148, 90, 148, 124, 148, 126, 148, 129, 148, 127, 149, 130, 149, 135, 149, + 138, 149, 148, 149, 150, 149, 152, 149, 153, 149, 160, 149, 168, 149, 167, 149, 173, 149, 188, 149, 187, 149, 185, 149, + 190, 149, 202, 111, 246, 149, 195, 149, 205, 149, 204, 149, 213, 149, 212, 149, 214, 149, 220, 149, 225, 149, 229, 149, + 226, 150, 33, 150, 40, 150, 46, 150, 47, 150, 66, 150, 76, 150, 79, 150, 75, 150, 119, 150, 92, 150, 94, 150, 93, 150, + 95, 150, 102, 150, 114, 150, 108, 150, 141, 150, 152, 150, 149, 150, 151, 150, 170, 150, 167, 150, 177, 150, 178, 150, + 176, 150, 180, 150, 182, 150, 184, 150, 185, 150, 206, 150, 203, 150, 201, 150, 205, 137, 77, 150, 220, 151, 13, 150, + 213, 150, 249, 151, 4, 151, 6, 151, 8, 151, 19, 151, 14, 151, 17, 151, 15, 151, 22, 151, 25, 151, 36, 151, 42, 151, + 48, 151, 57, 151, 61, 151, 62, 151, 68, 151, 70, 151, 72, 151, 66, 151, 73, 151, 92, 151, 96, 151, 100, 151, 102, 151, + 104, 82, 210, 151, 107, 151, 113, 151, 121, 151, 133, 151, 124, 151, 129, 151, 122, 151, 134, 151, 139, 151, 143, 151, + 144, 151, 156, 151, 168, 151, 166, 151, 163, 151, 179, 151, 180, 151, 195, 151, 198, 151, 200, 151, 203, 151, 220, 151, + 237, 159, 79, 151, 242, 122, 223, 151, 246, 151, 245, 152, 15, 152, 12, 152, 56, 152, 36, 152, 33, 152, 55, 152, 61, + 152, 70, 152, 79, 152, 75, 152, 107, 152, 111, 152, 112, 152, 113, 152, 116, 152, 115, 152, 170, 152, 175, 152, 177, + 152, 182, 152, 196, 152, 195, 152, 198, 152, 233, 152, 235, 153, 3, 153, 9, 153, 18, 153, 20, 153, 24, 153, 33, 153, + 29, 153, 30, 153, 36, 153, 32, 153, 44, 153, 46, 153, 61, 153, 62, 153, 66, 153, 73, 153, 69, 153, 80, 153, 75, 153, + 81, 153, 82, 153, 76, 153, 85, 153, 151, 153, 152, 153, 165, 153, 173, 153, 174, 153, 188, 153, 223, 153, 219, 153, + 221, 153, 216, 153, 209, 153, 237, 153, 238, 153, 241, 153, 242, 153, 251, 153, 248, 154, 1, 154, 15, 154, 5, 153, 226, + 154, 25, 154, 43, 154, 55, 154, 69, 154, 66, 154, 64, 154, 67, 154, 62, 154, 85, 154, 77, 154, 91, 154, 87, 154, 95, + 154, 98, 154, 101, 154, 100, 154, 105, 154, 107, 154, 106, 154, 173, 154, 176, 154, 188, 154, 192, 154, 207, 154, 209, + 154, 211, 154, 212, 154, 222, 154, 223, 154, 226, 154, 227, 154, 230, 154, 239, 154, 235, 154, 238, 154, 244, 154, 241, + 154, 247, 154, 251, 155, 6, 155, 24, 155, 26, 155, 31, 155, 34, 155, 35, 155, 37, 155, 39, 155, 40, 155, 41, 155, 42, + 155, 46, 155, 47, 155, 50, 155, 68, 155, 67, 155, 79, 155, 77, 155, 78, 155, 81, 155, 88, 155, 116, 155, 147, 155, 131, + 155, 145, 155, 150, 155, 151, 155, 159, 155, 160, 155, 168, 155, 180, 155, 192, 155, 202, 155, 185, 155, 198, 155, 207, + 155, 209, 155, 210, 155, 227, 155, 226, 155, 228, 155, 212, 155, 225, 156, 58, 155, 242, 155, 241, 155, 240, 156, 21, + 156, 20, 156, 9, 156, 19, 156, 12, 156, 6, 156, 8, 156, 18, 156, 10, 156, 4, 156, 46, 156, 27, 156, 37, 156, 36, 156, + 33, 156, 48, 156, 71, 156, 50, 156, 70, 156, 62, 156, 90, 156, 96, 156, 103, 156, 118, 156, 120, 156, 231, 156, 236, + 156, 240, 157, 9, 157, 8, 156, 235, 157, 3, 157, 6, 157, 42, 157, 38, 157, 175, 157, 35, 157, 31, 157, 68, 157, 21, + 157, 18, 157, 65, 157, 63, 157, 62, 157, 70, 157, 72, 157, 93, 157, 94, 157, 100, 157, 81, 157, 80, 157, 89, 157, 114, + 157, 137, 157, 135, 157, 171, 157, 111, 157, 122, 157, 154, 157, 164, 157, 169, 157, 178, 157, 196, 157, 193, 157, 187, + 157, 184, 157, 186, 157, 198, 157, 207, 157, 194, 157, 217, 157, 211, 157, 248, 157, 230, 157, 237, 157, 239, 157, 253, + 158, 26, 158, 27, 158, 30, 158, 117, 158, 121, 158, 125, 158, 129, 158, 136, 158, 139, 158, 140, 158, 146, 158, 149, + 158, 145, 158, 157, 158, 165, 158, 169, 158, 184, 158, 170, 158, 173, 151, 97, 158, 204, 158, 206, 158, 207, 158, 208, + 158, 212, 158, 220, 158, 222, 158, 221, 158, 224, 158, 229, 158, 232, 158, 239, 158, 244, 158, 246, 158, 247, 158, 249, + 158, 251, 158, 252, 158, 253, 159, 7, 159, 8, 118, 183, 159, 21, 159, 33, 159, 44, 159, 62, 159, 74, 159, 82, 159, 84, + 159, 99, 159, 95, 159, 96, 159, 97, 159, 102, 159, 103, 159, 108, 159, 106, 159, 119, 159, 114, 159, 118, 159, 149, + 159, 156, 159, 160, 88, 47, 105, 199, 144, 89, 116, 100, 81, 220, 113, 153, 48, 0, 48, 1, 48, 2, 255, 12, 255, 14, 48, + 251, 255, 26, 255, 27, 255, 31, 255, 1, 48, 155, 48, 156, 0, 180, 255, 64, 0, 168, 255, 62, 32, 62, 255, 63, 48, 253, + 48, 254, 48, 157, 48, 158, 48, 3, 78, 221, 48, 5, 48, 6, 48, 7, 48, 252, 32, 20, 32, 16, 255, 15, 255, 60, 48, 28, 32, + 22, 255, 92, 32, 38, 32, 37, 32, 24, 32, 25, 32, 28, 32, 29, 255, 8, 255, 9, 48, 20, 48, 21, 255, 59, 255, 61, 255, + 91, 255, 93, 48, 8, 48, 9, 48, 10, 48, 11, 48, 12, 48, 13, 48, 14, 48, 15, 48, 16, 48, 17, 255, 11, 34, 18, 0, 177, + 0, 215, 0, 247, 255, 29, 34, 96, 255, 28, 255, 30, 34, 102, 34, 103, 34, 30, 34, 52, 38, 66, 38, 64, 0, 176, 32, 50, + 32, 51, 33, 3, 0, 165, 255, 4, 0, 162, 0, 163, 255, 5, 255, 3, 255, 6, 255, 10, 255, 32, 0, 167, 38, 6, 38, 5, 37, 203, + 37, 207, 37, 206, 37, 199, 37, 198, 37, 161, 37, 160, 37, 179, 37, 178, 37, 189, 37, 188, 32, 59, 48, 18, 33, 146, 33, + 144, 33, 145, 33, 147, 48, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 8, 34, 11, 34, + 134, 34, 135, 34, 130, 34, 131, 34, 42, 34, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 39, 34, 40, 0, 172, + 33, 210, 33, 212, 34, 0, 34, 3, 34, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 34, 165, + 35, 18, 34, 2, 34, 7, 34, 97, 34, 82, 34, 106, 34, 107, 34, 26, 34, 61, 34, 29, 34, 53, 34, 43, 34, 44, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 43, 32, 48, 38, 111, 38, 109, 38, 106, 32, 32, 32, 33, 0, 182, 34, 44, 0, 0, 0, 0, + 0, 0, 37, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 145, 3, 146, 3, 147, 3, 148, 3, 149, 3, 150, 3, 151, 3, + 152, 3, 153, 3, 154, 3, 155, 3, 156, 3, 157, 3, 158, 3, 159, 3, 160, 3, 161, 3, 163, 3, 164, 3, 165, 3, 166, 3, 167, + 3, 168, 3, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 177, 3, 178, 3, 179, 3, 180, 3, 181, 3, 182, 3, 183, + 3, 184, 3, 185, 3, 186, 3, 187, 3, 188, 3, 189, 3, 190, 3, 191, 3, 192, 3, 193, 3, 195, 3, 196, 3, 197, 3, 198, 3, 199, + 3, 200, 3, 201, 4, 16, 4, 17, 4, 18, 4, 19, 4, 20, 4, 21, 4, 1, 4, 22, 4, 23, 4, 24, 4, 25, 4, 26, 4, 27, 4, 28, 4, + 29, 4, 30, 4, 31, 4, 32, 4, 33, 4, 34, 4, 35, 4, 36, 4, 37, 4, 38, 4, 39, 4, 40, 4, 41, 4, 42, 4, 43, 4, 44, 4, 45, + 4, 46, 4, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 48, 4, 49, + 4, 50, 4, 51, 4, 52, 4, 53, 4, 81, 4, 54, 4, 55, 4, 56, 4, 57, 4, 58, 4, 59, 4, 60, 4, 61, 4, 62, 4, 63, 4, 64, 4, 65, + 4, 66, 4, 67, 4, 68, 4, 69, 4, 70, 4, 71, 4, 72, 4, 73, 4, 74, 4, 75, 4, 76, 4, 77, 4, 78, 4, 79, 37, 0, 37, 2, 37, + 12, 37, 16, 37, 24, 37, 20, 37, 28, 37, 44, 37, 36, 37, 52, 37, 60, 37, 1, 37, 3, 37, 15, 37, 19, 37, 27, 37, 23, 37, + 35, 37, 51, 37, 43, 37, 59, 37, 75, 37, 32, 37, 47, 37, 40, 37, 55, 37, 63, 37, 29, 37, 48, 37, 37, 37, 56, 37, 66 +}; diff --git a/source/mload/fatffs_module.h b/source/mload/fatffs_module.h new file mode 100644 index 00000000..8f591c37 --- /dev/null +++ b/source/mload/fatffs_module.h @@ -0,0 +1,3 @@ +#define size_fatffs_module 58440 + +extern unsigned char fatffs_module[58440]; diff --git a/source/mload/fatffs_util.c b/source/mload/fatffs_util.c new file mode 100644 index 00000000..27b5a072 --- /dev/null +++ b/source/mload/fatffs_util.c @@ -0,0 +1,291 @@ +/* + From Custom IOS Module (FAT) + + Copyright (C) 2009 Waninkoko. + Copyright (C) 2010 Hermes. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#include "fatffs_util.h" + +#include + +#include +#include +#include +#include + +extern u32 nand_mode; + +s32 FAT_DeleteDir(const char *dirpath) +{ + DIR_ITER *dir; + + s32 ret; + + /* Open directory */ + dir = diropen(dirpath); + if (!dir) + return -1; + + /* Read entries */ + for (;;) { + char filename[256], newpath[256]; + struct stat filestat; + + /* Read entry */ + if (dirnext(dir, filename, &filestat)) + break; + + /* Non valid entry */ + if (filename[0]=='.') + continue; + + /* Generate entry path */ + strcpy(newpath, dirpath); + strcat(newpath, "/"); + strcat(newpath, filename); + + /* Delete directory contents */ + if (filestat.st_mode & S_IFDIR) + FAT_DeleteDir(newpath); + + /* Delete object */ + ret = remove(newpath); + + /* Error */ + if (ret != 0) + break; + } + + /* Close directory */ + dirclose(dir); + + return 0; +} + +static int global_error=0; + +static char temp_read_buffer[16384] ATTRIBUTE_ALIGN(32); + +s32 _FFS_to_FAT_Copy(const char *ffsdirpath, const char *fatdirpath) +{ +int n; +u32 blocks, ionodes; +int pos=0; +char *list; +s32 ret; + +u32 ionodes_temp; + + if(ISFS_GetUsage(ffsdirpath, &blocks, &ionodes)) {global_error=-1;return -1;} + + + list= memalign(32, ionodes*13); + + if(!list) {global_error=-2;return -2;} + + if(ISFS_ReadDir(ffsdirpath, list , &ionodes)) {free(list);global_error=-3;return -3;} + + if(ionodes) mkdir(fatdirpath, S_IRWXO | S_IRWXG | S_IRWXU); + + + /* Read entries */ + for (n=0;n0) + { + ret=len; if(len>16384) ret=16384; + if(ISFS_Read(fd, temp_read_buffer, ret)!=ret) + { + global_error=-7; + break; + } + if(fwrite(temp_read_buffer, 1, ret, fp)!=ret) + { + global_error=-8; + break; + } + len-=ret; + } + + fclose(fp); + ISFS_Close(fd); + + if(global_error) {free(list);return global_error;} + } + } + + } + + free(list); + return 0; +} + +s32 FFS_to_FAT_Copy(const char *ffsdirpath, const char *fatdirpath) +{ +u32 blocks, ionodes; +int ret; + +char create_dir[256]; + + ISFS_Initialize(); + + ret=ISFS_GetUsage(ffsdirpath, &blocks, &ionodes); + + if(ret==0) + { + int n=0; + + // creating the path directory + + strcpy(create_dir, fatdirpath); + + while(create_dir[n]!=0 && create_dir[n]!='/') n++; + + if(create_dir[n]=='/') n++; + + while(create_dir[n]!=0) + { + if(create_dir[n]=='/') + { + create_dir[n]=0; + mkdir(create_dir, S_IRWXO | S_IRWXG | S_IRWXU); + create_dir[n]='/'; + } + n++; + } + global_error=0; + // copy files + _FFS_to_FAT_Copy(ffsdirpath, fatdirpath); + + ret=global_error=0; + } + else ret=-101; + + ISFS_Deinitialize(); + + +return ret; + +} + +static char temp_cad[512]; + +void create_FAT_FFS_Directory(struct discHdr *header) +{ + +char device[2][4]={ + "sd:", + "ud:" +}; + + +if(!header) return; + + sprintf((char *) temp_cad,"%s/nand%c", &device[(nand_mode & 2)!=0][0], (nand_mode & 0xc) ? 49+((nand_mode>>2) & 3) : '\0'); + + sprintf((char *) temp_cad+32,"%2.2x%2.2x%2.2x%2.2x", header->id[0], header->id[1], header->id[2], header->id[3]); + + + sprintf((char *) temp_cad+64,"%s/title/00010000/%s", temp_cad, temp_cad+32); + sprintf((char *) temp_cad+128,"%s/title/00010004/%s", temp_cad, temp_cad+32); + sprintf((char *) temp_cad+256,"/title/00010000/%s", temp_cad+32); + sprintf((char *) temp_cad+384,"/title/00010004/%s", temp_cad+32); + + +} + +int test_FAT_game(char * directory) +{ +DIR_ITER * dir=NULL; + + dir= diropen(directory); + + if(dir) {dirclose(dir);return 1;} + +return 0; +} + + +char *get_FAT_directory1(void) +{ + return temp_cad+64; +} + +char *get_FAT_directory2(void) +{ + return temp_cad+128; +} + +char *get_FFS_directory1(void) +{ + return temp_cad+256; +} + +char *get_FFS_directory2(void) +{ + return temp_cad+384; +} diff --git a/source/mload/fatffs_util.h b/source/mload/fatffs_util.h new file mode 100644 index 00000000..c438776b --- /dev/null +++ b/source/mload/fatffs_util.h @@ -0,0 +1,24 @@ +#ifndef _FAT_UTIL_ +#define _FAT_UTIL_ + +#include + +#include "usbloader/disc.h" + +s32 FAT_DeleteDir(const char *dirpath); + +s32 FFS_to_FAT_Copy(const char *ffsdirpath, const char *fatdirpath); + +void create_FAT_FFS_Directory(struct discHdr *header); + +int test_FAT_game(char * directory); + +char *get_FAT_directory1(void); + +char *get_FAT_directory2(void); + +char *get_FFS_directory1(void); + +char *get_FFS_directory2(void); + +#endif diff --git a/source/mload/mload.c b/source/mload/mload.c index 2e83a97c..709b5067 100644 --- a/source/mload/mload.c +++ b/source/mload/mload.c @@ -16,19 +16,20 @@ */ #include "mload.h" -#include "ehcmodule_frag_bin.h" #include "dip_plugin.h" #include +#include "gecko.h" + static const char mload_fs[] ATTRIBUTE_ALIGN(32) = "/dev/mload"; -static u32 patch_datas[8] ATTRIBUTE_ALIGN(32); +//static u32 patch_datas[8] ATTRIBUTE_ALIGN(32); static s32 mload_fd = -1; static s32 hid = -1; -static data_elf my_data_elf; -static int thread_id = -1; -void *external_ehcmodule= NULL; -int size_external_ehcmodule=0; +//static data_elf my_data_elf; +//static int thread_id = -1; +//void *external_ehcmodule= NULL; +//int size_external_ehcmodule=0; /*--------------------------------------------------------------------------------------------------------------*/ @@ -483,37 +484,7 @@ return ret; } - - -static u32 ios_36[16] ATTRIBUTE_ALIGN(32)= -{ - 0, // DI_EmulateCmd - 0, - 0x2022DDAC, // dvd_read_controlling_data - 0x20201010+1, // handle_di_cmd_reentry (thumb) - 0x20200b9c+1, // ios_shared_alloc_aligned (thumb) - 0x20200b70+1, // ios_shared_free (thumb) - 0x20205dc0+1, // ios_memcpy (thumb) - 0x20200048+1, // ios_fatal_di_error (thumb) - 0x20202b4c+1, // ios_doReadHashEncryptedState (thumb) - 0x20203934+1, // ios_printf (thumb) -}; - -static u32 ios_38[16] ATTRIBUTE_ALIGN(32)= -{ - 0, // DI_EmulateCmd - 0, - 0x2022cdac, // dvd_read_controlling_data - 0x20200d38+1, // handle_di_cmd_reentry (thumb) - 0x202008c4+1, // ios_shared_alloc_aligned (thumb) - 0x20200898+1, // ios_shared_free (thumb) - 0x20205b80+1, // ios_memcpy (thumb) - 0x20200048+1, // ios_fatal_di_error (thumb) - 0x20202874+1, // ios_doReadHashEncryptedState (thumb) - 0x2020365c+1, // ios_printf (thumb) -}; - - +/* int load_ehc_module() { int is_ios=0; @@ -549,7 +520,14 @@ int load_ehc_module() if(!external_ehcmodule) { if(mload_init()<0) return -1; - mload_elf((void *) ehcmodule_frag_bin, &my_data_elf); + + if (IOS_GetRevision() == 4) { + gprintf("Loading ehcmodule v4\n"); + mload_elf((void *) ehcmodule_frag_v4_bin, &my_data_elf); + } else if (IOS_GetRevision() == 0) { // 0? Strange value for v5 ehcmodule + gprintf("Loading ehcmodule v5\n"); + mload_elf((void *) ehcmodule_frag_v5_bin, &my_data_elf); + } thread_id = mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio); if(thread_id < 0) return -1; } @@ -579,7 +557,7 @@ int load_ehc_module() { // IOS 36 memcpy(ios_36, dip_plugin, 4); // copy the entry_point - memcpy(dip_plugin, ios_36, 4*10); // copy the adresses from the array + memcpy((void *) dip_plugin, ios_36, 4*10); // copy the adresses from the array mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet mload_write(dip_plugin,size_dip_plugin); @@ -594,7 +572,7 @@ int load_ehc_module() // IOS 38 memcpy(ios_38, dip_plugin, 4); // copy the entry_point - memcpy(dip_plugin, ios_38, 4*10); // copy the adresses from the array + memcpy((void *) dip_plugin, ios_38, 4*10); // copy the adresses from the array mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet mload_write(dip_plugin,size_dip_plugin); @@ -610,12 +588,11 @@ int load_ehc_module() return 0; } - int patch_cios_data() { patch_datas[0]=*((u32 *) (dip_plugin+16*4)); mload_set_ES_ioctlv_vector((void *) patch_datas[0]); return 1; } - +*/ diff --git a/source/mload/mload.h b/source/mload/mload.h index e068941e..b360faf6 100644 --- a/source/mload/mload.h +++ b/source/mload/mload.h @@ -218,8 +218,6 @@ int mload_setb(const void * addr, u8 dat); /*--------------------------------------------------------------------------------------------------------------*/ -int load_ehc_module(); -int patch_cios_data(); #ifdef __cplusplus diff --git a/source/mload/mload_modules.c b/source/mload/mload_modules.c new file mode 100644 index 00000000..78f84690 --- /dev/null +++ b/source/mload/mload_modules.c @@ -0,0 +1,489 @@ +#include "mload_modules.h" +#include "ehcmodule_frag_v4_bin.h" +#include "ehcmodule_frag_v5_bin.h" +#include "gecko.h" + +#define ALIGNED(x) __attribute__((aligned(x))) + +/* Used for Hermes NAND emulation */ +int global_mount; +int sd_ok=0; +int ud_ok=0; + +static u32 ios_36[16] ATTRIBUTE_ALIGN(32)= +{ + 0, // DI_EmulateCmd + 0, + 0x2022DDAC, // dvd_read_controlling_data + 0x20201010+1, // handle_di_cmd_reentry (thumb) + 0x20200b9c+1, // ios_shared_alloc_aligned (thumb) + 0x20200b70+1, // ios_shared_free (thumb) + 0x20205dc0+1, // ios_memcpy (thumb) + 0x20200048+1, // ios_fatal_di_error (thumb) + 0x20202b4c+1, // ios_doReadHashEncryptedState (thumb) + 0x20203934+1, // ios_printf (thumb) +}; + +static u32 ios_38[16] ATTRIBUTE_ALIGN(32)= +{ + 0, // DI_EmulateCmd + 0, + 0x2022cdac, // dvd_read_controlling_data + 0x20200d38+1, // handle_di_cmd_reentry (thumb) + 0x202008c4+1, // ios_shared_alloc_aligned (thumb) + 0x20200898+1, // ios_shared_free (thumb) + 0x20205b80+1, // ios_memcpy (thumb) + 0x20200048+1, // ios_fatal_di_error (thumb) + 0x20202874+1, // ios_doReadHashEncryptedState (thumb) + 0x2020365c+1, // ios_printf (thumb) +}; + + +static u32 ios_37[16] ATTRIBUTE_ALIGN(32)= +{ + 0, // DI_EmulateCmd + 0, + 0x2022DD60, // dvd_read_controlling_data + 0x20200F04+1, // handle_di_cmd_reentry (thumb) + 0x2020096C+1, // ios_shared_alloc_aligned (thumb) + 0x2020093C+1, // ios_shared_free (thumb) + 0x20205E54+1, // ios_memcpy (thumb) + 0x20200048+1, // ios_fatal_di_error (thumb) + 0x20202A70+1, // ios_doReadHashEncryptedState (thumb) + 0x2020387C+1, // ios_printf (thumb) +}; + +static u32 ios_57[16] ATTRIBUTE_ALIGN(32)= +{ + 0, // DI_EmulateCmd + 0, + 0x2022cd60, // dvd_read_controlling_data + 0x20200f04+1, // handle_di_cmd_reentry (thumb) + 0x2020096c+1, // ios_shared_alloc_aligned (thumb) // no usado + 0x2020093C+1, // ios_shared_free (thumb) // no usado + 0x20205EF0+1, // ios_memcpy (thumb) + 0x20200048+1, // ios_fatal_di_error (thumb) + 0x20202944+1, // ios_doReadHashEncryptedState (thumb) + 0x20203750+1, // ios_printf (thumb) +}; + +static u32 ios_60[16] ATTRIBUTE_ALIGN(32)= +{ + 0, // DI_EmulateCmd + 0, + 0x2022cd60, // dvd_read_controlling_data + 0x20200f04+1, // handle_di_cmd_reentry (thumb) + 0x2020096c+1, // ios_shared_alloc_aligned (thumb) // no usado + 0x2020093C+1, // ios_shared_free (thumb) // no usado + 0x20205e00+1, // ios_memcpy (thumb) + 0x20200048+1, // ios_fatal_di_error (thumb) + 0x20202944+1, // ios_doReadHashEncryptedState (thumb) + 0x20203750+1, // ios_printf (thumb) +}; + + +u32 patch_datas[8] ATTRIBUTE_ALIGN(32); + +data_elf my_data_elf; + +void *external_ehcmodule= NULL; +int size_external_ehcmodule=0; + +static int my_thread_id=0; + +int load_ehc_module() +{ +int is_ios=0; + +#if 0 + +FILE *fp; + +// WARNING!!!: load external module suspended +if(sd_ok && !external_ehcmodule) + { + + fp=fopen("sd:/apps/usbloader_gx/ehcmodule.elf","rb"); + if(fp==NULL) + fp=fopen("sd:/apps/usbloadergx/ehcmodule.elf","rb"); + + if(fp!=0) + { + fseek(fp, 0, SEEK_END); + size_external_ehcmodule = ftell(fp); + external_ehcmodule= memalign(32, size_external_ehcmodule); + if(!external_ehcmodule) + {fclose(fp);} + else + { + fseek(fp, 0, SEEK_SET); + + if(fread(external_ehcmodule,1, size_external_ehcmodule ,fp)!=size_external_ehcmodule) + {free(external_ehcmodule); external_ehcmodule=NULL;} + + fclose(fp); + } + } + } +#endif + +/* + if(mload_init()<0) return -1; + mload_elf((void *) logmodule, &my_data_elf); + my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio); + if(my_thread_id<0) return -1; + */ + + if(!external_ehcmodule) + { + +gprintf("before mload_init\n"); + if(mload_init()<0) return -1; +gprintf("after mload_init\n"); + if (IOS_GetRevision() == 4) { + gprintf("Loading ehcmodule v4\n"); + mload_elf((void *) ehcmodule_frag_v4_bin, &my_data_elf); + } else if (IOS_GetRevision() == 65535) { + gprintf("Loading ehcmodule v5\n"); + mload_elf((void *) ehcmodule_frag_v5_bin, &my_data_elf); + } else { + return -2; + } +// mload_elf((void *) ehcmodule, &my_data_elf); +gprintf("before mload_run_thread\n"); + my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio); + if(my_thread_id<0) return -1; + //if(mload_module(ehcmodule, size_ehcmodule)<0) return -1; + } + else + { + //if(mload_module(external_ehcmodule, size_external_ehcmodule)<0) return -1; + if(mload_init()<0) return -1; + mload_elf((void *) external_ehcmodule, &my_data_elf); + my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio); + if(my_thread_id<0) return -1; + } + usleep(350*1000); + + + // Test for IOS + + #if 0 + mload_seek(0x20207c84, SEEK_SET); + mload_read(patch_datas, 32); + if(patch_datas[0]==0x6e657665 ) + { + is_ios=38; + } + else + { + is_ios=36; + } + +#endif + is_ios=mload_get_IOS_base(); + + switch(is_ios) + { + + case 36: + + memcpy(ios_36, dip_plugin, 4); // copy the entry_point + memcpy(dip_plugin, ios_36, 4*10); // copy the adresses from the array + + mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet + mload_write(dip_plugin,size_dip_plugin); + + // enables DIP plugin + mload_seek(0x20209040, SEEK_SET); + mload_write(ios_36, 4); + break; + + case 37: + + memcpy(ios_37, dip_plugin, 4); // copy the entry_point + memcpy(dip_plugin, ios_37, 4*10); // copy the adresses from the array + + mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet + mload_write(dip_plugin,size_dip_plugin); + + // enables DIP plugin + mload_seek(0x20209030, SEEK_SET); + mload_write(ios_37, 4); + break; + + case 38: + + memcpy(ios_38, dip_plugin, 4); // copy the entry_point + memcpy(dip_plugin, ios_38, 4*10); // copy the adresses from the array + + mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet + mload_write(dip_plugin,size_dip_plugin); + + // enables DIP plugin + mload_seek(0x20208030, SEEK_SET); + mload_write(ios_38, 4); + break; + + case 57: + + memcpy(ios_57, dip_plugin, 4); // copy the entry_point + memcpy(dip_plugin, ios_57, 4*10); // copy the adresses from the array + + mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet + mload_write(dip_plugin,size_dip_plugin); + + // enables DIP plugin + mload_seek(0x20208030, SEEK_SET); + mload_write(ios_57, 4); + break; + + case 60: + + memcpy(ios_60, dip_plugin, 4); // copy the entry_point + memcpy(dip_plugin, ios_60, 4*10); // copy the adresses from the array + + mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet + mload_write(dip_plugin,size_dip_plugin); + + // enables DIP plugin + mload_seek(0x20208030, SEEK_SET); + mload_write(ios_60, 4); + break; + + } + + mload_close(); + +return 0; +} + +#define IOCTL_FAT_MOUNTSD 0xF0 +#define IOCTL_FAT_UMOUNTSD 0xF1 +#define IOCTL_FAT_MOUNTUSB 0xF2 +#define IOCTL_FAT_UMOUNTUSB 0xF3 + +#define IOCTL_FFS_MODE 0x80 + +int load_fatffs_module(u8 *discid) +{ + static char fs[] ATTRIBUTE_ALIGN(32) = "fat"; + s32 hid = -1, fd = -1; + static char file_name[256] ALIGNED(0x20)="SD:"; + int n; + char *p; + s32 ret; + + p=&file_name[0]; + + if(mload_init()<0) return -1; + + mload_elf((void *) fatffs_module, &my_data_elf); + my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio); + if(my_thread_id<0) return -1; + + global_mount &=~0xc; + + if(discid) + { + sd_ok=ud_ok=1; + + /* Function get_fat_name not implemented, this should return the path to the save file */ + // p=get_fat_name(discid); + p = NULL; + + sd_ok=ud_ok=0; + + if(!p) return -1; + + global_mount &=~0xf; + + // change 'ud:' by 'usb:' + if(p[0]=='U') {global_mount|=2;file_name[0]='U';file_name[1]='S';file_name[2]='B';memcpy(file_name+3, (void *)p+2, 253);} + else {global_mount|=1;memcpy(file_name, (void *) p, 256);} + + // copy filename to dip_plugin filename area + mload_seek(*((u32 *) (dip_plugin+14*4)), SEEK_SET); // offset 14 (filename Address - 256 bytes) + mload_write(file_name, sizeof(file_name)); + mload_close(); + + + } + else + { + if((global_mount & 3)==0) return 0; + if(global_mount & 1) p[0]='s'; + if(global_mount & 2) p[0]='u'; + } + usleep(350*1000); + + /* Create heap */ + if (hid < 0) { + hid = iosCreateHeap(0x100); + if (hid < 0) + return -1; + } + + /* Open USB device */ + fd = IOS_Open(fs, 0); + + if (fd < 0) + { + if(hid>=0) + { + iosDestroyHeap(hid); + hid=-1; + } + return -1; + } + + n=30; // try 20 times + while(n>0) + { + if((global_mount & 10)==2) {ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTUSB, ":");if(ret==0) global_mount|=8;} + else {ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTSD, ":");if(ret==0) {global_mount|=4;}} + + if((global_mount & 7)==3 && ret==0) + {ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTSD, ":");if(ret==0) global_mount|=4;} + + if((global_mount & 3)==((global_mount>>2) & 3) && (global_mount & 3)) {ret=0;break;} else ret=-1; + + //ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTSD, ":"); + //if(ret==0) break; + usleep(500*1000); + n--; + } + + if (fd >= 0) { + IOS_Close(fd); + fd = -1; + } + + if(hid>=0) + { + iosDestroyHeap(hid); + hid=-1; + } + + if(n==0) return -1; + +return 0; +} + + +int enable_ffs(int mode) +{ +static char fs[] ATTRIBUTE_ALIGN(32) = "fat"; + s32 hid = -1, fd = -1; +s32 ret; + + /* Create heap */ + if (hid < 0) { + hid = iosCreateHeap(0x100); + if (hid < 0) + return -1; + } + + /* Open USB device */ + fd = IOS_Open(fs, 0); + + if (fd < 0) + { + if(hid>=0) + { + iosDestroyHeap(hid); + hid=-1; + } + return -1; + } + + + ret=IOS_IoctlvFormat(hid, fd, IOCTL_FFS_MODE, "i:", mode); + + + if (fd >= 0) { + IOS_Close(fd); + fd = -1; + } + + if(hid>=0) + { + iosDestroyHeap(hid); + hid=-1; + } + + + +return ret; +} + +void enable_ES_ioctlv_vector(void) +{ + patch_datas[0]=*((u32 *) (dip_plugin+16*4)); + mload_set_ES_ioctlv_vector((void *) patch_datas[0]); +} + +void Set_DIP_BCA_Datas(u8 *bca_data) +{ + // write in dip_plugin bca data area + mload_seek(*((u32 *) (dip_plugin+15*4)), SEEK_SET); // offset 15 (bca_data area) + mload_write(bca_data, 64); + mload_close(); +} + +u8 *search_for_ehcmodule_cfg(u8 *p, int size) +{ + int n; + + for(n=0;n 0) usleep(50); - char * oggfile; - bool firstRun = true; while (!exit) { @@ -1336,8 +1335,9 @@ int MenuSettings() w.SetEffect(EFFECT_FADE, -20); while (w.GetEffect()>0) usleep(50); mainWindow->Remove(&w); - while (returnhere) - returnhere = MenuOGG(); + + returnhere = MenuBackgroundMusic(); + HaltGui(); mainWindow->Append(&w); w.SetEffect(EFFECT_FADE, 20); @@ -1346,13 +1346,15 @@ int MenuSettings() } else WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to use this option."),tr("OK")); } - if (!strcmp("notset", Settings.ogg_path)) - options2.SetValue(Idx, "%s", tr("Standard")); - else + + char * filename = strrchr(Settings.ogg_path, '/'); + if(filename) { - oggfile = strrchr(Settings.ogg_path, '/')+1; - options2.SetValue(Idx, "%s", oggfile); + filename += 1; + options2.SetValue(Idx, "%s", filename); } + else + options2.SetValue(Idx, "%s", tr("Standard")); } if(ret == ++Idx || firstRun) @@ -1422,7 +1424,43 @@ int MenuSettings() else options2.SetValue(Idx,"%s", tr("OFF")); } + + if(ret == ++Idx || firstRun) + { + if(firstRun) options2.SetName(Idx, "%s",tr("Music Loop Mode")); + if(ret == Idx) + { + Settings.musicloopmode++; + if (Settings.musicloopmode > 3) + Settings.musicloopmode = 0; + bgMusic->SetLoop(Settings.musicloopmode); + } + if (Settings.musicloopmode == ONCE) + options2.SetValue(Idx, tr("Play Once")); + else if(Settings.musicloopmode == LOOP) + options2.SetValue(Idx, tr("Loop Music")); + else if(Settings.musicloopmode == DIR_LOOP) + options2.SetValue(Idx, tr("Loop Directory")); + else if(Settings.musicloopmode == RANDOM_BGM) + options2.SetValue(Idx, tr("Random Directory Music")); + } + if(ret == ++Idx || firstRun) + { + if(firstRun) options2.SetName(Idx, "%s",tr("Reset BG Music")); + if(ret == Idx) + { + int result = WindowPrompt(tr("Reset to standard BGM?"), 0, tr("Yes"), tr("No")); + if(result) + { + bgMusic->LoadStandard(); + bgMusic->Play(); + options2.SetValue(Idx, "%s", tr("Standard")); + } + } + options2.SetValue(Idx,tr(" ")); + } + firstRun = false; } } @@ -2148,10 +2186,9 @@ int MenuSettings() // if partition has changed, Reinitialize it if (Settings.partition != settingspartitionold) { - WBFS_Close(); PartInfo pinfo = partitions.pinfo[Settings.partition]; partitionEntry pentry = partitions.pentry[Settings.partition]; - WBFS_OpenPart(load_from_fs, pinfo.index, pentry.sector, pentry.size, (char *) &game_partition); + WBFS_OpenPart(pinfo.part_fs, pinfo.index, pentry.sector, pentry.size, (char *) &game_partition); load_from_fs = pinfo.part_fs; } diff --git a/source/settings/SettingsPrompts.cpp b/source/settings/SettingsPrompts.cpp index 6a87e2c3..d7e8d10c 100644 --- a/source/settings/SettingsPrompts.cpp +++ b/source/settings/SettingsPrompts.cpp @@ -13,13 +13,11 @@ #include "main.h" #include "fatmounter.h" #include "filelist.h" +#include "prompts/filebrowser.h" #include "sys.h" -#include "menu.h" - +#include "menu/menus.h" /*** Extern variables ***/ -extern GuiWindow * mainWindow; -extern GuiSound * bgMusic; extern u8 shutdown; extern u8 reset; @@ -31,284 +29,58 @@ extern void HaltGui(); /**************************************************************************** * MenuOGG ***************************************************************************/ -bool MenuOGG() { - int cnt = 0; - int ret = 0, choice = 0; - int scrollon, nothingchanged = 0; - bool returnhere = false; +bool MenuBackgroundMusic() +{ + bool ret = false; + char entered[1024]; + int result = -1; + snprintf(entered, sizeof(entered), "%s", Settings.ogg_path); - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume); - // because destroy GuiSound must wait while sound playing is finished, we use a global sound - if(!btnClick2) btnClick2=new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume); - // GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume); - - char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path); - GuiImageData settingsbg(imgPath, settings_background_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - GuiTrigger trigMinus; - trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - GuiTrigger trigPlus; - trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - - char fullpath[150]; - char shortpath[35]; - int countoggs = GetAllDirFiles(Settings.oggload_path); - - if (!strcmp("", Settings.oggload_path)) { - sprintf(shortpath, "%s", tr("Standard")); - } else { - sprintf(shortpath, "%s", Settings.oggload_path); + if(strcmp(entered, "") == 0) + { + sprintf(entered, "%s", bootDevice); + } + else + { + char * pathptr = strrchr(entered, '/'); + if(pathptr) + { + pathptr++; + int choice = WindowPrompt(tr("Playing Music:"), pathptr, tr("Play Previous"), tr("Play Next"), tr("Change Play Path"), tr("Cancel")); + if(choice == 1) + { + return bgMusic->PlayPrevious(); + } + else if(choice == 2) + { + return bgMusic->PlayNext(); + } + else if(choice == 3) + { + pathptr[0] = 0; + } + else + return true; + } + else + sprintf(entered, "%s", bootDevice); } - GuiText titleTxt(shortpath, 24, (GXColor) {0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - titleTxt.SetPosition(0,0); - GuiButton pathBtn(300, 50); - pathBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - pathBtn.SetPosition(0,28); - pathBtn.SetLabel(&titleTxt); - pathBtn.SetSoundOver(&btnSoundOver); - pathBtn.SetSoundClick(btnClick2); - pathBtn.SetTrigger(&trigA); - pathBtn.SetEffectGrow(); + result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT); - GuiImage oggmenubackground(&settingsbg); - oggmenubackground.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - oggmenubackground.SetPosition(0, 0); - - GuiText backBtnTxt(tr("Back") , 22, THEME.prompttext); - backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage backBtnImg(&btnOutline); - if (Settings.wsprompt == yes) { - backBtnTxt.SetWidescreen(CFG.widescreen); - backBtnImg.SetWidescreen(CFG.widescreen); - } - GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); - backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - backBtn.SetPosition(-180, 400); - backBtn.SetLabel(&backBtnTxt); - backBtn.SetImage(&backBtnImg); - backBtn.SetSoundOver(&btnSoundOver); - backBtn.SetSoundClick(btnClick2); - backBtn.SetTrigger(&trigA); - backBtn.SetTrigger(&trigB); - backBtn.SetEffectGrow(); - - GuiText defaultBtnTxt(tr("Default") , 22, THEME.prompttext); - defaultBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage defaultBtnImg(&btnOutline); - if (Settings.wsprompt == yes) { - defaultBtnTxt.SetWidescreen(CFG.widescreen); - defaultBtnImg.SetWidescreen(CFG.widescreen); - } - GuiButton defaultBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); - defaultBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - defaultBtn.SetPosition(180, 400); - defaultBtn.SetLabel(&defaultBtnTxt); - defaultBtn.SetImage(&defaultBtnImg); - defaultBtn.SetSoundOver(&btnSoundOver); - defaultBtn.SetSoundClick(btnClick2); - defaultBtn.SetTrigger(&trigA); - defaultBtn.SetEffectGrow(); - - customOptionList options2(countoggs); - - for (cnt = 0; cnt < countoggs; cnt++) { - options2.SetValue(cnt, "%s", GetFileName(cnt)); - options2.SetName(cnt,"%i.", cnt+1); + if(result) + { + if (!bgMusic->Load(entered)) + { + WindowPrompt(tr("Not supported format!"), tr("Loading standard music."), tr("OK")); + } + else + ret = true; + bgMusic->Play(); + bgMusic->SetVolume(Settings.volume); } - if (cnt < 9) { - scrollon = 0; - } else { - scrollon = 1; - } - - GuiCustomOptionBrowser optionBrowser4(396, 280, &options2, CFG.theme_path, "bg_options_settings.png", bg_options_settings_png, scrollon, 10); - optionBrowser4.SetPosition(0, 90); - optionBrowser4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - - snprintf(imgPath, sizeof(imgPath), "%smp3_stop.png", CFG.theme_path); - GuiImageData stop(imgPath, mp3_stop_png); - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path); - GuiImageData play(imgPath, startgame_arrow_right_png); - - GuiImage playBtnImg(&play); - playBtnImg.SetWidescreen(CFG.widescreen); - GuiButton playBtn(play.GetWidth(), play.GetHeight()); - playBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - playBtn.SetPosition(50, 400); - playBtn.SetImage(&playBtnImg); - playBtn.SetSoundOver(&btnSoundOver); - playBtn.SetSoundClick(btnClick2); - playBtn.SetTrigger(&trigA); - playBtn.SetTrigger(&trigPlus); - playBtn.SetEffectGrow(); - - GuiImage stopBtnImg(&stop); - stopBtnImg.SetWidescreen(CFG.widescreen); - GuiButton stopBtn(stop.GetWidth(), stop.GetHeight()); - stopBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - stopBtn.SetPosition(-15, 400); - stopBtn.SetImage(&stopBtnImg); - stopBtn.SetSoundOver(&btnSoundOver); - stopBtn.SetSoundClick(btnClick2); - stopBtn.SetTrigger(&trigA); - stopBtn.SetTrigger(&trigMinus); - stopBtn.SetEffectGrow(); - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - w.Append(&oggmenubackground); - w.Append(&pathBtn); - w.Append(&backBtn); - w.Append(&playBtn); - w.Append(&stopBtn); - w.Append(&defaultBtn); - w.Append(&optionBrowser4); - mainWindow->Append(&w); - - w.SetEffect(EFFECT_FADE, 20); - ResumeGui(); - - while (w.GetEffect()>0) usleep(50); - - while (!returnhere) { - - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - - if (backBtn.GetState() == STATE_CLICKED) { - if (nothingchanged == 1 && countoggs > 0) { - if (strcmp("", Settings.oggload_path) && strcmp("notset", Settings.ogg_path)) { - bgMusic->Load(Settings.ogg_path); - } else { - bgMusic->Load(bg_music_ogg, bg_music_ogg_size, true); - } - bgMusic->Play(); - } - backBtn.ResetState(); - break; - } - - if (defaultBtn.GetState() == STATE_CLICKED) { - choice = WindowPrompt(tr("Loading standard music."),0,tr("OK"), tr("Cancel")); - if (choice == 1) { - sprintf(Settings.ogg_path, "notset"); - bgMusic->Load(bg_music_ogg, bg_music_ogg_size, true); - bgMusic->Play(); - bgMusic->SetVolume(Settings.volume); - cfg_save_global(); - } - defaultBtn.ResetState(); - if (countoggs > 0) - optionBrowser4.SetFocus(1); - } - - if (pathBtn.GetState() == STATE_CLICKED) { - w.Remove(&optionBrowser4); - w.Remove(&backBtn); - w.Remove(&pathBtn); - w.Remove(&playBtn); - w.Remove(&stopBtn); - w.Remove(&defaultBtn); - char entered[43] = ""; - strlcpy(entered, Settings.oggload_path, sizeof(entered)); - int result = OnScreenKeyboard(entered,43,0); - w.Append(&optionBrowser4); - w.Append(&pathBtn); - w.Append(&backBtn); - w.Append(&playBtn); - w.Append(&stopBtn); - w.Append(&defaultBtn); - if ( result == 1 ) { - int len = (strlen(entered)-1); - if (entered[len] !='/') - strncat (entered, "/", 1); - strlcpy(Settings.oggload_path, entered, sizeof(Settings.oggload_path)); - WindowPrompt(tr("Backgroundmusic Path changed."),0,tr("OK")); - if (isInserted(bootDevice)) { - if (!strcmp("", Settings.oggload_path)) { - sprintf(Settings.ogg_path, "notset"); - bgMusic->Play(); - } - cfg_save_global(); - returnhere = true; - break; - } else { - WindowPrompt(tr("No SD-Card inserted!"), tr("Insert an SD-Card to save."), tr("OK")); - } - } - if (countoggs > 0) { - optionBrowser4.SetFocus(1); - } - pathBtn.ResetState(); - } - - ret = optionBrowser4.GetClickedOption(); - - if (ret>=0) { - choice = WindowPrompt(tr("Set as backgroundmusic?"),GetFileName(ret),tr("Yes"),tr("No")); - if (choice == 1) { - snprintf(fullpath,150,"%s%s",Settings.oggload_path,GetFileName(ret)); - if (!bgMusic->Load(fullpath)) { - WindowPrompt(tr("Not supported format!"), tr("Loading standard music."), tr("OK")); - sprintf(Settings.ogg_path, "notset"); - } else { - snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s", fullpath); - cfg_save_global(); - bgMusic->SetVolume(Settings.volume); - nothingchanged = 0; - } - bgMusic->Play(); - bgMusic->SetVolume(Settings.volume); - } - optionBrowser4.SetFocus(1); - } - - if (playBtn.GetState() == STATE_CLICKED && countoggs > 0) { - if (countoggs > 0) { - ret = optionBrowser4.GetSelectedOption(); - snprintf(fullpath, 150,"%s%s", Settings.oggload_path,GetFileName(ret)); - if (!bgMusic->Load(fullpath)) { - WindowPrompt(tr("Not supported format!"), tr("Loading standard music."), tr("OK")); - } - bgMusic->Play(); - bgMusic->SetVolume(Settings.volume); - nothingchanged = 1; - optionBrowser4.SetFocus(1); - } - playBtn.ResetState(); - } - - if (stopBtn.GetState() == STATE_CLICKED) { - if (countoggs > 0) { - bgMusic->Stop(); - nothingchanged = 1; - optionBrowser4.SetFocus(1); - } - stopBtn.ResetState(); - } - } - - w.SetEffect(EFFECT_FADE, -20); - while (w.GetEffect()>0) usleep(50); - - HaltGui(); - mainWindow->Remove(&w); - ResumeGui(); - - return returnhere; + return ret; } /**************************************************************************** diff --git a/source/settings/SettingsPrompts.h b/source/settings/SettingsPrompts.h index cf7098cc..d16a12ac 100644 --- a/source/settings/SettingsPrompts.h +++ b/source/settings/SettingsPrompts.h @@ -8,7 +8,7 @@ #ifndef _SETTINGSPROMPTS_H_ #define _SETTINGSPROMPTS_H_ -bool MenuOGG(); +bool MenuBackgroundMusic(); int MenuLanguageSelect(); #endif diff --git a/source/settings/cfg.c b/source/settings/cfg.c index 4d89cb2b..f6df6c15 100644 --- a/source/settings/cfg.c +++ b/source/settings/cfg.c @@ -201,8 +201,7 @@ void CFG_Default(int widescreen) { // -1 = non forced Mode snprintf(Settings.BcaCodepath, sizeof(Settings.BcaCodepath), "%s/bca/", bootDevice); snprintf(Settings.WipCodepath, sizeof(Settings.WipCodepath), "%s/wip/", bootDevice); snprintf(Settings.dolpath, sizeof(Settings.dolpath), "%s/", bootDevice); - snprintf(Settings.oggload_path, sizeof(Settings.oggload_path), "%s/config/backgroundmusic/", bootDevice); - sprintf(Settings.ogg_path, "notset"); + strcpy(Settings.ogg_path, ""); } //always set Theme defaults //all alignments are left top here @@ -358,6 +357,7 @@ void Global_Default(void) { snprintf(Settings.db_language, sizeof(Settings.db_language), empty); Settings.db_JPtoEN = 0; Settings.screensaver = 3; + Settings.musicloopmode = 1; Settings.partition = -1; Settings.marknewtitles = 1; Settings.FatInstallToDir = 0; @@ -579,10 +579,6 @@ void path_set(char *name, char *val) { strlcpy(Settings.dolpath, val, sizeof(Settings.dolpath)); return; } - if (strcmp(name, "oggload_path") == 0) { - strlcpy(Settings.oggload_path, val, sizeof(Settings.oggload_path)); - return; - } if (strcmp(name, "ogg_path") == 0) { strlcpy(Settings.ogg_path, val, sizeof(Settings.ogg_path)); return; @@ -1111,6 +1107,12 @@ void global_cfg_set(char *name, char *val) { Settings.screensaver = i; } return; + } else if (strcmp(name, "musicloopmode") == 0) { + int i; + if (sscanf(val, "%d", &i) == 1) { + Settings.musicloopmode = i; + } + return; } else if (strcmp(name, "partition") == 0) { int i; if (sscanf(val, "%d", &i) == 1) { @@ -1364,7 +1366,6 @@ bool cfg_save_global() { // save global settings fprintf(f, "titlestxt_path = %s\n ", Settings.titlestxt_path); fprintf(f, "gamesound = %d\n ", Settings.gamesound); fprintf(f, "dolpath = %s\n ", Settings.dolpath); - fprintf(f, "oggload_path = %s\n ", Settings.oggload_path); fprintf(f, "ogg_path = %s\n ", Settings.ogg_path); fprintf(f, "wiilight = %d\n ", Settings.wiilight); fprintf(f, "gameDisplay = %d\n ", Settings.gameDisplay); @@ -1380,6 +1381,7 @@ bool cfg_save_global() { // save global settings //fprintf(f, "db_language = %d\n ", Settings.language); fprintf(f, "patchcountrystrings = %d\n ", Settings.patchcountrystrings); fprintf(f, "screensaver = %d\n ", Settings.screensaver); + fprintf(f, "musicloopmode = %d\n ", Settings.musicloopmode); fprintf(f, "error002 = %d\n ", Settings.error002); fprintf(f, "autonetwork = %d\n ", Settings.autonetwork); fprintf(f, "discart = %d\n ", Settings.discart); @@ -1890,6 +1892,7 @@ void CFG_Cleanup(void) free(cfg_title); cfg_title = NULL; } + num_title = 0; } diff --git a/source/settings/cfg.h b/source/settings/cfg.h index 3aac08ba..9f01df53 100644 --- a/source/settings/cfg.h +++ b/source/settings/cfg.h @@ -419,7 +419,8 @@ extern "C" { u8 gameDisplay; u8 patchcountrystrings; u8 screensaver; - s8 partition; + u8 partition; + u8 musicloopmode; short godmode; char covers_path[100]; char covers2d_path[100]; @@ -430,8 +431,7 @@ extern "C" { char titlestxt_path[100]; char language_path[100]; char languagefiles_path[100]; - char oggload_path[100]; - char ogg_path[150]; + char ogg_path[250]; char dolpath[150]; char update_path[150]; char homebrewapps_path[150]; diff --git a/source/sys.cpp b/source/sys.cpp index 18996532..243beeec 100644 --- a/source/sys.cpp +++ b/source/sys.cpp @@ -7,7 +7,7 @@ #include "usbloader/disc.h" #include "usbloader/wbfs.h" #include "usbloader/partition_usbloader.h" -#include "mload/mload.h" +#include "mload/mload_modules.h" #include "video.h" #include "audio.h" #include "menu.h" @@ -232,14 +232,14 @@ s32 IOS_ReloadIOSsafe(int ios) if (ios222rev == -69) ios222rev = getIOSrev(0x00000001000000dell); - if (ios222rev >= 0 && (ios222rev != 4 && ios222rev != 5))return -2; + if (ios222rev > 0 && (ios222rev != 4 && ios222rev != 5))return -2; } else if (ios==223) { if (ios223rev == -69) ios223rev = getIOSrev(0x00000001000000dfll); - if (ios223rev >= 0 && (ios223rev != 4 && ios223rev != 5))return -2; + if (ios223rev > 0 && (ios223rev != 4 && ios223rev != 5))return -2; } else if (ios==249) { diff --git a/source/usbloader/apploader.c b/source/usbloader/apploader.c index 58d6f93e..5b9ce60a 100644 --- a/source/usbloader/apploader.c +++ b/source/usbloader/apploader.c @@ -408,7 +408,7 @@ s32 Apploader_Run(entry_point *entry, u8 cheat, u8 videoSelected, u8 vipatch, u8 hooktype = 1; memcpy((void*)0x80001800, (char*)0x80000000, 6); // For WiiRD /*HOOKS STUFF - FISHEARS*/ - printf("\n\tcode handler loaded"); + gprintf("\n\tcode handler loaded"); } for (;;) { diff --git a/source/usbloader/frag.c b/source/usbloader/frag.c index f85f7abc..3bb4651d 100644 --- a/source/usbloader/frag.c +++ b/source/usbloader/frag.c @@ -8,13 +8,10 @@ #include "libntfs/ntfs.h" #include "libwbfs/libwbfs.h" #include "wbfs.h" -#include "wbfs_fat.h" #include "usbstorage.h" #include "frag.h" #include "utils.h" -int _FAT_get_fragments (const char *path, _frag_append_t append_fragment, void *callback_data); - FragList *frag_list = NULL; void frag_init(FragList *ff, int maxnum) @@ -148,98 +145,7 @@ int frag_remap(FragList *ff, FragList *log, FragList *phy) int get_frag_list(u8 *id) { - char fname[1024]; - char fname1[1024]; - struct stat st; - FragList *fs = NULL; - FragList *fa = NULL; - FragList *fw = NULL; - int ret; - int i, j; - int is_wbfs = 0; - int ret_val = -1; - - if (wbfs_part_fs == PART_FS_WBFS) return 0; - - ret = WBFS_FAT_find_fname(id, fname, sizeof(fname)); - if (!ret) return -1; - - if (strcasecmp(strrchr(fname,'.'), ".wbfs") == 0) { - is_wbfs = 1; - } - - fs = malloc(sizeof(FragList)); - fa = malloc(sizeof(FragList)); - fw = malloc(sizeof(FragList)); - - frag_init(fa, MAX_FRAG); - - for (i=0; i<10; i++) { - frag_init(fs, MAX_FRAG); - if (i > 0) { - fname[strlen(fname)-1] = '0' + i; - if (stat(fname, &st) == -1) break; - } - strcpy(fname1, fname); - //printf("::*%s\n", strrchr(fname,'/')); - if (wbfs_part_fs == PART_FS_FAT) { - ret = _FAT_get_fragments(fname, &_frag_append, fs); - if (ret) { - printf("fat getf: %d\n", ret); - // don't return failure, let it fallback to old method - //ret_val = ret; - ret_val = 0; - goto out; - } - } else if (wbfs_part_fs == PART_FS_NTFS) { - ret = _NTFS_get_fragments(fname, &_frag_append, fs); - if (ret) { - printf("ntfs getf: %d\n", ret); - if (ret == -50 || ret == -500) { - printf("Too many fragments! %d\n", fs->num); - } - ret_val = ret; - goto out; - } - // offset to start of partition - for (j=0; jnum; j++) { - fs->frag[j].sector += fs_ntfs_sec; - } - } - frag_concat(fa, fs); - } - - frag_list = malloc(sizeof(FragList)); - frag_init(frag_list, MAX_FRAG); - if (is_wbfs) { - // if wbfs file format, remap. - //printf("=====\n"); - wbfs_disc_t *d = WBFS_OpenDisc(id); - if (!d) goto out; - frag_init(fw, MAX_FRAG); - ret = wbfs_get_fragments(d, &_frag_append, fw); - if (ret) goto out; - WBFS_CloseDisc(d); - // DEBUG: frag_list->num = MAX_FRAG-10; // stress test - ret = frag_remap(frag_list, fw, fa); - if (ret) goto out; - } else { - // .iso does not need remap just copy - //printf("fa:\n"); - memcpy(frag_list, fa, sizeof(FragList)); - } - - ret_val = 0; - -out: - if (ret_val) { - // error - SAFE_FREE(frag_list); - } - SAFE_FREE(fs); - SAFE_FREE(fa); - SAFE_FREE(fw); - return ret_val; + return WBFS_GetFragList(id); } int set_frag_list(u8 *id) @@ -248,7 +154,7 @@ int set_frag_list(u8 *id) if (frag_list == NULL) { if (wbfs_part_fs == PART_FS_FAT) { // fall back to old fat method - printf("FAT: fallback to old method\n"); +// printf("FAT: fallback to old method\n"); return 0; } // ntfs has no fallback, return error @@ -259,7 +165,7 @@ int set_frag_list(u8 *id) int size = sizeof(Fragment) * (frag_list->num + 1); int ret = USBStorage_WBFS_SetFragList(frag_list, size); if (ret) { - printf("set_frag: %d\n", ret); +// printf("set_frag: %d\n", ret); return ret; } diff --git a/source/usbloader/getentries.cpp b/source/usbloader/getentries.cpp index afd54079..094544e5 100644 --- a/source/usbloader/getentries.cpp +++ b/source/usbloader/getentries.cpp @@ -8,6 +8,7 @@ #include "settings/newtitles.h" #include "../prompts/TitleBrowser.h" +#include "prompts/PromptWindows.h" #include "wad/wad.h" #include "xml/xml.h" @@ -16,6 +17,8 @@ #include #include +#include "gecko.h" + #include "listfiles.h" #define typei 0x00010001 @@ -27,6 +30,9 @@ wchar_t *gameFilter=NULL; wchar_t *gameFilterNextList=NULL; wchar_t *gameFilterPrev=NULL; +struct discHdr * fullGameList = NULL; +s32 fullGameCnt = -1; + extern u8 mountMethod; /**************************************************************************** @@ -59,19 +65,12 @@ static inline int wcsnicmp(const wchar_t *s1, const wchar_t *s2, int len) * EntryCmp ***************************************************************************/ s32 __Menu_EntryCmp(const void *a, const void *b) - { - struct discHdr *hdr1 = (struct discHdr *)a; - struct discHdr *hdr2 = (struct discHdr *)b; - - /* Compare strings */ - return stricmp(get_title(hdr1), get_title(hdr2)); - } s32 __Menu_EntryCmpCount(const void *a, const void *b) { @@ -87,8 +86,6 @@ s32 __Menu_EntryCmpCount(const void *a, const void *b) { struct Game_NUM* game_num1 = CFG_get_game_num(hdr1->id); struct Game_NUM* game_num2 = CFG_get_game_num(hdr2->id); - - if (game_num1) count1 = game_num1->count; if (game_num2) count2 = game_num2->count; @@ -119,52 +116,86 @@ s32 __Menu_EntryCmpFavorite(const void *a, const void *b) { return ret; } + +void ResetGamelist() +{ + if (fullGameList != NULL) + { + fullGameCnt = -1; + free(fullGameList); + fullGameList = NULL; + } +} + +int GetFullHeaders(struct discHdr **headers, u32 *count) +{ + if (fullGameList == NULL || fullGameCnt == -1) + { + gprintf("Retrieving gamelist from WBFS\n"); + + // Retrieve all stuff from WBFS + u32 cnt; + + int ret = WBFS_GetCount(&cnt); + if (ret < 0) + return ret; + + /* Buffer length */ + u32 len = sizeof(struct discHdr) * cnt; + + /* Allocate memory */ + struct discHdr *buffer = (struct discHdr *)memalign(32, len); + if (!buffer) + return -1; + + /* Clear buffer */ + memset(buffer, 0, len); + + /* Get header list */ + ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr)); + if (ret < 0) { + if (buffer) free(buffer); + return ret; + } + + fullGameList = buffer; + fullGameCnt = cnt; + } + else + gprintf("Retrieving gamelist from cache\n"); + + *count = fullGameCnt; + if (headers != NULL) + { + *headers = fullGameList; + } + + return 0; +} + /**************************************************************************** * Get PrevFilter ***************************************************************************/ - int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t **PgameFilterPrev) { std::vector nameList; - struct discHdr *buffer = NULL; + struct discHdr *buffer = NULL; // DO NOT FREE THIS BUFFER, IT'S A REFERENCE u32 cnt, len, i; - s32 ret; wchar_t *new_gameFilterPrev = wcsdup_new(gameFilter); - - /* Get list length */ - ret = WBFS_GetCount(&cnt); - if (ret < 0) - return ret; - - /* Buffer length */ - len = sizeof(struct discHdr) * cnt; - - /* Allocate memory */ - buffer = (struct discHdr *)memalign(32, len); - if (!buffer) + if (GetFullHeaders(&buffer, &cnt)) + { return -1; - - /* Clear buffer */ - memset(buffer, 0, len); - - /* Get header list */ - ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr)); - if (ret < 0) { - if (buffer) free(buffer); - return ret; } + /* Fill nameList */ for (i = 0; i < cnt; i++) { struct discHdr *header = &buffer[i]; - - /* Register game */ - NewTitles::Instance()->CheckGame(header->id); - + /* Filter Favorite */ if (Settings.fave && t==0) { @@ -193,11 +224,6 @@ int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t * wchar_t *wname = FreeTypeGX::charToWideChar(get_title(header)); if(wname) nameList.push_back(wname); } - - NewTitles::Instance()->Save(); - - /* delete buffer */ - if(buffer) free(buffer); /* Find Prev-Filter */ len = wcslen(new_gameFilterPrev); @@ -455,38 +481,23 @@ int buildTitleList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameC } - /**************************************************************************** * Get Gamelist ***************************************************************************/ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameCnt) { struct discHdr *buffer = NULL; + struct discHdr *output = NULL; - u32 cnt, cnt2=0, len; - s32 ret; + u32 cnt, cnt2=0; - /* Get list length */ - ret = WBFS_GetCount(&cnt); - if (ret < 0) - return ret; + if (GetFullHeaders(&buffer, &cnt)) + { + return -1; + } - /* Buffer length */ - len = sizeof(struct discHdr) * cnt; - - /* Allocate memory */ - buffer = (struct discHdr *)memalign(32, len); - if (!buffer) - return -1; - - /* Clear buffer */ - memset(buffer, 0, len); - - /* Get header list */ - ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr)); - if (ret < 0) { - if (buffer) free(buffer); - return ret; - } + int len = cnt * sizeof(struct discHdr); + output = (struct discHdr *) memalign(32, len); + memset(output, 0, len); for (u32 i = 0; i < cnt; i++) { struct discHdr *header = &buffer[i]; @@ -501,11 +512,11 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg continue; } - //ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed - if (header->id[0]=='_'&&header->id[1]=='_'&& - header->id[2]=='C'&&header->id[3]=='F'&& - header->id[4]=='G'&&header->id[5]=='_') - continue; + //ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed + if (header->id[0]=='_'&&header->id[1]=='_'&& + header->id[2]=='C'&&header->id[3]=='F'&& + header->id[4]=='G'&&header->id[5]=='_') + continue; if (Settings.parentalcontrol && !Settings.godmode && t==0) { if (get_block(header) >= Settings.parentalcontrol) @@ -532,32 +543,33 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg continue; } } - if(i != cnt2) - buffer[cnt2] = buffer[i]; + output[cnt2] = buffer[i]; cnt2++; } NewTitles::Instance()->Save(); - + if(cnt > cnt2) { cnt = cnt2; - buffer = (struct discHdr *)realloc(buffer, sizeof(struct discHdr) * cnt); + output = (struct discHdr *)realloc(output, sizeof(struct discHdr) * cnt); } - if (!buffer) + if (!output) return -1; + + gprintf("After retrieval, gamecount: %d\n", cnt); if (Settings.sort==pcount) { - qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount); + qsort(output, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount); } else if (Settings.fave) { - qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpFavorite); + qsort(output, cnt, sizeof(struct discHdr), __Menu_EntryCmpFavorite); } else { - qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp); + qsort(output, cnt, sizeof(struct discHdr), __Menu_EntryCmp); } /* Set values */ - if(PgameList) *PgameList = buffer; else free(buffer); + if(PgameList) *PgameList = output; else free(output); if(PgameCnt) *PgameCnt = cnt; - + return 0; } diff --git a/source/usbloader/getentries.h b/source/usbloader/getentries.h index 0039a671..a60f0fff 100644 --- a/source/usbloader/getentries.h +++ b/source/usbloader/getentries.h @@ -29,5 +29,6 @@ extern wchar_t *gameFilterPrev; int __Menu_GetEntries(int t=0, const wchar_t* Filter=NULL); s32 __Menu_EntryCmpCount(const void *a, const void *b); s32 __Menu_EntryCmp(const void *a, const void *b); +void ResetGamelist(); #endif diff --git a/source/usbloader/partition_usbloader.c b/source/usbloader/partition_usbloader.c index adc28c53..082972fe 100644 --- a/source/usbloader/partition_usbloader.c +++ b/source/usbloader/partition_usbloader.c @@ -117,7 +117,7 @@ bool Device_WriteSectors(u32 device, u32 sector, u32 count, void *buffer) return false; } -s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *psect_size, int *num) +s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *psect_size, u8 *num) { static partitionTable table ATTRIBUTE_ALIGN(32); partitionEntry *entry; @@ -260,7 +260,7 @@ int get_fs_type(void *buff) { char *buf = buff; // WBFS - wbfs_head_t *head = (wbfs_head_t *)buf; + wbfs_head_t *head = (wbfs_head_t *)buff; if (head->magic == wbfs_htonl(WBFS_MAGIC)) return FS_TYPE_WBFS; // 55AA if (buf[0x1FE] == 0x55 && buf[0x1FF] == 0xAA) { @@ -354,12 +354,12 @@ s32 Partition_GetList(u32 device, PartList *plist) } -int Partition_FixEXT(u32 device, int part) +int Partition_FixEXT(u32 device, u8 part) { static partitionTable table ATTRIBUTE_ALIGN(32); int ret; - if (part < 0 || part > 3) return -1; + if (part > 3) return -1; // Read partition table ret = Device_ReadSectors(device, 0, 1, &table); if (!ret) return -1; diff --git a/source/usbloader/partition_usbloader.h b/source/usbloader/partition_usbloader.h index b6f32697..bf6bd061 100644 --- a/source/usbloader/partition_usbloader.h +++ b/source/usbloader/partition_usbloader.h @@ -38,32 +38,32 @@ typedef struct { typedef struct { - int fs_type; - int part_fs; - int wbfs_i; // seq wbfs part index - int fat_i; // seq fat part index - int ntfs_i; // seq ntfs part index - int index; + u8 fs_type; + u8 part_fs; + u8 wbfs_i; // seq wbfs part index + u8 fat_i; // seq fat part index + u8 ntfs_i; // seq ntfs part index + u8 index; } PartInfo; typedef struct { - int num; + u8 num; u32 sector_size; partitionEntry pentry[MAX_PARTITIONS_EX]; - int wbfs_n; - int fat_n; - int ntfs_n; + u8 wbfs_n; + u8 fat_n; + u8 ntfs_n; PartInfo pinfo[MAX_PARTITIONS_EX]; } PartList; /* Prototypes */ s32 Partition_GetEntries(u32 device, partitionEntry *outbuf, u32 *outval); -s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *outval, int *num); +s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *outval, u8 *num); bool Device_ReadSectors(u32 device, u32 sector, u32 count, void *buffer); bool Device_WriteSectors(u32 device, u32 sector, u32 count, void *buffer); s32 Partition_GetList(u32 device, PartList *plist); -int Partition_FixEXT(u32 device, int part); +int Partition_FixEXT(u32 device, u8 part); bool part_is_extended(int type); bool part_is_data(int type); diff --git a/source/usbloader/splits.c b/source/usbloader/splits.c index dc933400..d2b01df3 100644 --- a/source/usbloader/splits.c +++ b/source/usbloader/splits.c @@ -155,8 +155,8 @@ int split_read_sector(void *_fp,u32 lba,u32 count,void*buf) split_error("error seeking in disc partition"); return 1; } - //ret = fread(buf+i*512, 512ULL, chunk, f); - ret = read(fd, buf+i*512, chunk * 512); + void *ptr = ((u8 *)buf) + (i*512); + ret = read(fd, ptr, chunk * 512); if (ret != chunk * 512) { fprintf(stderr, "error reading %u %u [%u] %u = %u\n", lba, count, i, chunk, ret); @@ -189,7 +189,8 @@ int split_write_sector(void *_fp,u32 lba,u32 count,void*buf) } //if (fwrite(buf+i*512, 512ULL, chunk, f) != chunk) { //printf("write %d %p %d \n", fd, buf+i*512, chunk * 512); - ret = write(fd, buf+i*512, chunk * 512); + void *ptr = ((u8 *)buf) + (i*512); + ret = write(fd, ptr, chunk * 512); //printf("write ret = %d \n", ret); if (ret != chunk * 512) { split_error("error writing disc"); diff --git a/source/usbloader/splits.h b/source/usbloader/splits.h index fe9da4a8..b9639e73 100644 --- a/source/usbloader/splits.h +++ b/source/usbloader/splits.h @@ -1,3 +1,9 @@ +#ifndef _SPLITS_H +#define _SPLITS_H + +#ifdef __cplusplus +extern "C" { +#endif #define MAX_SPLIT 10 @@ -30,6 +36,10 @@ void split_init(split_info_t *s, char *fname); void split_set_size(split_info_t *s, u64 split_size, u64 total_size); void split_close(split_info_t *s); int split_open(split_info_t *s, char *fname); -int split_create(split_info_t *s, char *fname, - u64 split_size, u64 total_size, bool overwrite); +int split_create(split_info_t *s, char *fname, u64 split_size, u64 total_size, bool overwrite); +#ifdef __cplusplus +} +#endif + +#endif //_SPLITS_H \ No newline at end of file diff --git a/source/usbloader/usbstorage.c b/source/usbloader/usbstorage.c index d89ff674..d9657a00 100644 --- a/source/usbloader/usbstorage.c +++ b/source/usbloader/usbstorage.c @@ -45,9 +45,10 @@ distribution. #define WBFS_BASE (('W'<<24)|('F'<<16)|('S'<<8)) #define USB_IOCTL_WBFS_OPEN_DISC (WBFS_BASE+0x1) #define USB_IOCTL_WBFS_READ_DISC (WBFS_BASE+0x2) -#define USB_IOCTL_WBFS_READ_DEBUG (WBFS_BASE+0x3) -#define USB_IOCTL_WBFS_SET_DEVICE (WBFS_BASE+0x4) -#define USB_IOCTL_WBFS_SET_FRAGLIST (WBFS_BASE+0x5) +#define USB_IOCTL_WBFS_READ_DIRECT_DISC (WBFS_BASE+0x3) +#define USB_IOCTL_WBFS_STS_DISC (WBFS_BASE+0x4) +#define USB_IOCTL_WBFS_SET_DEVICE (WBFS_BASE+0x50) +#define USB_IOCTL_WBFS_SET_FRAGLIST (WBFS_BASE+0x51) #define UMS_HEAPSIZE 0x1000 @@ -267,22 +268,6 @@ s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer) } -s32 USBStorage_WBFS_ReadDebug(u32 off, u32 size, void *buffer) -{ - s32 ret; - - USBStorage_Init(); - /* Device not opened */ - if (fd < 0) - return fd; - - /* Read data */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_READ_DEBUG, "ii:d", off, size, buffer, size); - - return ret; -} - - s32 USBStorage_WBFS_SetDevice(int dev) { s32 ret; diff --git a/source/usbloader/usbstorage.h b/source/usbloader/usbstorage.h index 47df60ad..4a148f0c 100644 --- a/source/usbloader/usbstorage.h +++ b/source/usbloader/usbstorage.h @@ -14,7 +14,6 @@ extern "C" { s32 USBStorage_WBFS_Open(char *buf_id); s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer); - s32 USBStorage_WBFS_ReadDebug(u32 off, u32 size, void *buffer); s32 USBStorage_WBFS_SetDevice(int dev); s32 USBStorage_WBFS_SetFragList(void *p, int size); diff --git a/source/usbloader/wbfs.c b/source/usbloader/wbfs.c deleted file mode 100644 index accbbbae..00000000 --- a/source/usbloader/wbfs.c +++ /dev/null @@ -1,645 +0,0 @@ -#include -#include -#include -#include -#include - -#include "sdhc.h" -#include "usbstorage.h" -#include "utils.h" -#include "video.h" -#include "wdvd.h" -#include "wbfs.h" -#include "wbfs_fat.h" -#include "fatmounter.h" -#include "partition_usbloader.h" -#include "settings/cfg.h" - -#include "libwbfs/libwbfs.h" - -/* Constants */ -#define MAX_NB_SECTORS 32 - -/* WBFS device */ -s32 wbfsDev = WBFS_MIN_DEVICE; - -// partition -int wbfs_part_fs = PART_FS_WBFS; -u32 wbfs_part_idx = 0; -u32 wbfs_part_lba = 0; - -/* WBFS HDD */ -wbfs_t *hdd = NULL; - -/* WBFS callbacks */ -static rw_sector_callback_t readCallback = NULL; -static rw_sector_callback_t writeCallback = NULL; -static s32 done = -1, total = -1; -/* Variables */ - -static u32 nb_sectors, sector_size; - -void WBFS_Spinner(s32 x, s32 max) { - done = x; - total = max; -} - -wbfs_disc_t* WBFS_OpenDisc(u8 *discid) -{ - if (wbfs_part_fs) return WBFS_FAT_OpenDisc(discid); - - /* No device open */ - if (!hdd) - return NULL; - - /* Open disc */ - return wbfs_open_disc(hdd, discid); -} - -void WBFS_CloseDisc(wbfs_disc_t *disc) -{ - if (wbfs_part_fs) { - WBFS_FAT_CloseDisc(disc); - return; - } - - /* No device open */ - if (!hdd || !disc) - return; - - /* Close disc */ - wbfs_close_disc(disc); -} - -void GetProgressValue(s32 * d, s32 * m) { - *d = done; - *m = total; -} - -wbfs_t *GetHddInfo(void) { - return hdd; -} - -s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) { - void *buffer = NULL; - - u64 offset; - u32 mod, size; - s32 ret; - - /* Calculate offset */ - offset = ((u64)lba) << 2; - - /* Calcualte sizes */ - mod = len % 32; - size = len - mod; - - /* Read aligned data */ - if (size) { - ret = WDVD_UnencryptedRead(iobuf, size, offset); - if (ret < 0) - goto out; - } - - /* Read non-aligned data */ - if (mod) { - /* Allocate memory */ - buffer = memalign(32, 0x20); - if (!buffer) - return -1; - - /* Read data */ - ret = WDVD_UnencryptedRead(buffer, 0x20, offset + size); - if (ret < 0) - goto out; - - /* Copy data */ - memcpy(iobuf + size, buffer, mod); - } - - /* Success */ - ret = 0; - -out: - /* Free memory */ - if (buffer) - free(buffer); - - return ret; -} - -s32 __WBFS_ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) { - u32 cnt = 0; - s32 ret; - - /* Do reads */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Read sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* USB read */ - ret = USBStorage_ReadSectors(lba + cnt, sectors, ptr); - if (ret < 0) - return ret; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 __WBFS_WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) { - u32 cnt = 0; - s32 ret; - - /* Do writes */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Write sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* USB write */ - ret = USBStorage_WriteSectors(lba + cnt, sectors, ptr); - if (ret < 0) - return ret; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 __WBFS_ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) { - u32 cnt = 0; - s32 ret; - - /* Do reads */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Read sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* SDHC read */ - ret = SDHC_ReadSectors(lba + cnt, sectors, ptr); - if (!ret) - return -1; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 __WBFS_WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) { - u32 cnt = 0; - s32 ret; - - /* Do writes */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Write sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* SDHC write */ - ret = SDHC_WriteSectors(lba + cnt, sectors, ptr); - if (!ret) - return -1; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 WBFS_Init(u32 device) { - s32 ret; - - switch (device) { - case WBFS_DEVICE_USB: - /* Initialize USB storage */ - ret = USBStorage_Init(); - if (ret >= 0) { - /* Setup callbacks */ - readCallback = __WBFS_ReadUSB; - writeCallback = __WBFS_WriteUSB; - /* Device info */ - /* Get USB capacity */ - nb_sectors = USBStorage_GetCapacity(§or_size); - if (!nb_sectors) - return -1; - } else - return ret; - break; - case WBFS_DEVICE_SDHC: - /* Initialize SDHC */ - ret = SDHC_Init(); - - if (ret) { - /* Setup callbacks */ - readCallback = __WBFS_ReadSDHC; - writeCallback = __WBFS_WriteSDHC; - - /* Device info */ - nb_sectors = 0; - sector_size = SDHC_SECTOR_SIZE; - } else - return -1; - break; - } - - return 0; -} - -s32 WBFS_Open(void) { - /* Close hard disk */ - if (hdd) - wbfs_close(hdd); - - /* Open hard disk */ - wbfs_part_fs = wbfs_part_idx = wbfs_part_lba = 0; - hdd = wbfs_open_hd(readCallback, writeCallback, NULL, sector_size, nb_sectors, 0); - if (!hdd) - return -1; - - // Save the new sector size, so it will be used in read and write calls - sector_size = 1 << hdd->head->hd_sec_sz_s; - - wbfs_part_idx = 1; - return 0; -} - -s32 WBFS_OpenPart(u32 part_fs, u32 part_idx, u32 part_lba, u32 part_size, char *partition) -{ - // close - WBFS_Close(); - - if (part_fs == PART_FS_FAT) { - if (wbfsDev == WBFS_DEVICE_USB && part_lba == fat_usb_sec) { - strcpy(wbfs_fs_drive, "USB:"); - } else if (wbfsDev == WBFS_DEVICE_SDHC && part_lba == fat_sd_sec) { - strcpy(wbfs_fs_drive, "SD:"); - } else { - if (WBFSDevice_Init(part_lba)) return -1; - strcpy(wbfs_fs_drive, "WBFS:"); - } - } else if (part_fs == PART_FS_NTFS) { - int ret = MountNTFS(part_lba); - if (ret) return ret; - strcpy(wbfs_fs_drive, "NTFS:"); - } else { - if (WBFS_OpenLBA(part_lba, part_size)) return -3; - } - - // success - wbfs_part_fs = part_fs; - wbfs_part_idx = part_idx; - wbfs_part_lba = part_lba; - - char *fs = "WBFS"; - if (wbfs_part_fs == PART_FS_FAT) fs = "FAT"; - if (wbfs_part_fs == PART_FS_NTFS) fs = "NTFS"; - sprintf(partition, "%s%d", fs, wbfs_part_idx); - return 0; -} - -s32 WBFS_OpenNamed(char *partition) -{ - int i; - u32 part_fs = PART_FS_WBFS; - u32 part_idx = 0; - u32 part_lba = 0; - s32 ret = 0; - PartList plist; - - // close - WBFS_Close(); - - // parse partition option - if (strncasecmp(partition, "WBFS", 4) == 0) { - i = atoi(partition+4); - if (i < 1 || i > 4) goto err; - part_fs = PART_FS_WBFS; - part_idx = i; - } else if (strncasecmp(partition, "FAT", 3) == 0) { - if (wbfsDev != WBFS_DEVICE_USB) goto err; - i = atoi(partition+3); - if (i < 1 || i > 9) goto err; - part_fs = PART_FS_FAT; - part_idx = i; - } else if (strncasecmp(partition, "NTFS", 4) == 0) { - i = atoi(partition+4); - if (i < 1 || i > 9) goto err; - part_fs = PART_FS_NTFS; - part_idx = i; - } else { - goto err; - } - - // Get partition entries - ret = Partition_GetList(wbfsDev, &plist); - if (ret || plist.num == 0) return -1; - - if (part_fs == PART_FS_WBFS) { - if (part_idx > plist.wbfs_n) goto err; - for (i=0; i plist.fat_n) goto err; - for (i=0; i plist.ntfs_n) goto err; - for (i=0; i= plist.num) goto err; - // set partition lba sector - part_lba = plist.pentry[i].sector; - - if (WBFS_OpenPart(part_fs, part_idx, part_lba, plist.pentry[i].size, partition)) { - goto err; - } - // success - return 0; -err: - return -1; -} - -s32 WBFS_OpenLBA(u32 lba, u32 size) -{ - wbfs_t *part = NULL; - - /* Open partition */ - part = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 0); - if (!part) return -1; - - /* Close current hard disk */ - if (hdd) wbfs_close(hdd); - hdd = part; - - return 0; -} - -bool WBFS_Close(void) -{ - /* Close hard disk */ - if (hdd) { - wbfs_close(hdd); - hdd = NULL; - } - - WBFSDevice_deInit(); - wbfs_part_fs = 0; - wbfs_part_idx = 0; - wbfs_part_lba = 0; - wbfs_fs_drive[0] = '\0'; - - return 0; -} - -bool WBFS_Mounted() -{ - return (hdd != NULL); -} - -bool WBFS_Selected() -{ - if (wbfs_part_fs && wbfs_part_lba && *wbfs_fs_drive) return true; - return WBFS_Mounted(); -} - -s32 WBFS_Format(u32 lba, u32 size) { - wbfs_t *partition = NULL; - - /* Reset partition */ - partition = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 1); - if (!partition) - return -1; - - /* Free memory */ - wbfs_close(partition); - - return 0; -} - -s32 WBFS_GetCount(u32 *count) { - if (wbfs_part_fs) return WBFS_FAT_GetCount(count); - - /* No device open */ - if (!hdd) - return -1; - - /* Get list length */ - *count = wbfs_count_discs(hdd); - - return 0; -} - -s32 WBFS_GetHeaders(void *outbuf, u32 cnt, u32 len) { - if (wbfs_part_fs) return WBFS_FAT_GetHeaders(outbuf, cnt, len); - - u32 idx, size; - s32 ret; - - /* No device open */ - if (!hdd) - return -1; - - for (idx = 0; idx < cnt; idx++) { - u8 *ptr = ((u8 *)outbuf) + (idx * len); - - /* Get header */ - ret = wbfs_get_disc_info(hdd, idx, ptr, len, &size); - if (ret < 0) - return ret; - } - - return 0; -} - -s32 WBFS_CheckGame(u8 *discid) { - wbfs_disc_t *disc = NULL; - - /* Try to open game disc */ - disc = WBFS_OpenDisc(discid); - if (disc) { - /* Close disc */ - WBFS_CloseDisc(disc); - - return 1; - } - - return 0; -} - -s32 WBFS_AddGame(void) { - if (wbfs_part_fs) return WBFS_FAT_AddGame(); - - s32 ret; - - /* No device open */ - if (!hdd) - return -1; - - /* Add game to device */ - partition_selector_t part_sel; - int copy_1_1 = 0; - - if (Settings.fullcopy) { - part_sel = ALL_PARTITIONS; - copy_1_1 = 1; - } else { - part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS; - } - - ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, WBFS_Spinner, part_sel, copy_1_1); - if (ret < 0) - return ret; - - return 0; -} - -s32 WBFS_RemoveGame(u8 *discid) { - if (wbfs_part_fs) return WBFS_FAT_RemoveGame(discid); - - s32 ret; - - /* No device open */ - if (!hdd) - return -1; - - /* Remove game from USB device */ - ret = wbfs_rm_disc(hdd, discid); - if (ret < 0) - return ret; - - return 0; -} - -s32 WBFS_GameSize(u8 *discid, f32 *size) { - wbfs_disc_t *disc = NULL; - - u32 sectors; - - /* Open disc */ - disc = WBFS_OpenDisc(discid); - if (!disc) - return -2; - - /* Get game size in sectors */ - sectors = wbfs_sector_used(disc->p, disc->header); - - /* Copy value */ - *size = (disc->p->wbfs_sec_sz / GB_SIZE) * sectors; - - /* Close disc */ - WBFS_CloseDisc(disc); - - return 0; -} - -s32 WBFS_DiskSpace(f32 *used, f32 *free) { - if (wbfs_part_fs) return WBFS_FAT_DiskSpace(used, free); - - f32 ssize; - u32 cnt; - - /* No device open */ - if (!hdd) - return -1; - - /* Count used blocks */ - cnt = wbfs_count_usedblocks(hdd); - - /* Sector size in GB */ - ssize = hdd->wbfs_sec_sz / GB_SIZE; - - /* Copy values */ - *free = ssize * cnt; - *used = ssize * (hdd->n_wbfs_sec - cnt); - - return 0; -} - -s32 WBFS_RenameGame(u8 *discid, const void *newname) -{ - if (wbfs_part_fs) - { - return WBFS_FAT_RenameGame(discid, newname); - } - - s32 ret; - - /* No USB device open */ - if (!hdd) - return -1; - ret = wbfs_ren_disc(hdd, discid,(u8*)newname); - if (ret < 0) - return ret; - - return 0; -} - -s32 WBFS_ReIDGame(u8 *discid, const void *newID) -{ - if (wbfs_part_fs) - { - return WBFS_FAT_ReIDGame(discid, newID); - } - - s32 ret; - - /* No USB device open */ - if (!hdd) - return -1; - ret = wbfs_rID_disc(hdd, discid,(u8*)newID); - if (ret < 0) - return ret; - - return 0; -} - -f32 WBFS_EstimeGameSize(void) { - if (wbfs_part_fs) { - return WBFS_FAT_EstimateGameSize(); - } - - partition_selector_t part_sel = ONLY_GAME_PARTITION; - if (Settings.fullcopy) { - part_sel = ALL_PARTITIONS; - } else { - switch(Settings.partitions_to_install) - { - case install_game_only: - part_sel = ONLY_GAME_PARTITION; - break; - case install_all: - part_sel = ALL_PARTITIONS; - break; - case install_all_but_update: - part_sel = REMOVE_UPDATE_PARTITION; - break; - } - } - return wbfs_estimate_disc(hdd, __WBFS_ReadDVD, NULL, part_sel); -} diff --git a/source/usbloader/wbfs.cpp b/source/usbloader/wbfs.cpp new file mode 100644 index 00000000..926dbbd5 --- /dev/null +++ b/source/usbloader/wbfs.cpp @@ -0,0 +1,260 @@ +#include + +#include "wbfs.h" +#include "usbloader/wbfs/wbfs_base.h" +#include "usbloader/wbfs/wbfs_wbfs.h" +#include "usbloader/wbfs/wbfs_fat.h" +#include "usbloader/wbfs/wbfs_ntfs.h" + +#include "usbloader/partition_usbloader.h" +#include "usbloader/getentries.h" +#include "gecko.h" + +Wbfs *current = NULL; + +/* WBFS device */ +s32 wbfsDev = WBFS_MIN_DEVICE; + +// partition +char wbfs_fs_drive[16]; +int wbfs_part_fs = PART_FS_WBFS; +u32 wbfs_part_idx = 0; +u32 wbfs_part_lba = 0; + +wbfs_disc_t* WBFS_OpenDisc(u8 *discid) { + return current->OpenDisc(discid); +} + +void WBFS_CloseDisc(wbfs_disc_t *disc) { + current->CloseDisc(disc); +} + +void GetProgressValue(s32 * d, s32 * m) { + current->GetProgressValue(d, m); +} + +wbfs_t *GetHddInfo(void) { + return current->GetHddInfo(); +} + +s32 WBFS_Init(u32 device) { + return Wbfs::Init(device); +} + +s32 WBFS_Open(void) { + WBFS_Close(); + + current = new Wbfs_Wbfs(WBFS_DEVICE_USB, 0, 0); // Fix me! + + wbfs_part_fs = wbfs_part_idx = wbfs_part_lba = 0; + wbfs_part_idx = 1; + + return current->Open(); +} + +s32 WBFS_OpenPart(u32 part_fs, u32 part_idx, u32 part_lba, u32 part_size, char *partition) +{ + // close + WBFS_Close(); + + if (part_fs == PART_FS_FAT) { + current = new Wbfs_Fat(wbfsDev, part_lba, part_size); + strcpy(wbfs_fs_drive, "USB:"); + gprintf("Created WBFS_Fat instance at lba: %d of size %d\n", part_lba, part_size); + } else if (part_fs == PART_FS_NTFS) { + current = new Wbfs_Ntfs(wbfsDev, part_lba, part_size); + strcpy(wbfs_fs_drive, "NTFS:"); + gprintf("Created WBFS_Ntfs instance at lba: %d of size %d\n", part_lba, part_size); + } else { + current = new Wbfs_Wbfs(wbfsDev, part_lba, part_size); + gprintf("Created WBFS_Wbfs instance at lba: %d of size %d\n", part_lba, part_size); + } + if (current->Open()) + { + delete current; + current = NULL; + return -1; + } + + // success + wbfs_part_fs = part_fs; + wbfs_part_idx = part_idx; + wbfs_part_lba = part_lba; + + const char *fs = "WBFS"; + if (wbfs_part_fs == PART_FS_FAT) fs = "FAT"; + if (wbfs_part_fs == PART_FS_NTFS) fs = "NTFS"; + sprintf(partition, "%s%d", fs, wbfs_part_idx); + return 0; +} + +s32 WBFS_OpenNamed(char *partition) +{ + u32 i; + u32 part_fs = PART_FS_WBFS; + u32 part_idx = 0; + u32 part_lba = 0; + s32 ret = 0; + PartList plist; + + // close + WBFS_Close(); + + // parse partition option + if (strncasecmp(partition, "WBFS", 4) == 0) { + i = atoi(partition+4); + if (i < 1 || i > 4) goto err; + part_fs = PART_FS_WBFS; + part_idx = i; + } else if (strncasecmp(partition, "FAT", 3) == 0) { + if (wbfsDev != WBFS_DEVICE_USB) goto err; + i = atoi(partition+3); + if (i < 1 || i > 9) goto err; + part_fs = PART_FS_FAT; + part_idx = i; + } else if (strncasecmp(partition, "NTFS", 4) == 0) { + i = atoi(partition+4); + if (i < 1 || i > 9) goto err; + part_fs = PART_FS_NTFS; + part_idx = i; + } else { + goto err; + } + + // Get partition entries + ret = Partition_GetList(wbfsDev, &plist); + if (ret || plist.num == 0) return -1; + + if (part_fs == PART_FS_WBFS) { + if (part_idx > plist.wbfs_n) goto err; + for (i=0; i plist.fat_n) goto err; + for (i=0; i plist.ntfs_n) goto err; + for (i=0; i= plist.num) goto err; + // set partition lba sector + part_lba = plist.pentry[i].sector; + + if (WBFS_OpenPart(part_fs, part_idx, part_lba, plist.pentry[i].size, partition)) { + goto err; + } + // success + return 0; +err: + return -1; +} + +s32 WBFS_OpenLBA(u32 lba, u32 size) +{ + Wbfs *part = new Wbfs_Wbfs(wbfsDev, lba, size); + if (part->Open() != 0) + { + delete part; + return -1; + } + + WBFS_Close(); + current = part; + return 0; +} + +bool WBFS_Close(void) +{ + if (current != NULL) { + current->Close(); + delete current; + current = NULL; + } + + wbfs_part_fs = 0; + wbfs_part_idx = 0; + wbfs_part_lba = 0; + wbfs_fs_drive[0] = '\0'; + + ResetGamelist(); + + return 0; +} + +bool WBFS_Mounted() +{ + return (current != NULL && current->Mounted()); +} + +s32 WBFS_Format(u32 lba, u32 size) { + return current->Format(); +} + +s32 WBFS_GetCount(u32 *count) { + return current->GetCount(count); +} + +s32 WBFS_GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) { + return current->GetHeaders(outbuf, cnt, len); +} + +s32 WBFS_CheckGame(u8 *discid) { + return current->CheckGame(discid); +} + +s32 WBFS_AddGame(void) { + s32 retval = current->AddGame(); + if (retval == 0) { + ResetGamelist(); + } + return retval; +} + +s32 WBFS_RemoveGame(u8 *discid) { + s32 retval = current->RemoveGame(discid); + if (retval == 0) { + ResetGamelist(); + } + return retval; +} + +s32 WBFS_GameSize(u8 *discid, f32 *size) { + return current->GameSize(discid, size); +} + +s32 WBFS_DiskSpace(f32 *used, f32 *free) { + return current->DiskSpace(used, free); +} + +s32 WBFS_RenameGame(u8 *discid, const void *newname) { + s32 retval = current->RenameGame(discid, newname); + if (retval == 0) { + ResetGamelist(); + } + return retval; +} + +s32 WBFS_ReIDGame(u8 *discid, const void *newID) { + s32 retval = current->ReIDGame(discid, newID); + if (retval == 0) { + ResetGamelist(); + } + return retval; +} + +f32 WBFS_EstimeGameSize(void) { + return current->EstimateGameSize(); +} + +int WBFS_GetFragList(u8 *id) { + return current->GetFragList(id); +} + +bool WBFS_ShowFreeSpace(void) { + return current->ShowFreeSpace(); +} diff --git a/source/usbloader/wbfs.h b/source/usbloader/wbfs.h index 6b873b04..8bbee634 100644 --- a/source/usbloader/wbfs.h +++ b/source/usbloader/wbfs.h @@ -1,25 +1,21 @@ #ifndef _WBFS_H_ #define _WBFS_H_ +#include "libwbfs/libwbfs.h" +#include "usbloader/disc.h" + #ifdef __cplusplus extern "C" { #endif -#include "libwbfs/libwbfs.h" - /* Device list */ - enum { - WBFS_DEVICE_USB = 1, /* USB device */ - WBFS_DEVICE_SDHC /* SDHC device */ - }; - - /* Macros */ - #define WBFS_MIN_DEVICE 1 - #define WBFS_MAX_DEVICE 2 - #define PART_FS_WBFS 0 #define PART_FS_FAT 1 #define PART_FS_NTFS 2 + /* Macros */ + #define WBFS_MIN_DEVICE 1 + #define WBFS_MAX_DEVICE 2 + extern s32 wbfsDev; extern int wbfs_part_fs; extern u32 wbfs_part_idx; @@ -32,20 +28,24 @@ extern "C" { s32 WBFS_Open(void); s32 WBFS_Format(u32, u32); s32 WBFS_GetCount(u32 *); - s32 WBFS_GetHeaders(void *, u32, u32); - s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); + s32 WBFS_GetHeaders(struct discHdr *, u32, u32); +// s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); wbfs_t *GetHddInfo(void); s32 WBFS_CheckGame(u8 *); s32 WBFS_AddGame(void); s32 WBFS_RemoveGame(u8 *); s32 WBFS_GameSize(u8 *, f32 *); + bool WBFS_ShowFreeSpace(void); s32 WBFS_DiskSpace(f32 *, f32 *); s32 WBFS_RenameGame(u8 *, const void *); s32 WBFS_ReIDGame(u8 *discid, const void *newID); f32 WBFS_EstimeGameSize(void); - + + int WBFS_GetFragList(u8 *id); +/* s32 __WBFS_ReadUSB(void *fp, u32 lba, u32 count, void *iobuf); s32 __WBFS_WriteUSB(void *fp, u32 lba, u32 count, void *iobuf); +*/ s32 WBFS_OpenPart(u32 part_fat, u32 part_idx, u32 part_lba, u32 part_size, char *partition); s32 WBFS_OpenNamed(char *partition); diff --git a/source/usbloader/wbfs/wbfs_base.cpp b/source/usbloader/wbfs/wbfs_base.cpp new file mode 100644 index 00000000..3da06130 --- /dev/null +++ b/source/usbloader/wbfs/wbfs_base.cpp @@ -0,0 +1,156 @@ +#include +#include +#include +#include +#include + +#include "usbloader/sdhc.h" +#include "usbloader/usbstorage.h" +#include "fatmounter.h" + +#include "wbfs_base.h" + +rw_sector_callback_t Wbfs::readCallback = NULL; +rw_sector_callback_t Wbfs::writeCallback = NULL; +s32 Wbfs::done = -1; +s32 Wbfs::total = -1; +u32 Wbfs::nb_sectors; +u32 Wbfs::sector_size; + +Wbfs::Wbfs(u32 device, u32 lba, u32 size) : hdd(NULL) +{ + this->device = device; + this->lba = lba; + this->size = size; +} + +void Wbfs::GetProgressValue(s32 * d, s32 * m) { + *d = done; + *m = total; +} + +s32 Wbfs::Init(u32 device) +{ + s32 ret; + + switch (device) { + case WBFS_DEVICE_USB: + /* Initialize USB storage */ + ret = USBStorage_Init(); + if (ret >= 0) { + /* Setup callbacks */ + readCallback = __ReadUSB; + writeCallback = __WriteUSB; + /* Device info */ + /* Get USB capacity */ + nb_sectors = USBStorage_GetCapacity(§or_size); + if (!nb_sectors) + return -1; + } else + return ret; + break; + case WBFS_DEVICE_SDHC: + /* Initialize SDHC */ + ret = SDHC_Init(); + + if (ret) { + /* Setup callbacks */ + readCallback = __ReadSDHC; + writeCallback = __WriteSDHC; + + /* Device info */ + nb_sectors = 0; + sector_size = SDHC_SECTOR_SIZE; + } else + return -1; + break; + } + + return 0; +} + +void Wbfs::Close() +{ + if (hdd) { + wbfs_close(hdd); + hdd = NULL; + } + + WBFSDevice_deInit(); +} + +// Default behavior: can't format +s32 Wbfs::Format() +{ + return -1; +} + +s32 Wbfs::CheckGame(u8 *discid) +{ + wbfs_disc_t *disc = NULL; + + /* Try to open game disc */ + disc = OpenDisc(discid); + if (disc) { + /* Close disc */ + CloseDisc(disc); + + return 1; + } + + return 0; +} + +s32 Wbfs::GameSize(u8 *discid, f32 *size) +{ + wbfs_disc_t *disc = NULL; + + u32 sectors; + + /* Open disc */ + disc = OpenDisc(discid); + if (!disc) + return -2; + + /* Get game size in sectors */ + sectors = wbfs_sector_used(disc->p, disc->header); + + /* Copy value */ + *size = (disc->p->wbfs_sec_sz / GB_SIZE) * sectors; + + /* Close disc */ + CloseDisc(disc); + + return 0; +} + +void Wbfs::Spinner(s32 x, s32 max) +{ + done = x; + total = max; +} + +wbfs_t *Wbfs::GetHddInfo() +{ + return hdd; +} + +bool Wbfs::Mounted() +{ + return hdd == NULL; +} + +int Wbfs::GetFragList(u8 *id) +{ + return 0; +} + +int Wbfs::GetFragList(char *filename, _frag_append_t append_fragment, FragList *) +{ + return 0; +} + +bool Wbfs::ShowFreeSpace(void) +{ + return true; +} diff --git a/source/usbloader/wbfs/wbfs_base.h b/source/usbloader/wbfs/wbfs_base.h new file mode 100644 index 00000000..78299f5a --- /dev/null +++ b/source/usbloader/wbfs/wbfs_base.h @@ -0,0 +1,64 @@ +#ifndef _H +#define _H + +#include "libwbfs/libwbfs.h" +#include "usbloader/utils.h" +#include "usbloader/frag.h" + +class Wbfs +{ +public: + Wbfs(u32, u32, u32); + + void GetProgressValue(s32 * d, s32 * m); + static s32 Init(u32); + void Close(); + s32 CheckGame(u8 *); + s32 GameSize(u8 *, f32 *); + wbfs_t *GetHddInfo(void); + bool Mounted(); + virtual int GetFragList(u8 *id); + virtual int GetFragList(char *filename, _frag_append_t append_fragment, FragList *); + virtual bool ShowFreeSpace(void); + + virtual s32 Open() = 0; + virtual wbfs_disc_t* OpenDisc(u8 *discid) = 0; + virtual void CloseDisc(wbfs_disc_t *disc) = 0; + virtual s32 Format(); + virtual s32 GetCount(u32 *) = 0; + virtual s32 GetHeaders(struct discHdr *, u32, u32) = 0; + virtual s32 AddGame(void) = 0; + virtual s32 RemoveGame(u8 *) = 0; + virtual s32 DiskSpace(f32 *, f32 *) = 0; + virtual s32 RenameGame(u8 *, const void *) = 0; + virtual s32 ReIDGame(u8 *discid, const void *newID) = 0; + virtual f32 EstimateGameSize(void) = 0; + +/* + static s32 OpenPart(u32 part_fat, u32 part_idx, u32 part_lba, u32 part_size, char *partition); + static s32 OpenNamed(char *partition); + static s32 OpenLBA(u32 lba, u32 size); +*/ +protected: + static rw_sector_callback_t readCallback; + static rw_sector_callback_t writeCallback; + static s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); + static void Spinner(s32 x, s32 max); + + static u32 nb_sectors; + static u32 sector_size; + + /* WBFS HDD */ + wbfs_t *hdd; + + u32 device, lba, size; +private: + static s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf); + static s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf); + static s32 __ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf); + static s32 __WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf); + + static s32 total, done; +}; + +#endif //_H diff --git a/source/usbloader/wbfs/wbfs_fat.cpp b/source/usbloader/wbfs/wbfs_fat.cpp new file mode 100644 index 00000000..087bb567 --- /dev/null +++ b/source/usbloader/wbfs/wbfs_fat.cpp @@ -0,0 +1,812 @@ +// WBFS FAT by oggzee + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "settings/cfg.h" +#include "usbloader/disc.h" +#include "fatmounter.h" +#include "wbfs_fat.h" + +#include "gecko.h" + +#define MAX_FAT_PATH 1024 +#define TITLE_LEN 64 + +using namespace std; + +char Wbfs_Fat::wbfs_fs_drive[16]; +char Wbfs_Fat::wbfs_fat_dir[16] = "/wbfs"; +char Wbfs_Fat::invalid_path[] = "/\\:|<>?*\"'"; +struct discHdr *Wbfs_Fat::fat_hdr_list = NULL; +u32 Wbfs_Fat::fat_hdr_count = 0; + +extern "C" +{ + int _FAT_get_fragments (const char *path, _frag_append_t append_fragment, void *callback_data); + extern FragList *frag_list; +} + +u32 Wbfs_Fat::fat_sector_size = 512; + +Wbfs_Fat::Wbfs_Fat(u32 device, u32 lba, u32 size) : Wbfs(device, lba, size) +{ +} + +s32 Wbfs_Fat::Open() +{ + if (device == WBFS_DEVICE_USB && lba == fat_usb_sec) { + strcpy(wbfs_fs_drive, "USB:"); + } else if (device == WBFS_DEVICE_SDHC && lba == fat_sd_sec) { + strcpy(wbfs_fs_drive, "SD:"); + } else { + if (WBFSDevice_Init(lba)) return -1; + strcpy(wbfs_fs_drive, "WBFS:"); + } + + return 0; +} + +wbfs_disc_t* Wbfs_Fat::OpenDisc(u8 *discid) +{ + char fname[MAX_FAT_PATH]; + + // wbfs 'partition' file + if (!FindFilename(discid, fname, sizeof(fname)) ) return NULL; + + if (strcasecmp(strrchr(fname,'.'), ".iso") == 0) { + // .iso file + // create a fake wbfs_disc + int fd; + fd = open(fname, O_RDONLY); + if (fd == -1) return NULL; + wbfs_disc_t *iso_file = (wbfs_disc_t *)calloc(sizeof(wbfs_disc_t),1); + if (iso_file == NULL) return NULL; + // mark with a special wbfs_part + wbfs_iso_file.wbfs_sec_sz = 512; + iso_file->p = &wbfs_iso_file; + iso_file->header = (wbfs_disc_info_t*)fd; + return iso_file; + } + + wbfs_t *part = OpenPart(fname); + if (!part) return NULL; + return wbfs_open_disc(part, discid); +} + +void Wbfs_Fat::CloseDisc(wbfs_disc_t* disc) +{ + if (!disc) return; + wbfs_t *part = disc->p; + + // is this really a .iso file? + if (part == &wbfs_iso_file) { + close((int)disc->header); + free(disc); + return; + } + + wbfs_close_disc(disc); + ClosePart(part); + return; +} + +s32 Wbfs_Fat::GetCount(u32 *count) +{ + *count = 0; + GetHeadersCount(); + if (fat_hdr_count && fat_hdr_list) { + // for compacter mem - move up as it will be freed later + int size = fat_hdr_count * sizeof(struct discHdr); + struct discHdr *buf = (struct discHdr *) malloc(size); + if (buf) { + memcpy(buf, fat_hdr_list, size); + SAFE_FREE(fat_hdr_list); + fat_hdr_list = buf; + } + } + *count = fat_hdr_count; + return 0; +} + +s32 Wbfs_Fat::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) +{ + u32 i; + if (len > sizeof(struct discHdr)) { + len = sizeof(struct discHdr); + } + gprintf("GetHeaders\n"); + for (i=0; iwii_sec_sz; + + partition_selector_t part_sel; + if (Settings.fullcopy) { + part_sel = ALL_PARTITIONS; + } else { + part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS; + } + return wbfs_estimate_disc(part, __ReadDVD, NULL, part_sel); +} + +// TITLE [GAMEID] +bool Wbfs_Fat::CheckLayoutB(char *fname, int len, u8* id, char *fname_title) +{ + if (len <= 8) return false; + if (fname[len-8] != '[' || fname[len-1] != ']') return false; + if (!is_gameid(&fname[len-7])) return false; + strncpy(fname_title, fname, TITLE_LEN); + // cut at '[' + fname_title[len-8] = 0; + int n = strlen(fname_title); + if (n == 0) return false; + // cut trailing _ or ' ' + if (fname_title[n - 1] == ' ' || fname_title[n - 1] == '_' ) { + fname_title[n - 1] = 0; + } + if (strlen(fname_title) == 0) return false; + if (id) { + memcpy(id, &fname[len-7], 6); + id[6] = 0; + } + return true; +} + +s32 Wbfs_Fat::GetHeadersCount() +{ + char path[MAX_FAT_PATH]; + char fname[MAX_FAT_PATH]; + char fpath[MAX_FAT_PATH]; + struct discHdr tmpHdr; + struct stat st; + wbfs_t *part = NULL; + u8 id[8]; + int ret; + char *p; + u32 size; + int is_dir; + int len; + char dir_title[65]; + char fname_title[TITLE_LEN]; + char *title; + DIR_ITER *dir_iter; + + //dbg_time1(); + + SAFE_FREE(fat_hdr_list); + fat_hdr_count = 0; + + strcpy(path, wbfs_fs_drive); + strcat(path, wbfs_fat_dir); + + dir_iter = diropen(path); + if (!dir_iter) return 0; + + dir_iter = diropen(path); + if (!dir_iter) return 0; + + while (dirnext(dir_iter, fname, &st) == 0) { + //printf("found: %s\n", fname); Wpad_WaitButtonsCommon(); + if ((char)fname[0] == '.') continue; + len = strlen(fname); + if (len < 8) continue; // "GAMEID_x" + + memcpy(id, fname, 6); + id[6] = 0; + *fname_title = 0; + + is_dir = S_ISDIR(st.st_mode); + //printf("mode: %d %d %x\n", is_dir, st.st_mode, st.st_mode); + if (is_dir) { + int lay_a = 0; + int lay_b = 0; + if (fname[6] == '_' && is_gameid((char*)id)) { + // usb:/wbfs/GAMEID_TITLE/GAMEID.wbfs + lay_a = 1; + } + if (CheckLayoutB(fname, len, NULL, fname_title)) { + // usb:/wbfs/TITLE[GAMEID]/GAMEID.wbfs + lay_b = 1; + } + if (!lay_a && !lay_b) continue; + if (lay_a) { + strncpy(dir_title, &fname[7], sizeof(dir_title)); + } else { + try_lay_b: + if (!CheckLayoutB(fname, len, id, fname_title)) continue; + } + snprintf(fpath, sizeof(fpath), "%s/%s/%s.wbfs", path, fname, id); + //printf("path2: %s\n", fpath); + // if more than 50 games, skip second stat to improve speed + // but if ambiguous layout check anyway + if (fat_hdr_count < 50 || (lay_a && lay_b)) { + if (stat(fpath, &st) == -1) { + //printf("missing: %s\n", fpath); + // try .iso + strcpy(strrchr(fpath, '.'), ".iso"); // replace .wbfs with .iso + if (stat(fpath, &st) == -1) { + //printf("missing: %s\n", fpath); + if (lay_a && lay_b == 1) { + // mark lay_b so that the stat check is still done, + // but lay_b is not re-tried again + lay_b = 2; + // retry with layout b + goto try_lay_b; + } + continue; + } + } + } else { + st.st_size = 1024*1024; + } + } else { + // usb:/wbfs/GAMEID.wbfs + // or usb:/wbfs/GAMEID.iso + p = strrchr(fname, '.'); + if (!p) continue; + if ( (strcasecmp(p, ".wbfs") != 0) + && (strcasecmp(p, ".iso") != 0) ) continue; + int n = p - fname; // length withouth .wbfs + if (n != 6) { + // TITLE [GAMEID].wbfs + if (!CheckLayoutB(fname, n, id, fname_title)) continue; + } + snprintf(fpath, sizeof(fpath), "%s/%s", path, fname); + } + + //printf("found: %s %d MB\n", fpath, (int)(st.st_size/1024/1024)); + // size must be at least 1MB to be considered a valid wbfs file + if (st.st_size < 1024*1024) continue; + // if we have titles.txt entry use that + title = cfg_get_title(id); + // if no titles.txt get title from dir or file name + if (!title && *fname_title) { + title = fname_title; + } + if (title) { + memset(&tmpHdr, 0, sizeof(tmpHdr)); + memcpy(tmpHdr.id, id, 6); + strncpy(tmpHdr.title, title, sizeof(tmpHdr.title)-1); + tmpHdr.magic = 0x5D1C9EA3; + goto add_hdr; + } + + // else read it from file directly + if (strcasecmp(strrchr(fpath,'.'), ".wbfs") == 0) { + // wbfs file directly + FILE *fp = fopen(fpath, "rb"); + if (fp != NULL) { + fseek(fp, 512, SEEK_SET); + fread(&tmpHdr, sizeof(struct discHdr), 1, fp); + fclose(fp); + if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { + goto add_hdr; + } + } + // no title found, read it from wbfs file + // but this is a little bit slower + // open 'partition' file + part = OpenPart(fpath); + if (!part) { + continue; + } + // Get header + ret = wbfs_get_disc_info(part, 0, (u8*)&tmpHdr, + sizeof(struct discHdr), &size); + ClosePart(part); + if (ret == 0) { + goto add_hdr; + } + } else if (strcasecmp(strrchr(fpath,'.'), ".iso") == 0) { + // iso file + FILE *fp = fopen(fpath, "rb"); + if (fp != NULL) { + fseek(fp, 0, SEEK_SET); + fread(&tmpHdr, sizeof(struct discHdr), 1, fp); + fclose(fp); + if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { + goto add_hdr; + } + } + } + // fail: + continue; + + // succes: add tmpHdr to list: + add_hdr: + memset(&st, 0, sizeof(st)); + //printf("added: %.6s %.20s\n", tmpHdr.id, tmpHdr.title); Wpad_WaitButtons(); + fat_hdr_count++; + fat_hdr_list = (struct discHdr *) realloc(fat_hdr_list, fat_hdr_count * sizeof(struct discHdr)); + memcpy(&fat_hdr_list[fat_hdr_count-1], &tmpHdr, sizeof(struct discHdr)); + } + dirclose(dir_iter); + //dbg_time2("\nFAT_GetCount"); Wpad_WaitButtonsCommon(); + + return 0; +} + +int Wbfs_Fat::FindFilename(u8 *id, char *fname, int len) +{ + struct stat st; + // look for direct .wbfs file + Filename(id, fname, len, NULL); + if (stat(fname, &st) == 0) return 1; + // look for direct .iso file + strcpy(strrchr(fname, '.'), ".iso"); // replace .wbfs with .iso + if (stat(fname, &st) == 0) return 1; + // direct file not found, check subdirs + *fname = 0; + DIR_ITER *dir_iter; + char path[MAX_FAT_PATH]; + char name[MAX_FAT_PATH]; + strcpy(path, wbfs_fs_drive); + strcat(path, wbfs_fat_dir); + dir_iter = diropen(path); + //printf("dir: %s %p\n", path, dir); Wpad_WaitButtons(); + if (!dir_iter) { + return 0; + } + while (dirnext(dir_iter, name, &st) == 0) { + //dbg_printf("name:%s\n", name); + if (name[0] == '.') continue; + int n = strlen(name); + if (n < 8) continue; + if (S_ISDIR(st.st_mode)) { + if (name[6] == '_') { + // GAMEID_TITLE + if (strncmp(name, (char*)id, 6) != 0) goto try_alter; + } else { + try_alter: + // TITLE [GAMEID] + if (name[n-8] != '[' || name[n-1] != ']') continue; + if (strncmp(&name[n-7], (char*)id, 6) != 0) continue; + } + // look for .wbfs file + snprintf(fname, len, "%s/%s/%.6s.wbfs", path, name, id); + if (stat(fname, &st) == 0) break; + // look for .iso file + snprintf(fname, len, "%s/%s/%.6s.iso", path, name, id); + } else { + // TITLE [GAMEID].wbfs + char fn_title[TITLE_LEN]; + u8 fn_id[8]; + char *p = strrchr(name, '.'); + if (!p) continue; + if ( (strcasecmp(p, ".wbfs") != 0) + && (strcasecmp(p, ".iso") != 0) ) continue; + int n = p - name; // length withouth .wbfs + if (!CheckLayoutB(name, n, fn_id, fn_title)) continue; + if (strncmp((char*)fn_id, (char*)id, 6) != 0) continue; + snprintf(fname, len, "%s/%s", path, name); + } + if (stat(fname, &st) == 0) break; + *fname = 0; + } + dirclose(dir_iter); + if (*fname) { + // found + //printf("found:%s\n", fname); + return 2; + } + // not found + return 0; +} + +wbfs_t* Wbfs_Fat::OpenPart(char *fname) +{ + wbfs_t *part = NULL; + int ret; + + // wbfs 'partition' file + ret = split_open(&split, fname); + if (ret) return NULL; + part = wbfs_open_partition( + split_read_sector, + nop_rw_sector, //readonly //split_write_sector, + &split, fat_sector_size, split.total_sec, 0, 0); + if (!part) { + split_close(&split); + } + return part; +} + +void Wbfs_Fat::ClosePart(wbfs_t* part) +{ + if (!part) return; + split_info_t *s = (split_info_t*)part->callback_data; + wbfs_close(part); + if (s) split_close(s); +} + +void Wbfs_Fat::Filename(u8 *id, char *fname, int len, char *path) +{ + if (path == NULL) { + snprintf(fname, len, "%s%s/%.6s.wbfs", wbfs_fs_drive, wbfs_fat_dir, id); + } else { + snprintf(fname, len, "%s/%.6s.wbfs", path, id); + } +} + +void Wbfs_Fat::GetDir(struct discHdr *header, char *path) +{ + strcpy(path, wbfs_fs_drive); + strcat(path, wbfs_fat_dir); + if (Settings.FatInstallToDir) { + strcat(path, "/"); + int layout = 0; + if (Settings.FatInstallToDir == 2) layout = 1; + mk_gameid_title(header, path + strlen(path), 0, layout); + } +} + +wbfs_t* Wbfs_Fat::CreatePart(u8 *id, char *path) +{ + char fname[MAX_FAT_PATH]; + wbfs_t *part = NULL; + u64 size = (u64)143432*2*0x8000ULL; + u32 n_sector = size / 512; + int ret; + + //printf("CREATE PART %s %lld %d\n", id, size, n_sector); + snprintf(fname, sizeof(fname), "%s%s", wbfs_fs_drive, wbfs_fat_dir); + mkdir(fname, 0777); // base usb:/wbfs + mkdir(path, 0777); // game subdir + Filename(id, fname, sizeof(fname), path); + printf("Writing to %s\n", fname); + ret = split_create(&split, fname, OPT_split_size, size, true); + if (ret) return NULL; + + // force create first file + u32 scnt = 0; + int fd = split_get_file(&split, 0, &scnt, 0); + if (fd<0) { + printf("ERROR creating file\n"); + sleep(2); + split_close(&split); + return NULL; + } + + part = wbfs_open_partition( + split_read_sector, + split_write_sector, + &split, fat_sector_size, n_sector, 0, 1); + if (!part) { + split_close(&split); + } + return part; +} + +void Wbfs_Fat::mk_title_txt(struct discHdr *header, char *path) +{ + char fname[MAX_FAT_PATH]; + FILE *f; + + strcpy(fname, path); + strcat(fname, "/"); + mk_gameid_title(header, fname+strlen(fname), 1, 0); + strcat(fname, ".txt"); + + f = fopen(fname, "wb"); + if (!f) return; + fprintf(f, "%.6s = %.64s\n", header->id, get_title(header)); + fclose(f); + printf("Info file: %s\n", fname); +} + +void Wbfs_Fat::mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout) +{ + int i, len; + char title[65]; + char id[8]; + + memcpy(name, header->id, 6); + name[6] = 0; + strncpy(title, get_title(header), sizeof(title)); + title_filename(title); + + if (layout == 0) { + sprintf(name, "%s_%s", id, title); + } else { + sprintf(name, "%s [%s]", title, id); + } + + // replace space with '_' + if (re_space) { + len = strlen(name); + for (i = 0; i < len; i++) { + if(name[i]==' ') name[i] = '_'; + } + } +} + +void Wbfs_Fat::title_filename(char *title) +{ + int i, len; + // trim leading space + len = strlen(title); + while (*title == ' ') { + memmove(title, title+1, len); + len--; + } + // trim trailing space - not allowed on windows directories + while (len && title[len-1] == ' ') { + title[len-1] = 0; + len--; + } + // replace silly chars with '_' + for (i=0; i 0) { + fname[strlen(fname)-1] = '0' + i; + if (stat(fname, &st) == -1) break; + } + strcpy(fname1, fname); + if ((ret = GetFragList((char *) &fname, &_frag_append, fs))) + { + ret_val = ret; + goto out; + } + frag_concat(fa, fs); + } + frag_list = (FragList *) malloc(sizeof(FragList)); + frag_init(frag_list, MAX_FRAG); + if (is_wbfs) { + // if wbfs file format, remap. + //printf("=====\n"); + wbfs_disc_t *d = OpenDisc(id); + if (!d) goto out; + frag_init(fw, MAX_FRAG); + ret = wbfs_get_fragments(d, &_frag_append, fw); + if (ret) goto out; + CloseDisc(d); + // DEBUG: frag_list->num = MAX_FRAG-10; // stress test + ret = frag_remap(frag_list, fw, fa); + if (ret) goto out; + } else { + // .iso does not need remap just copy + //printf("fa:\n"); + memcpy(frag_list, fa, sizeof(FragList)); + } + + ret_val = 0; + +out: + if (ret_val) { + // error + SAFE_FREE(frag_list); + } + SAFE_FREE(fs); + SAFE_FREE(fa); + SAFE_FREE(fw); + return ret_val; +} + +int Wbfs_Fat::GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs) +{ + return _FAT_get_fragments(filename, append_fragment, fs); +} + +bool Wbfs_Fat::ShowFreeSpace(void) +{ + return false; +} diff --git a/source/usbloader/wbfs/wbfs_fat.h b/source/usbloader/wbfs/wbfs_fat.h new file mode 100644 index 00000000..502c0e75 --- /dev/null +++ b/source/usbloader/wbfs/wbfs_fat.h @@ -0,0 +1,64 @@ +#ifndef _WBFS_FAT_H +#define _WBFS_FAT_H + +#include + +#include "usbloader/splits.h" +#include "wbfs_base.h" + +class Wbfs_Fat : public Wbfs +{ +public: + Wbfs_Fat(u32 device, u32 lba, u32 size); + ~Wbfs_Fat(); + + virtual s32 Open(); + wbfs_disc_t* OpenDisc(u8 *); + void CloseDisc(wbfs_disc_t *); + + s32 GetCount(u32 *); + s32 GetHeaders(struct discHdr *, u32, u32); + + s32 AddGame(); + s32 RemoveGame(u8 *); + + s32 DiskSpace(f32 *, f32 *); + + s32 RenameGame(u8 *, const void *); + s32 ReIDGame(u8 *, const void *); + + f32 EstimateGameSize(); + + int GetFragList(u8 *); + virtual int GetFragList(char *, _frag_append_t, FragList *); + virtual bool ShowFreeSpace(void); + +protected: + static char wbfs_fs_drive[16]; +private: + split_info_t split; + + static u32 fat_sector_size; + static char wbfs_fat_dir[16]; + static char invalid_path[]; + static struct discHdr *fat_hdr_list; + static u32 fat_hdr_count; + + wbfs_t* OpenPart(char *fname); + void ClosePart(wbfs_t* part); + wbfs_t* CreatePart(u8 *id, char *path); + int FindFilename(u8 *id, char *fname, int len); + void Filename(u8 *id, char *fname, int len, char *path); + bool CheckLayoutB(char *fname, int len, u8* id, char *fname_title); + s32 GetHeadersCount(); + void GetDir(struct discHdr *header, char *path); + + void mk_title_txt(struct discHdr *header, char *path); + void mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout); + void title_filename(char *title); + bool is_gameid(char *id); + + static int nop_rw_sector(void *_fp, u32 lba, u32 count, void* buf) { return 0; } +}; + +#endif //_WBFS_FAT_H \ No newline at end of file diff --git a/source/usbloader/wbfs/wbfs_ntfs.cpp b/source/usbloader/wbfs/wbfs_ntfs.cpp new file mode 100644 index 00000000..ecdc7175 --- /dev/null +++ b/source/usbloader/wbfs/wbfs_ntfs.cpp @@ -0,0 +1,28 @@ +#include "wbfs_ntfs.h" +#include "fatmounter.h" +#include "libntfs/ntfs.h" + +s32 Wbfs_Ntfs::Open() +{ + strcpy(wbfs_fs_drive, "NTFS:"); + return MountNTFS(lba); +} + +int Wbfs_Ntfs::GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs) +{ + int ret = _NTFS_get_fragments(filename, append_fragment, fs); + if (ret) { + return ret; + } + + // offset to start of partition + for (unsigned int j=0; jnum; j++) { + fs->frag[j].sector += fs_ntfs_sec; + } + return ret; +} + +bool Wbfs_Ntfs::ShowFreeSpace(void) +{ + return true; +} diff --git a/source/usbloader/wbfs/wbfs_ntfs.h b/source/usbloader/wbfs/wbfs_ntfs.h new file mode 100644 index 00000000..7a5ddb5e --- /dev/null +++ b/source/usbloader/wbfs/wbfs_ntfs.h @@ -0,0 +1,17 @@ +#ifndef _WBFS_NTFS_H +#define _WBFS_NTFS_H + +#include "wbfs_fat.h" + +class Wbfs_Ntfs : public Wbfs_Fat +{ +public: + Wbfs_Ntfs(u32 device, u32 lba, u32 size) : Wbfs_Fat(device, lba, size) {} + + virtual s32 Open(); + + int GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs); + bool ShowFreeSpace(void); +}; + +#endif //_WBFS_NTFS_H \ No newline at end of file diff --git a/source/usbloader/wbfs/wbfs_rw.cpp b/source/usbloader/wbfs/wbfs_rw.cpp new file mode 100644 index 00000000..0cdbc2e0 --- /dev/null +++ b/source/usbloader/wbfs/wbfs_rw.cpp @@ -0,0 +1,159 @@ +#include +#include + +#include "usbloader/sdhc.h" +#include "usbloader/usbstorage.h" +#include "usbloader/wdvd.h" +#include "wbfs_base.h" + +/* Constants */ +#define MAX_NB_SECTORS 32 + +s32 Wbfs::__ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) { + void *buffer = NULL; + + u64 offset; + u32 mod, size; + s32 ret; + + /* Calculate offset */ + offset = ((u64)lba) << 2; + + /* Calcualte sizes */ + mod = len % 32; + size = len - mod; + + /* Read aligned data */ + if (size) { + ret = WDVD_UnencryptedRead(iobuf, size, offset); + if (ret < 0) + goto out; + } + + /* Read non-aligned data */ + if (mod) { + /* Allocate memory */ + buffer = memalign(32, 0x20); + if (!buffer) + return -1; + + /* Read data */ + ret = WDVD_UnencryptedRead(buffer, 0x20, offset + size); + if (ret < 0) + goto out; + + /* Copy data */ + void *ptr = ((u8 *) iobuf) + size; + memcpy(ptr, buffer, mod); + } + + /* Success */ + ret = 0; + +out: + /* Free memory */ + if (buffer) + free(buffer); + + return ret; +} + +s32 Wbfs::__ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) { + u32 cnt = 0; + s32 ret; + + /* Do reads */ + while (cnt < count) { + void *ptr = ((u8 *)iobuf) + (cnt * sector_size); + u32 sectors = (count - cnt); + + /* Read sectors is too big */ + if (sectors > MAX_NB_SECTORS) + sectors = MAX_NB_SECTORS; + + /* USB read */ + ret = USBStorage_ReadSectors(lba + cnt, sectors, ptr); + if (ret < 0) + return ret; + + /* Increment counter */ + cnt += sectors; + } + + return 0; +} + +s32 Wbfs::__WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) { + u32 cnt = 0; + s32 ret; + + /* Do writes */ + while (cnt < count) { + void *ptr = ((u8 *)iobuf) + (cnt * sector_size); + u32 sectors = (count - cnt); + + /* Write sectors is too big */ + if (sectors > MAX_NB_SECTORS) + sectors = MAX_NB_SECTORS; + + /* USB write */ + ret = USBStorage_WriteSectors(lba + cnt, sectors, ptr); + if (ret < 0) + return ret; + + /* Increment counter */ + cnt += sectors; + } + + return 0; +} + +s32 Wbfs::__ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) { + u32 cnt = 0; + s32 ret; + + /* Do reads */ + while (cnt < count) { + void *ptr = ((u8 *)iobuf) + (cnt * sector_size); + u32 sectors = (count - cnt); + + /* Read sectors is too big */ + if (sectors > MAX_NB_SECTORS) + sectors = MAX_NB_SECTORS; + + /* SDHC read */ + ret = SDHC_ReadSectors(lba + cnt, sectors, ptr); + if (!ret) + return -1; + + /* Increment counter */ + cnt += sectors; + } + + return 0; +} + +s32 Wbfs::__WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) { + u32 cnt = 0; + s32 ret; + + /* Do writes */ + while (cnt < count) { + void *ptr = ((u8 *)iobuf) + (cnt * sector_size); + u32 sectors = (count - cnt); + + /* Write sectors is too big */ + if (sectors > MAX_NB_SECTORS) + sectors = MAX_NB_SECTORS; + + /* SDHC write */ + ret = SDHC_WriteSectors(lba + cnt, sectors, ptr); + if (!ret) + return -1; + + /* Increment counter */ + cnt += sectors; + } + + return 0; +} diff --git a/source/usbloader/wbfs/wbfs_wbfs.cpp b/source/usbloader/wbfs/wbfs_wbfs.cpp new file mode 100644 index 00000000..4fb92ccf --- /dev/null +++ b/source/usbloader/wbfs/wbfs_wbfs.cpp @@ -0,0 +1,204 @@ +#include "wbfs_wbfs.h" +#include "settings/cfg.h" + +extern u32 sector_size; + +s32 Wbfs_Wbfs::Open() +{ + wbfs_t *part = NULL; + + /* Open partition */ + part = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 0); + if (!part) return -1; + + /* Close current hard disk */ + Close(); + hdd = part; + + // Save the new sector size, so it will be used in read and write calls + sector_size = 1 << hdd->head->hd_sec_sz_s; + + return 0; +} + +wbfs_disc_t* Wbfs_Wbfs::OpenDisc(u8 *discid) +{ + /* No device open */ + if (!hdd) + return NULL; + + /* Open disc */ + return wbfs_open_disc(hdd, discid); +} + +void Wbfs_Wbfs::CloseDisc(wbfs_disc_t *disc) +{ + /* No device open */ + if (!hdd || !disc) + return; + + /* Close disc */ + wbfs_close_disc(disc); +} + +s32 Wbfs_Wbfs::Format() +{ + wbfs_t *partition = NULL; + + /* Reset partition */ + partition = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 1); + if (!partition) + return -1; + + /* Free memory */ + wbfs_close(partition); + + return 0; +} + +s32 Wbfs_Wbfs::GetCount(u32 *count) +{ + /* No device open */ + if (!hdd) + return -1; + + /* Get list length */ + *count = wbfs_count_discs(hdd); + + return 0; +} + +s32 Wbfs_Wbfs::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) +{ + u32 idx, size; + s32 ret; + + /* No device open */ + if (!hdd) + return -1; + + for (idx = 0; idx < cnt; idx++) { + u8 *ptr = ((u8 *)outbuf) + (idx * len); + + /* Get header */ + ret = wbfs_get_disc_info(hdd, idx, ptr, len, &size); + if (ret < 0) + return ret; + } + + return 0; +} + +s32 Wbfs_Wbfs::AddGame() +{ + s32 ret; + + /* No device open */ + if (!hdd) + return -1; + + /* Add game to device */ + partition_selector_t part_sel; + int copy_1_1 = 0; + + if (Settings.fullcopy) { + part_sel = ALL_PARTITIONS; + copy_1_1 = 1; + } else { + part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS; + } + + ret = wbfs_add_disc(hdd, __ReadDVD, NULL, Spinner, part_sel, copy_1_1); + if (ret < 0) + return ret; + + return 0; +} + +s32 Wbfs_Wbfs::RemoveGame(u8 *discid) +{ + s32 ret; + + /* No device open */ + if (!hdd) + return -1; + + /* Remove game from USB device */ + ret = wbfs_rm_disc(hdd, discid); + if (ret < 0) + return ret; + + return 0; +} + +s32 Wbfs_Wbfs::DiskSpace(f32 *used, f32 *free) +{ + f32 ssize; + u32 cnt; + + /* No device open */ + if (!hdd) + return -1; + + /* Count used blocks */ + cnt = wbfs_count_usedblocks(hdd); + + /* Sector size in GB */ + ssize = hdd->wbfs_sec_sz / GB_SIZE; + + /* Copy values */ + *free = ssize * cnt; + *used = ssize * (hdd->n_wbfs_sec - cnt); + + return 0; +} + +s32 Wbfs_Wbfs::RenameGame(u8 *discid, const void *newname) +{ + s32 ret; + + /* No USB device open */ + if (!hdd) + return -1; + ret = wbfs_ren_disc(hdd, discid,(u8*)newname); + if (ret < 0) + return ret; + + return 0; +} + +s32 Wbfs_Wbfs::ReIDGame(u8 *discid, const void *newID) +{ + s32 ret; + + /* No USB device open */ + if (!hdd) + return -1; + ret = wbfs_rID_disc(hdd, discid,(u8*)newID); + if (ret < 0) + return ret; + + return 0; +} + +f32 Wbfs_Wbfs::EstimateGameSize() +{ + partition_selector_t part_sel = ONLY_GAME_PARTITION; + if (Settings.fullcopy) { + part_sel = ALL_PARTITIONS; + } else { + switch(Settings.partitions_to_install) + { + case install_game_only: + part_sel = ONLY_GAME_PARTITION; + break; + case install_all: + part_sel = ALL_PARTITIONS; + break; + case install_all_but_update: + part_sel = REMOVE_UPDATE_PARTITION; + break; + } + } + return wbfs_estimate_disc(hdd, __ReadDVD, NULL, part_sel); +} \ No newline at end of file diff --git a/source/usbloader/wbfs/wbfs_wbfs.h b/source/usbloader/wbfs/wbfs_wbfs.h new file mode 100644 index 00000000..69a9739b --- /dev/null +++ b/source/usbloader/wbfs/wbfs_wbfs.h @@ -0,0 +1,31 @@ +#ifndef _WBFS_WBFS_H +#define _WBFS_WBFS_H + +#include "wbfs_base.h" +#include "libwbfs/libwbfs.h" + +class Wbfs_Wbfs : public Wbfs +{ +public: + Wbfs_Wbfs(u32 device, u32 lba, u32 size) : Wbfs(device, lba, size) {} + + s32 Open(); + wbfs_disc_t* OpenDisc(u8 *); + void CloseDisc(wbfs_disc_t *); + + s32 Format(); + s32 GetCount(u32 *); + s32 GetHeaders(struct discHdr *, u32, u32); + + s32 AddGame(); + s32 RemoveGame(u8 *); + + s32 DiskSpace(f32 *, f32 *); + + s32 RenameGame(u8 *, const void *); + s32 ReIDGame(u8 *, const void *); + + f32 EstimateGameSize(); +}; + +#endif //_WBFS_WBFS_H diff --git a/source/usbloader/wbfs_fat.h b/source/usbloader/wbfs_fat.h deleted file mode 100644 index 703afd42..00000000 --- a/source/usbloader/wbfs_fat.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _WBFS_FAT_H -#define _WBFS_FAT_H - -wbfs_t* WBFS_FAT_OpenPart(char *fname); -void WBFS_FAT_ClosePart(wbfs_t* part); -s32 WBFS_FAT_GetCount(u32 *count); -s32 WBFS_FAT_GetHeaders(void *outbuf, u32 cnt, u32 len); -wbfs_disc_t* WBFS_FAT_OpenDisc(u8 *discid); -void WBFS_FAT_CloseDisc(wbfs_disc_t* disc); -s32 WBFS_FAT_DiskSpace(f32 *used, f32 *free); -s32 WBFS_FAT_RemoveGame(u8 *discid); -s32 WBFS_FAT_AddGame(void); -s32 WBFS_FAT_DVD_Size(u64 *comp_size, u64 *real_size); -int WBFS_FAT_find_fname(u8 *id, char *fname, int len); -s32 WBFS_FAT_RenameGame(u8 *discid, const void *newname); -s32 WBFS_FAT_ReIDGame(u8 *discid, const void *newID); -s32 WBFS_FAT_EstimateGameSize(void); - -#endif