MX преди 2 години
родител
ревизия
565b2f09a8
променени са 63 файла, в които са добавени 1911 реда и са изтрити 955 реда
  1. 1 1
      ReadMe.md
  2. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/banner.png
  3. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/1.png
  4. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/2.png
  5. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/3.png
  6. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/4.png
  7. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/5.png
  8. BIN
      non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/6.png
  9. 95 20
      non_catalog_apps/gb-pokemon-trading/README.md
  10. 2 2
      non_catalog_apps/gb-pokemon-trading/application.fam
  11. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/EXT-Link.png
  12. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/GPIO-GBPIN-v2.png
  13. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/GPIO-GBPIN_light-v2.png
  14. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/back.png
  15. 0 9
      non_catalog_apps/gb-pokemon-trading/docs/images/back.svg
  16. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/cut-cable-v3.png
  17. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/dmg_link_port_pinout.png
  18. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-1.png
  19. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-2.png
  20. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-3.png
  21. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-4.png
  22. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-5.png
  23. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-6.png
  24. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-7.png
  25. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat.png
  26. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat.psd
  27. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-pcb.png
  28. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_pokemon_center.png
  29. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_save.png
  30. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_save_trade.png
  31. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_list.png
  32. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_list_select_trade.png
  33. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_list_select_trade_confirm.png
  34. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_room.png
  35. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_room_2.png
  36. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/gb_spi.png
  37. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/gblpof.gif
  38. 0 7
      non_catalog_apps/gb-pokemon-trading/docs/images/implemented.svg
  39. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/left.png
  40. 0 6
      non_catalog_apps/gb-pokemon-trading/docs/images/left.svg
  41. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/pcb.png
  42. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/qFlipper.png
  43. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/reboot.png
  44. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/wgbl-0.png
  45. 0 744
      non_catalog_apps/gb-pokemon-trading/docs/images/white_flat.svg
  46. BIN
      non_catalog_apps/gb-pokemon-trading/docs/images/youtube.png
  47. 250 151
      non_catalog_apps/gb-pokemon-trading/pokemon_app.cpp
  48. 46 0
      non_catalog_apps/gb-pokemon-trading/pokemon_app.h
  49. 13 14
      non_catalog_apps/gb-pokemon-trading/pokemon_data.h
  50. 170 0
      non_catalog_apps/gb-pokemon-trading/views/select_level.cpp
  51. 25 0
      non_catalog_apps/gb-pokemon-trading/views/select_level.hpp
  52. 172 0
      non_catalog_apps/gb-pokemon-trading/views/select_move1.cpp
  53. 25 0
      non_catalog_apps/gb-pokemon-trading/views/select_move1.hpp
  54. 173 0
      non_catalog_apps/gb-pokemon-trading/views/select_move2.cpp
  55. 25 0
      non_catalog_apps/gb-pokemon-trading/views/select_move2.hpp
  56. 174 0
      non_catalog_apps/gb-pokemon-trading/views/select_move3.cpp
  57. 25 0
      non_catalog_apps/gb-pokemon-trading/views/select_move3.hpp
  58. 174 0
      non_catalog_apps/gb-pokemon-trading/views/select_move4.cpp
  59. 25 0
      non_catalog_apps/gb-pokemon-trading/views/select_move4.hpp
  60. 2 1
      non_catalog_apps/gb-pokemon-trading/views/select_pokemon.cpp
  61. 195 0
      non_catalog_apps/gb-pokemon-trading/views/select_stats.cpp
  62. 25 0
      non_catalog_apps/gb-pokemon-trading/views/select_stats.hpp
  63. 294 0
      non_catalog_apps/gb-pokemon-trading/views/trade.cpp

+ 1 - 1
ReadMe.md

@@ -173,7 +173,7 @@ The Flipper and its community wouldn't be as rich as it is without your contribu
 | MH-Z19 - CO2 sensor | ![GPIO Badge] | [by meshchaninov](https://github.com/meshchaninov/flipper-zero-mh-z19) |  | [![Author Badge]](https://lab.flipper.net/apps/mh_z19) |
 | NRF24 Batch Read/Send (WIP) | ![GPIO Badge] | [by vad7](https://github.com/vad7/nRF24-Batch) |  | ![None Badge] |
 | NRF24 Scanner | ![GPIO Badge] | [by vad7](https://github.com/vad7/nrf24scan) |  | ![None Badge] |
-| Pokemon Trading (for GameBoy) | ![GPIO Badge] | [by EstebanFuentealba](https://github.com/EstebanFuentealba/Flipper-Zero-Game-Boy-Trading-Pokemons) |  | [![Author Badge]](https://lab.flipper.net/apps/pokemon) |
+| Pokemon Trading (for GameBoy) | ![GPIO Badge] | [by EstebanFuentealba](https://github.com/EstebanFuentealba/Flipper-Zero-Game-Boy-Trading-Pokemons) | Updates [by R4g3D](https://github.com/R4g3D/Flipper-Zero-Game-Boy-Pokemon-Trading) | [![Author Badge]](https://lab.flipper.net/apps/pokemon) |
 | Radiation Sensor | ![GPIO Badge] | [by sionyx](https://github.com/sionyx/flipper_radsens) | works with RadSens module | ![None Badge] |
 | RCWL-516 Motion Sensor | ![GPIO Badge] | [by ahmedafe1](https://github.com/ahmedafe1/rcwl_0516-Flipperzero) |  | ![None Badge] |
 | ServoTester | ![GPIO Badge] | [by spin7ion](https://github.com/spin7ion/flipper-servotester) |  | [![UFW Badge]](https://lab.flipper.net/apps/servotester) |

BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/banner.png


BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/1.png


BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/2.png


BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/3.png


BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/4.png


BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/5.png


BIN
non_catalog_apps/gb-pokemon-trading/.flipcorg/gallery/6.png


+ 95 - 20
non_catalog_apps/gb-pokemon-trading/README.md

@@ -16,9 +16,9 @@
 
 ## Introduction
 
-This is a Pokemon exchange application from Flipper Zero to Game Boy [(Generacn I)](https://bulbapedia.bulbagarden.net/wiki/Generation_I). Flipper Zero emulates a "Slave" Game Boy connected to a Game Link Cable to be able to exchange any Pokemon from the First Generation (Red, Blue, Yellow) to a real Game Boy.
+This is a Pokemon exchange application from Flipper Zero to Game Boy [(Generaction I)](https://bulbapedia.bulbagarden.net/wiki/Generation_I). Flipper Zero emulates a "Slave" Game Boy connected to a Game Link Cable to be able to exchange any Pokemon from the First Generation (Red, Blue, Yellow) to a real Game Boy.
 
-It is a Proof of Concept (POC) for using views, GPIO, and FURI (Flipper Universal Registry Implementation).
+It currently trades a Pokemon based on your choice of Pokemon, Level, Stats and 4 Moves.
 
 ## Installation Directions
 
@@ -49,7 +49,7 @@ And use [**qFlipper**](https://flipperzero.one/update) to copy the generated **p
 These instructions assume that you are starting at the Flipper Zero desktop. Otherwise, press the Back button until you are at the desktop.
 
 - Press the `OK` button on the Flipper to open the main menu.
-- Choose `Aplicaciones` from the menu.
+- Choose `Applications` from the menu.
 - Choose `Game Boy` from the submenu.
 - Choose `Pokemon Trading`
 - The Flipper Zero should show the selection of Pokemon that you want to trade, and by default, it appears as bulbasaur.
@@ -63,69 +63,145 @@ These instructions assume that you are starting at the Flipper Zero desktop. Oth
 - Press the `LEFT`/`RIGHT` buttons to paginate the selection of Pokemon by 1.
 - Press the `UP`/`DOWN` buttons to paginate the selection of Pokemon by 10.
 - Press the `OK` button to select the Pokemon to trade.
+
     <p align='center'>
          <br />
         <img src="./docs/images/flipper-zero-flat-2.png" width="400" /><br />
     </p>
+
+- The Flipper Zero should show the selection of the Pokemon's level that you want to trade, and by default, it appears as level 1.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-3.png" width="400" />
+        <br />
+    </p>
+
+- Press the `LEFT`/`RIGHT` buttons to paginate the selection of the Pokemon's level by 1.
+- Press the `UP`/`DOWN` buttons to paginate the selection of the Pokemon's level by 10.
+- Press the `OK` button to select the Pokemon's level to trade.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-4.png" width="400" />
+        <br />
+    </p>
+
+- The Flipper Zero should show the selection for the Pokemon's moves that you want to trade, this will happen 4 times with default bing no move.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-5.png" width="400" />
+        <br />
+    </p>
+
+- Press the `LEFT`/`RIGHT` buttons to paginate the selection of the Pokemon's current move selection by 1.
+- Press the `UP`/`DOWN` buttons to paginate the selection of the Pokemon's current move selection by 10.
+- Press the `OK` button to select the Pokemon's current move selection to trade.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-6.png" width="400" />
+        <br />
+    </p>
+
+- The Flipper Zero should show the selection for the Pokemon's stats that you want to trade, and by default, it appears as random IV and zero EV.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-7.png" width="400" />
+        <br />
+    </p>
+
+- Press the `RIGHT`/`UP` buttons to paginate the selection of the Pokemon's stats selection by 1 positively.
+- Press the `LEFT`/`DOWN` buttons to paginate the selection of the Pokemon's stats selection by 1 negatively.
+- Press the `OK` button to select the Pokemon's current move selection to trade.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-8.png" width="400" />
+        <br />
+    </p>
+
 - The Flipper Zero will display the view to connect the Game Boy.
+
     <p align='center'>
         <br />
-        <img src="./docs/images/flipper-zero-flat-3.png" width="400" /><br />
+        <img src="./docs/images/flipper-zero-flat-9.png" width="400" /><br />
     </p>
+
 - On your Game Boy, you should connect the  **Game Link Cable** to the Game Boy and in the game, go to the nearest  **Pokemon Center**.
+
     <p align='center'>
         <br />
         <img src="./docs/images/game_boy_pokemon_center.png" width="400" /><br />
     </p>
+
 - Talk to the girl at the counter on the right. The girl will tell us that we have to save the game before playing, we will answer **YES** by pressing the **A** button.
 
-.
     <p align='center'>
         <br />
         <img src="./docs/images/game_boy_save.png" width="400" /><br />
     </p>
+
 - The Flipper Zero will show that we are connected.
+
     <p align='center'>
         <br />
-        <img src="./docs/images/flipper-zero-flat-4.png" width="400" /><br />
+        <img src="./docs/images/flipper-zero-flat-10.png" width="400" /><br />
     </p>
+
 - On the Game Boy, we will be asked which option we want, and we select **TRADE CENTER**.
+
     <p align='center'>
         <br />
         <img src="./docs/images/game_boy_save_trade.png" width="400" /><br />
     </p>
+
 - You will enter the Trade Center where you must press the A button on the Game Boy on your side of the table.
+
     <p align='center'>
         <br />
         <img src="./docs/images/game_boy_trade_room_2.png" width="400" /><br />
     </p>
+
 - Flipper Zero will remain on a waiting screen with the Pokemon you selected.
+
     <p align='center'>
         <br />
-        <img src="./docs/images/flipper-zero-flat-5.png" width="400" /><br />
+        <img src="./docs/images/flipper-zero-flat-10.png" width="400" /><br />
     </p>
+
 - You will see your Pokemon and the Pokemon you selected on the Flipper Zero, in this case, `Mew`. You must select the Pokemon you want to trade and press **TRADE**.
+
     <p align='center'>
         <br />
         <img src="./docs/images/game_boy_trade_list_select_trade.png" width="400" /><br />
     </p>
+
 - You must confirm the selected trade by selecting **TRADE**.
+
     <p align='center'>
         <br />
         <img src="./docs/images/game_boy_trade_list_select_trade_confirm.png" width="400" /><br />
     </p>
+
 - Flipper Zero will remain on a waiting screen with the Pokemon you selected.
+
     <p align='center'>
         <br />
-        <img src="./docs/images/flipper-zero-flat-6.png" width="400" /><br />
+        <img src="./docs/images/flipper-zero-flat-11.png" width="400" /><br />
     </p>
+
 - Finally, the Pokemon exchange will start from **Flipper Zero** to the **Game Boy**.
+
     <p align='center'>
         <br />
-        <img src="./docs/images/flipper-zero-flat-7.png" width="400" /><br />
+        <img src="./docs/images/flipper-zero-flat-12.png" width="400" /><br />
     </p>
 
     If the Flipper Zero gets stuck at the end of the exchange, you must reboot it by pressing the <img src="./docs/images/left.png" /> LEFT + <img src="./docs/images/back.png" /> BACK key combination.
+
     <p align='center'>
         <br />
         <img src="./docs/images/reboot.png" width="400" /><br />
@@ -226,13 +302,18 @@ For each image, the color `#aaa` was transformed to `#fff` so that Flipper Zero
 - Game Boy Advance (GBA)
 
 ## Implemented by
-<a href="https://github.com/EstebanFuentealba/Flipper-Zero-Game-Boy-Pokemon-Trading/issues?q=is%3Aissue+label%3AImplemented+is%3Aclosed+is%3Aopen+" target="_blank"><img src="./docs/images/implemented.svg" /></a>
+<a href="https://github.com/EstebanFuentealba/Flipper-Zero-Game-Boy-Pokemon-Trading/">EstebanFuentealba</a><br />
+<a href="https://github.com/R4g3D/Flipper-Zero-Game-Boy-Pokemon-Trading/">R4g3D</a>
 
 ## TODO
-- [ ] Refactor the code
-- [x] The OK button stops working when exiting the app, so it needs to be restarted 🤔
-- [ ] Set each Pokemon's characteristics, attacks, and default levels
-- [ ] Improve animations
+- [x] Change the default traded Pokemon's naming to be no nickname
+- [x] Add view to allow the traded Pokemon's level to be chosen between 3 and 100
+- [x] Add view to allow the traded Pokemon's hidden stats to be chosen (IV and EV) from some options
+- [x] Add view to allow the traded Pokemon's moveset to be chosen (all 4 moves) allowing no move as an option
+- [ ] Debug traded Pokemon level issue where after a battle the Pokemon's level drops (doesn't affect all traded Pokemon)
+- [x] Add images for the level selection screen, stats selection screen, and move selection screens as per the original README
+- [ ] Optimise the level selection screen to be a number slider input instead of the current slideshow style selector
+- [ ] Add a view to allow for a custom Pokemon nickname (11 chars, 10 chars max used, fill and terminate with TERM_)
 
 ## Links
 
@@ -244,9 +325,3 @@ For each image, the color `#aaa` was transformed to `#fff` so that Flipper Zero
 - [Disassembly of Pokemon Yellow](https://github.com/pret/pokeyellow)
 - [Arduino-Spoofing-Gameboy-Pokemon-Trades](https://github.com/EstebanFuentealba/Arduino-Spoofing-Gameboy-Pokemon-Trades)
 - [🎮 Gameboy link cable breakout PCB](https://github.com/Palmr/gb-link-cable)
-
-<p align='center'>
-<br />
-<br />
-From Talcahuano 🇨🇱 with ❤ 
-</p>

+ 2 - 2
non_catalog_apps/gb-pokemon-trading/application.fam

@@ -5,10 +5,10 @@ App(
     entry_point="pokemon_app",
     requires=["gui"],
     stack_size=2 * 1024,
-    fap_version=[1, 2],
+    fap_version=[1,2],
     fap_category="GPIO",
     fap_icon="pokemon_10px.png",
     fap_icon_assets="assets",
     fap_author="Esteban Fuentealba",
-    fap_weburl="https://github.com/EstebanFuentealba",
+    fap_weburl="https://github.com/EstebanFuentealba"
 )

BIN
non_catalog_apps/gb-pokemon-trading/docs/images/EXT-Link.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/GPIO-GBPIN-v2.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/GPIO-GBPIN_light-v2.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/back.png


+ 0 - 9
non_catalog_apps/gb-pokemon-trading/docs/images/back.svg

@@ -1,9 +0,0 @@
-<svg style="display:inline;fill:currentColor;stroke:currentColor;stroke-width:0.55px;"
-    xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
-    width="24" height="24" viewBox="0 0 24 24">
-    <path
-        d="M22,12C22,6.514 17.486,2 12,2C6.514,2 2,6.514 2,12C2,17.486 6.514,22 12,22C17.486,22 22,17.486 22,12M20,12C20,16.389 16.389,20 12,20C7.611,20 4,16.389 4,12C4,7.611 7.611,4 12,4C16.389,4 20,7.611 20,12"></path>
-    <path
-        d="M7.154,9.781L9.62,8L9.62,9.096L14.004,9.096C15.874,9.096 17.154,10.969 17.154,12.52C17.154,14.333 15.959,15.945 14.278,15.945L9.757,15.945L9.757,14.712L14.141,14.712C15.224,14.712 15.785,13.409 15.785,12.657C15.785,11.906 15.425,10.466 14.141,10.466L9.62,10.466L9.62,11.425L7.154,9.781Z"
-        style="stroke-width:0.55px;"></path>
-</svg>

BIN
non_catalog_apps/gb-pokemon-trading/docs/images/cut-cable-v3.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/dmg_link_port_pinout.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-1.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-2.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-3.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-4.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-5.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-6.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat-7.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-flat.psd


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/flipper-zero-pcb.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_pokemon_center.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_save.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_save_trade.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_list.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_list_select_trade.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_list_select_trade_confirm.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_room.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/game_boy_trade_room_2.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/gb_spi.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/gblpof.gif


Файловите разлики са ограничени, защото са твърде много
+ 0 - 7
non_catalog_apps/gb-pokemon-trading/docs/images/implemented.svg


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/left.png


+ 0 - 6
non_catalog_apps/gb-pokemon-trading/docs/images/left.svg

@@ -1,6 +0,0 @@
-<svg style="display:inline;fill:currentColor;stroke:currentColor;stroke-width:0.55px;"
-    xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
-    width="24" height="24" viewBox="0 0 24 24">
-    <path
-        d="M22,12A10,10 0 0,0 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12M14,7L9,12L14,17V7Z"></path>
-</svg>

BIN
non_catalog_apps/gb-pokemon-trading/docs/images/pcb.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/qFlipper.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/reboot.png


BIN
non_catalog_apps/gb-pokemon-trading/docs/images/wgbl-0.png


+ 0 - 744
non_catalog_apps/gb-pokemon-trading/docs/images/white_flat.svg

@@ -1,744 +0,0 @@
-<svg version="1.1" id="Flipper_1" xmlns="http://www.w3.org/2000/svg"
-    xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-    viewBox="0 0 202.5 85.4" style="enable-background:new 0 0 202.5 85.4;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFFFFF;}
-	.st1{fill:#231F20;}
-	.st2{fill:#fe8a2c;}
-	.st3{display:none;}
-	.st4{display:inline;fill:#FF8200;}
-	.st5{fill:#808080;}
-</style>
-<g id="white">
-	<g>
-		<g>
-			<path class="st0" d="M40.9,0.6h126.7c3.9,0.1,7.9,1,11.1,4.7C181.9,9,195.6,26,197,27.8s2.9,4.1,3.3,7.9
-				c0.4,3.8,1.5,29.3,1.5,32.8c0,3.7-1.1,5.2-1.9,6.9c-0.8,1.5-2,4-2.8,5.5s-3.5,3.8-7.8,3.9H32.2c-4.6,0-8.4-1.7-10.9-5.1
-				C18.8,76.4,5.1,57.5,4.5,56.5c-1-1.6-1.8-4.1-3.2-6.9c-0.9-1.8-1.3-4.6,1-7.8c2.4-3.2,25.8-33.6,27.9-36
-				C32.3,3.3,35.9,0.5,40.9,0.6z"/>
-			<path class="st1" d="M32.1,85.4c-4.7,0-8.6-1.8-11.2-5.3C18.6,77,4.6,57.9,4,56.8c-0.6-1-1.1-2.2-1.7-3.6c-0.4-1-0.9-2.2-1.5-3.4
-				s-1.7-4.4,1.1-8.3c2.5-3.4,26-33.8,27.9-36.1c1.7-2,5.5-5.4,11-5.4h0.1h126.7c3.2,0.1,7.9,0.7,11.6,4.9c1.9,2.3,8.1,9.9,17.9,22
-				l0.4,0.5c1.5,1.9,3,4.2,3.4,8.2c0.5,4,1.5,29.5,1.5,32.9c0,3.4-0.9,5.1-1.7,6.6c-0.1,0.2-0.2,0.4-0.3,0.6c-0.8,1.5-2,4-2.8,5.5
-				c-0.8,1.6-3.7,4.1-8.3,4.2H32.2C32.2,85.4,32.1,85.4,32.1,85.4z M40.8,1.1c-5.1,0-8.6,3.1-10.2,5c-1.9,2.3-25.4,32.6-27.8,36
-				c-2.5,3.4-1.6,6.1-1,7.2c0.6,1.2,1.1,2.4,1.6,3.5C4,54.2,4.5,55.3,5,56.2C5.5,57.1,19.3,76,21.8,79.4c2.4,3.2,6,4.9,10.4,4.9
-				h157.3c4.1-0.1,6.6-2.2,7.3-3.6c0.8-1.6,2-4,2.8-5.5c0.1-0.2,0.2-0.4,0.3-0.6c0.8-1.4,1.5-2.9,1.6-6.1c0-3.9-1.1-29.1-1.5-32.8
-				s-1.8-5.9-3.2-7.6l-0.4-0.5c-12.3-15.3-16.5-20.4-17.9-22c-2.6-3-6-4.4-10.7-4.5H41.1C40.9,1.1,40.8,1.1,40.8,1.1z"/>
-		</g>
-		<g>
-			<path class="st1" d="M27.3,78.5c-4.6,0-7-1.8-12.6-9.5c-5.4-7.3-12.9-17.8-13-17.9l0.5-0.3c0.1,0.1,7.5,10.6,12.9,17.9
-				c5.5,7.5,7.8,9.2,12.2,9.2h165.4c3.3-0.2,6.7-1.8,7.6-3.6l0.5,0.3c-1,2-4.6,3.8-8.1,3.9H27.3z"/>
-		</g>
-		<g>
-			<path class="st0" d="M164.8,2.9c4,0,6.6,0.5,9.2,3.6s18,22.2,19.3,23.8c1.3,1.6,2.4,4,2.4,6.6s0.6,14.8,0.4,18
-				c-0.2,3.3-2.9,5.7-6.4,5.8H42c-4.7-0.1-6.7-1.3-8.9-3.6c-2.2-2.4-7.9-8.5-9.6-10.7c-1.9-2.4-1-4.2,0.1-5.9
-				C24.9,38.9,43.4,11,45.2,8.1c1.7-2.8,4.9-5.2,8.8-5.2L164.8,2.9z"/>
-			<path class="st1" d="M42.1,61.1c-4.8-0.1-6.8-1.3-9.1-3.7s-7.9-8.6-9.6-10.8c-2-2.5-1.1-4.5,0.1-6.2C24.8,38.6,43.3,10.7,44.9,8
-				c2.1-3.3,5.4-5.3,9-5.3l0,0h110.8c4.2,0,6.8,0.6,9.4,3.7c2.6,3.1,18.2,22.4,19.3,23.8c1.5,2,2.4,4.5,2.4,6.8
-				c0,0.9,0.1,2.9,0.2,5.2c0.2,4.8,0.4,10.7,0.3,12.8c-0.2,3.4-3,6-6.6,6.1H42.1z M54,3.2c-3.4,0-6.6,1.9-8.5,5.1
-				C43.8,11,25.2,38.9,24,40.7c-1,1.5-2,3.2-0.1,5.5c1.7,2.2,7.3,8.3,9.6,10.7c2.2,2.3,4.1,3.5,8.7,3.5h147.7
-				c3.3-0.1,5.9-2.5,6.1-5.6c0.1-2.1-0.1-8.3-0.3-12.8c-0.1-2.3-0.2-4.3-0.2-5.2c0-3.2-1.6-5.6-2.3-6.4C192,29,176.5,9.7,173.8,6.7
-				c-2.5-2.9-5-3.4-9-3.5L54,3.2L54,3.2z"/>
-		</g>
-		<g>
-			<path class="st0" d="M191.3,39.6c2.5,3.2,0.8,11-4.7,11.9h-32.8c-11.3-0.1-22.8-9.4-22.7-22.7S142.7,7,154.1,7
-				c10.4,0.1,16.8,7.3,17.4,8.2C173.4,17.7,189.1,36.8,191.3,39.6z"/>
-			<path class="st1" d="M153.8,51.8c-5.7,0-11.5-2.4-15.8-6.5c-4.7-4.4-7.2-10.3-7.2-16.6C130.9,15,142.9,6.6,154,6.6h0.1
-				c11.1,0.1,17.6,8.2,17.6,8.3c0.9,1.2,5,6.1,9.2,11.4c4.6,5.7,9.4,11.6,10.6,13.1l0,0c1.4,1.7,1.6,4.9,0.5,7.6
-				c-1,2.6-3,4.3-5.4,4.7L153.8,51.8z M154,7.2c-10.8,0-22.5,8.2-22.6,21.5c0,6.1,2.5,11.9,7,16.1c4.3,4,9.9,6.3,15.4,6.3h32.8
-				c2.1-0.4,3.9-1.9,4.9-4.4s0.8-5.4-0.4-7l0,0c-1.2-1.5-5.9-7.4-10.6-13.1c-4.3-5.2-8.3-10.2-9.2-11.4
-				C171.2,15.1,164.9,7.2,154,7.2L154,7.2z"/>
-		</g>
-		<g>
-			<path class="st0" d="M147.8,80.3h23.9c0.9,0,1.8,1.1,0.1,1.2h-24.3C146.8,81.5,146.2,80.6,147.8,80.3z"/>
-			<path class="st1" d="M147.5,81.8c-0.5,0-0.9-0.4-0.9-0.8c0-0.3,0.1-0.8,1.2-1l0,0h23.9c0.7,0,1.3,0.5,1.3,1
-				c0,0.3-0.2,0.7-1.2,0.8H147.5z M147.8,80.6c-0.6,0.1-0.7,0.3-0.7,0.4s0.2,0.3,0.4,0.3h24.3c0.5,0,0.7-0.2,0.7-0.2
-				c0-0.1-0.3-0.4-0.8-0.4L147.8,80.6z"/>
-		</g>
-		<g>
-			<path class="st0" d="M195.4,80.4c0.3,0.1,0.3,1.7-2.4,2.3c-4.1,1-6,0.3-5.4-0.7s1.3-0.4,4.2-0.9S194.7,80,195.4,80.4z"/>
-			<path class="st1" d="M189.6,83.5c-1.1,0-1.9-0.2-2.2-0.6c-0.2-0.3-0.2-0.6,0-0.9c0.4-0.7,1-0.8,1.9-0.8c0.6,0,1.4-0.1,2.5-0.2
-				c1.4-0.2,2.1-0.5,2.5-0.7c0.5-0.2,0.8-0.3,1.2,0c0.2,0.1,0.3,0.3,0.3,0.6c0,0.3-0.2,1.7-2.7,2.2
-				C191.8,83.3,190.5,83.5,189.6,83.5z M195,80.6c-0.1,0-0.2,0-0.5,0.1c-0.5,0.2-1.2,0.5-2.6,0.7c-1.1,0.2-1.9,0.2-2.5,0.3
-				c-1,0-1.2,0.1-1.5,0.5c-0.1,0.2,0,0.3,0,0.3c0.3,0.4,1.9,0.7,5.2-0.1c1.5-0.3,2-0.9,2.2-1.3c0.1-0.2,0.1-0.4,0.1-0.5
-				C195.2,80.6,195.1,80.6,195,80.6z"/>
-		</g>
-		<g>
-			<path class="st2" d="M154,8.6c12.2,0.2,21.3,10.3,21.3,20.4c-0.1,10.6-8.5,20.6-20.7,20.6c-12.2-0.1-22-9.2-21.9-21.1
-				C132.8,17.1,142.7,8.4,154,8.6z"/>
-			<path class="st1" d="M154.8,49.9h-0.1c-12.6-0.1-22.4-9.5-22.3-21.5c0-5.3,2.2-10.3,6-14.1c4.1-4,9.8-6.2,15.7-6.2l0,0
-				c12.9,0.2,21.8,11.1,21.7,20.8C175.7,39.1,167.7,49.9,154.8,49.9z M153.6,9c-5.5,0-10.8,2.1-14.7,5.9c-3.7,3.6-5.8,8.4-5.8,13.5
-				c-0.1,11.5,9.4,20.6,21.5,20.7h0.1c12.4,0,20.1-10.4,20.1-20.1c0-9.2-8.5-19.7-20.9-19.9C153.9,9,153.8,9,153.6,9z"/>
-		</g>
-		<g>
-			<path class="st2" d="M183.4,36.5c4.3,0,6.9,3.5,6.9,6.7c0,3.1-2.2,6.4-6.6,6.4c-4.2-0.1-6.9-3.5-6.9-6.7
-				C176.9,39.7,179.6,36.6,183.4,36.5z"/>
-			<path class="st1" d="M183.8,50.1h-0.1c-2,0-3.9-0.8-5.3-2.2c-1.3-1.4-2-3.2-2-4.9c0.1-3.2,2.8-6.7,7.1-6.8l0,0
-				c2.1,0,4,0.8,5.4,2.3c1.2,1.3,1.9,3.1,1.9,4.9c0,1.8-0.7,3.6-2,4.9C187.5,49.4,185.8,50.1,183.8,50.1z M183.5,37L183.5,37
-				c-3.8,0-6.2,3.1-6.3,5.9c0,1.6,0.6,3.1,1.8,4.3c1.2,1.3,2.9,2,4.7,2s3.4-0.5,4.5-1.7c1.1-1.1,1.7-2.7,1.7-4.3s-0.6-3.1-1.7-4.3
-				C187.4,38.1,185.9,37,183.5,37z"/>
-		</g>
-		<g>
-			<path class="st1" d="M154.5,46c-0.3,0-0.5-0.1-0.7-0.4c-0.2-0.2-1.3-2-2.3-3.7L151,41c-0.2-0.4-0.3-0.8-0.1-1
-				c0.1-0.1,0.3-0.3,0.7-0.3s1.8,0,3.1,0c1.1,0,2.2,0,2.5,0c0.5,0,0.7,0.3,0.8,0.4c0.1,0.2,0.1,0.6-0.1,0.8
-				c-0.1,0.1-0.3,0.6-0.7,1.2c-0.9,1.6-1.8,3.2-2,3.5S154.7,46,154.5,46L154.5,46z M151.5,40.2c-0.1,0-0.1,0-0.1,0.1s0,0.3,0.1,0.5
-				l0.5,0.8c0.7,1.2,2.1,3.5,2.3,3.7c0.1,0.1,0.2,0.2,0.3,0.2l0,0c0.1,0,0.2-0.1,0.2-0.2c0.2-0.3,1.3-2.2,2-3.4
-				c0.3-0.6,0.6-1,0.7-1.2c0.1-0.1,0.1-0.2,0-0.3c0-0.1-0.2-0.1-0.3-0.1c-0.3,0-1.3,0-2.5,0C153.3,40.2,152,40.2,151.5,40.2
-				L151.5,40.2L151.5,40.2z"/>
-		</g>
-		<g>
-			<path class="st1" d="M142,32c-0.2,0-0.3,0-0.6-0.1s-2.5-1.3-4.5-2.5l-0.5-0.3c-0.4-0.2-0.5-0.5-0.5-0.7c0-0.3,0.2-0.6,0.6-0.8
-				c0.3-0.2,2.2-1.2,3.4-1.9l1.1-0.6c0.3-0.2,0.8-0.4,1.1-0.2c0.4,0.2,0.3,0.7,0.3,0.8c0,0.6,0,3.8,0.1,5v0.4c0,0.3-0.1,0.6-0.3,0.7
-				C142.3,32,142.1,32,142,32z M141.9,25.5c-0.1,0-0.2,0-0.5,0.2l-1.1,0.6c-1.3,0.7-3.1,1.7-3.4,1.9c-0.2,0.1-0.3,0.2-0.3,0.3
-				c0,0.1,0.1,0.1,0.2,0.2l0.5,0.3c1.1,0.6,4.1,2.3,4.4,2.5c0.3,0.1,0.4,0.1,0.4,0.1s0-0.1,0-0.2V31c0-1.2-0.1-4.4-0.1-5h0.3H142
-				C142,25.6,142,25.5,141.9,25.5L141.9,25.5z"/>
-		</g>
-		<g>
-			<path class="st1" d="M166.6,32c-0.1,0-0.3,0-0.4-0.1c-0.2-0.1-0.4-0.3-0.4-0.8c0-0.3,0-1,0-1.8c0-1.3-0.1-2.9,0-3.4l0,0
-				c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.1,1.3,0.2c0.5,0.3,3.4,2,4.2,2.5l0.2,0.1c0.3,0.2,0.5,0.4,0.5,0.7c0,0.2-0.1,0.5-0.6,0.8
-				c-0.6,0.4-4.1,2.4-4.5,2.6C167,32,166.8,32,166.6,32z M166.3,25.9c0,0.6,0,2.1,0,3.4c0,0.8,0,1.5,0,1.8c0,0.1,0,0.3,0.1,0.3
-				c0.1,0.1,0.2,0,0.4-0.1c0.4-0.2,3.9-2.2,4.5-2.6c0.2-0.1,0.3-0.3,0.3-0.3c0-0.1-0.1-0.1-0.2-0.2l-0.2-0.1
-				c-0.8-0.5-3.7-2.1-4.2-2.4c-0.4-0.2-0.7-0.3-0.7-0.2C166.3,25.5,166.3,25.7,166.3,25.9L166.3,25.9z"/>
-		</g>
-		<g>
-			<path class="st1" d="M156.8,17.5L156.8,17.5c-0.3,0-4,0-5.2,0h-0.5c-0.4,0-0.7-0.1-0.8-0.4c-0.1-0.1-0.2-0.4,0-0.9
-				c0.1-0.3,0.7-1.2,1.3-2.2c0.6-0.9,1.1-1.8,1.3-2.2c0.3-0.4,0.5-0.7,0.8-0.7s0.5,0.1,0.7,0.5c0.1,0.2,0.7,1.1,1.3,2.1
-				c0.7,1.1,1.4,2.3,1.6,2.5c0.2,0.3,0.2,0.6,0.1,0.9C157.4,17.3,157.1,17.5,156.8,17.5z M151.1,16.9h0.5c2.3,0,5,0,5.2,0
-				c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0-0.2-0.1-0.3c-0.2-0.3-0.9-1.4-1.6-2.6c-0.6-1-1.2-1.9-1.3-2.1c-0.1-0.2-0.2-0.2-0.2-0.2l0,0
-				c0,0-0.2,0.1-0.4,0.4c-0.2,0.4-0.8,1.3-1.3,2.2c-0.6,1-1.2,1.9-1.3,2.2c-0.1,0.1-0.1,0.2-0.1,0.3C150.9,16.9,151,16.9,151.1,16.9
-				L151.1,16.9z"/>
-		</g>
-		<g>
-			<path class="st1" d="M185.4,46.2L185.4,46.2h-3.8v-1.5h3.6l0,0c0.6,0,1-0.8,1-1.3c0-0.2-0.1-0.6-0.2-0.9
-				c-0.2-0.3-0.4-0.5-0.7-0.5h-3.2v1l-2.7-1.8l2.7-1.9v1.1h3.1c0.7,0,1.4,0.4,2,1c0.5,0.6,0.7,1.3,0.7,1.9c0,0.8-0.2,1.5-0.7,2
-				C186.7,45.9,186.1,46.2,185.4,46.2z M182.2,45.6h3.2l0,0c0.5,0,1-0.2,1.4-0.7c0.4-0.4,0.6-1,0.6-1.7c0-0.5-0.2-1.1-0.6-1.6
-				c-0.4-0.5-0.9-0.8-1.5-0.8h-3.6v-0.6l-1.1,0.8l1.1,0.7v-0.5h3.7c0.5,0,1,0.3,1.2,0.8c0.3,0.5,0.3,1,0.3,1.2
-				c0,0.8-0.6,1.8-1.5,1.8l0,0h-3.1L182.2,45.6z"/>
-		</g>
-		<g>
-			<path class="st0" d="M133.3,47.9c0.7,0,1.3,0.7,1.3,1.3c0,0.5-0.4,1.2-1.2,1.1s-1.4-0.5-1.4-1.2C132,48.5,132.5,47.9,133.3,47.9z
-				"/>
-			<path class="st1" d="M133.4,50.6L133.4,50.6c-0.9,0-1.7-0.6-1.6-1.4c0-0.8,0.7-1.5,1.5-1.5l0,0l0,0c0.9,0,1.5,0.8,1.5,1.6
-				C134.8,49.9,134.3,50.6,133.4,50.6z M133.3,48.2c-0.5,0-1,0.4-1,1c0,0.5,0.5,0.9,1.1,0.9l0,0c0.6,0,0.9-0.5,0.9-0.9
-				C134.2,48.8,133.8,48.2,133.3,48.2L133.3,48.2z"/>
-		</g>
-		<g>
-			<path class="st1" d="M154.4,35.9L154.4,35.9c-2.2,0-4.3-0.9-5.7-2.3c-1.3-1.3-2-3.1-1.9-5.1c0.1-4.8,4.4-7,7.4-7l0,0l0,0
-				c1.9,0,3.7,0.8,5.1,2.2c1.4,1.4,2.2,3.2,2.1,5.1c0,1.9-0.7,3.7-2,5C158.2,35.1,156.4,35.9,154.4,35.9z M154.2,22.3L154.2,22.3
-				c-2.7,0-6.5,1.9-6.5,6.2c0,1.7,0.6,3.3,1.7,4.4c1.3,1.3,3.2,2.1,5.1,2.1l0,0c1.7,0,3.3-0.6,4.4-1.8c1.1-1.2,1.8-2.7,1.8-4.4
-				c0-1.7-0.7-3.3-1.9-4.5C157.5,23,155.8,22.4,154.2,22.3z"/>
-		</g>
-		<g>
-			<path class="st0" d="M121.6,51.5H54.1c-2.7,0-5-2.2-5-5V11.7c0-2.7,2.2-5,5-5h67.5c2.7,0,5,2.2,5,5v34.8
-				C126.6,49.3,124.4,51.5,121.6,51.5z"/>
-			<path class="st1" d="M121.6,52H54.1c-3,0-5.5-2.4-5.5-5.5V11.7c0-3,2.4-5.5,5.5-5.5h67.5c3,0,5.5,2.5,5.5,5.5v34.8
-				C127.1,49.6,124.6,52,121.6,52z M54.1,7.3c-2.5,0-4.5,2-4.5,4.5v34.8c0,2.5,2,4.5,4.5,4.5h67.5c2.5,0,4.5-2,4.5-4.5V11.7
-				c0-2.5-2-4.5-4.5-4.5H54.1V7.3z"/>
-		</g>
-		<g>
-			<path class="st2" d="M121.4,49.1H54.5c-1.6,0-2.9-1.3-2.9-2.9V11.9c0-1.6,1.3-2.9,2.9-2.9h66.8c1.6,0,2.9,1.3,2.9,2.9v34.3
-				C124.3,47.8,123,49.1,121.4,49.1z"/>
-			<path class="st1" d="M121.4,49.4H54.5c-1.8,0-3.2-1.4-3.2-3.2V11.9c0-1.8,1.4-3.2,3.2-3.2h66.8c1.8,0,3.2,1.4,3.2,3.2v34.3
-				C124.5,48,123.1,49.4,121.4,49.4z M54.5,9.3c-1.4,0-2.6,1.2-2.6,2.6v34.3c0,1.4,1.2,2.6,2.6,2.6h66.8c1.4,0,2.6-1.2,2.6-2.6V11.9
-				c0-1.4-1.2-2.6-2.6-2.6C121.3,9.3,54.5,9.3,54.5,9.3z"/>
-		</g>
-	</g>
-	<g id="dolphin_1_">
-		<g>
-			<polygon points="86.7,35.8 86.1,35.8 85.6,35.8 85,35.8 85,36.4 85.6,36.4 86.1,36.4 86.7,36.4 87.2,36.4 87.8,36.4 87.8,35.8 
-				87.2,35.8 			"/>
-		</g>
-		<g>
-			<polygon points="70,35.8 69.5,35.8 69.5,36.3 70,36.3 70.6,36.3 70.6,35.8 			"/>
-		</g>
-		<g>
-			<rect x="58.97" y="35.47" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.1959 94.8637)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.79" y="35.63" transform="matrix(5.134305e-03 -1 1 5.134305e-03 21.8589 93.8361)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.7" y="35.69" transform="matrix(5.134305e-03 -1 1 5.134305e-03 20.7184 92.8058)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="88.9,35.3 88.3,35.3 88.3,34.7 87.8,34.7 87.2,34.7 87.2,35.3 87.8,35.3 87.8,35.8 88.3,35.8 88.9,35.9 
-				89.5,35.9 90,35.9 90,35.3 89.5,35.3 			"/>
-		</g>
-		<g>
-			<rect x="68.93" y="35.25" transform="matrix(5.134305e-03 -1 1 5.134305e-03 33.3228 104.5986)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="59.44" y="35.05" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.0809 94.909)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="58.35" y="35.01" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.0409 93.7807)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.27" y="35.07" transform="matrix(5.134305e-03 -1 1 5.134305e-03 21.9013 92.7517)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.18" y="34.93" transform="matrix(5.134305e-03 -1 1 5.134305e-03 20.9613 91.5241)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="90.6,34.8 90,34.7 90,35.3 90.6,35.3 91.1,35.3 91.7,35.3 91.7,34.8 91.1,34.8 			"/>
-		</g>
-		<g>
-			<rect x="60" y="34.43" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.2657 94.8522)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="58.92" y="34.39" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.2264 93.7232)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.93" y="34.45" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.1847 92.7943)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.74" y="34.5" transform="matrix(5.134305e-03 -1 1 5.134305e-03 21.9479 91.6674)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.66" y="34.46" transform="matrix(5.134305e-03 -1 1 5.134305e-03 20.9082 90.5384)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="91.7,34.2 91.7,34.8 92.2,34.8 92.8,34.8 92.8,34.2 92.2,34.2 			"/>
-		</g>
-		<g>
-			<polygon points="86.7,34.7 87.2,34.7 87.2,34.2 86.7,34.2 86.1,34.2 86.1,34.7 			"/>
-		</g>
-		<g>
-			<rect x="59.48" y="33.96" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.2096 93.8691)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="58.49" y="33.92" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.2686 92.8401)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.31" y="33.98" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.0293 91.7103)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.12" y="33.94" transform="matrix(5.134305e-03 -1 1 5.134305e-03 21.8907 90.4827)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.03" y="33.9" transform="matrix(5.134305e-03 -1 1 5.134305e-03 20.8514 89.3535)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="59.06" y="33.4" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.3532 92.8826)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.97" y="33.36" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.3134 91.753)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.88" y="33.42" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.1746 90.7263)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.7" y="33.47" transform="matrix(5.134305e-03 -1 1 5.134305e-03 21.9363 89.5974)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="93.9,33.1 93.3,33.1 92.8,33.1 92.2,33.1 91.7,33.1 91.1,33.1 90.6,33.1 90,33.1 89.5,33.1 88.9,33.1 88.4,33.1 
-				87.8,33.1 87.2,33.1 86.7,33.1 86.1,33.1 85.6,33.1 85,33.1 84.5,33.1 84.5,32.5 85,32.5 85,31.9 85.6,32 85.6,31.4 86.1,31.4 
-				86.2,30.8 86.7,30.8 86.7,30.3 87.3,30.3 87.3,29.7 87.8,29.7 87.8,29.2 88.4,29.2 88.4,28.6 88.9,28.6 88.9,28.1 89.5,28.1 
-				89.5,27.5 90.1,27.5 90.1,27 90.6,27 90.6,26.4 91.2,26.4 91.2,25.9 91.7,25.9 91.7,25.3 92.3,25.3 92.3,24.8 92.8,24.8 
-				92.8,24.2 93.4,24.2 93.4,23.7 93.4,23.1 93.4,22.6 93.4,22 92.9,22 92.9,21.5 92.3,21.5 91.7,21.4 91.2,21.4 91.2,20.9 
-				90.6,20.9 90.1,20.9 89.5,20.9 89,20.9 88.4,20.9 87.9,20.9 87.3,20.9 86.8,20.9 86.2,20.9 86.2,21.4 85.6,21.4 85.1,21.4 
-				85.1,22 84.5,22 84,22 84,22.5 83.4,22.5 82.9,22.5 82.9,22 82.3,22 82.3,21.4 82.3,20.8 81.8,20.8 81.8,20.3 81.8,19.7 
-				81.2,19.7 81.2,19.2 80.7,19.2 80.7,18.6 80.1,18.6 80.1,18.1 79.6,18.1 79.6,17.5 79,17.5 78.5,17.5 78.5,16.9 77.9,16.9 
-				77.4,16.9 77.4,16.4 76.8,16.4 76.2,16.4 75.7,16.4 75.7,15.8 75.1,15.8 74.6,15.8 74,15.8 73.5,15.8 72.9,15.8 72.9,15.3 
-				72.4,15.2 71.8,15.2 71.3,15.2 70.7,15.2 70.2,15.2 69.6,15.2 69,15.2 68.5,15.2 67.9,15.2 67.4,15.2 66.8,15.2 66.3,15.2 
-				65.7,15.2 65.2,15.2 64.6,15.2 64.6,15.8 64,15.8 63.5,15.8 62.9,15.8 62.4,15.8 62.4,16.3 61.8,16.3 61.3,16.3 60.7,16.3 
-				60.7,16.9 60.2,16.9 60.2,17.4 59.6,17.4 59.1,17.4 59,18 58.5,18 57.9,17.9 57.9,18.5 57.4,18.5 57.4,19.1 56.8,19.1 56.8,19.6 
-				56.3,19.6 56.3,20.2 55.7,20.2 55.7,20.7 55.2,20.7 55.1,21.3 55.1,21.8 54.6,21.8 54.6,22.4 54.6,22.9 54,22.9 54,23.5 54,24 
-				53.5,24 53.5,24.6 53.5,25.1 53.5,25.7 54,25.7 54,25.1 54,24.6 54.6,24.6 54.6,24 54.6,23.5 55.1,23.5 55.1,22.9 55.1,22.4 
-				55.7,22.4 55.7,21.8 55.7,21.3 56.3,21.3 56.3,20.7 56.8,20.7 56.8,20.2 57.4,20.2 57.4,19.6 57.9,19.6 57.9,19.1 58.5,19.1 
-				58.5,18.5 59,18.5 59.6,18.5 59.6,18 60.2,18 60.7,18 60.7,17.4 61.3,17.4 61.8,17.4 62.4,17.4 62.9,17.4 63.5,17.4 64,17.4 
-				64.6,17.4 65.1,17.4 65.7,17.4 66.3,17.4 66.8,17.4 67.4,17.4 67.4,16.9 66.8,16.9 66.3,16.9 65.7,16.9 65.2,16.9 64.6,16.9 
-				64,16.9 63.5,16.9 62.9,16.9 62.9,16.3 63.5,16.3 64,16.3 64.6,16.3 65.2,16.3 65.2,15.8 65.7,15.8 66.3,15.8 66.8,15.8 
-				67.4,15.8 67.9,15.8 68.5,15.8 69,15.8 69.6,15.8 70.1,15.8 70.7,15.8 71.3,15.8 71.8,15.8 72.4,15.8 72.4,16.4 72.9,16.4 
-				72.9,16.9 73.5,16.9 73.5,16.4 74,16.4 74,16.9 74.6,16.9 75.1,16.9 75.7,16.9 76.2,16.9 76.8,16.9 76.8,17.5 76.8,18 77.3,18 
-				77.9,18.1 78.5,18.1 79,18.1 79,18.6 79.6,18.6 79.6,19.2 80.1,19.2 80.1,19.7 80.7,19.7 80.7,20.3 81.2,20.3 81.2,20.8 
-				81.2,21.4 81.2,21.9 80.7,21.9 80.6,22.5 81.2,22.5 81.8,22.5 82.3,22.5 82.3,23.1 82.3,23.6 82.9,23.6 83.4,23.6 83.4,23.1 
-				84,23.1 84.5,23.1 84.5,22.5 85.1,22.5 85.6,22.5 85.6,22 86.2,22 86.8,22 86.8,21.4 87.3,21.4 87.9,21.4 88.4,21.4 89,21.4 
-				89.5,21.4 90.1,21.4 90.6,21.4 90.6,22 91.2,22 91.7,22 92.3,22 92.3,22.6 92.8,22.6 92.8,23.1 92.3,23.1 91.7,23.1 91.2,23.1 
-				90.6,23.1 90.6,23.7 90.1,23.7 89.5,23.7 89,23.7 89,24.2 88.4,24.2 87.8,24.2 87.8,24.8 87.3,24.8 86.7,24.7 86.7,25.3 
-				86.2,25.3 86.2,25.9 85.6,25.9 85.6,26.4 85.1,26.4 85.1,27 84.5,27 84.5,27.5 84,27.5 83.9,28.1 83.4,28.1 83.4,28.6 82.8,28.6 
-				82.8,29.2 82.3,29.2 82.3,29.7 81.7,29.7 81.7,30.3 81.2,30.3 81.2,30.8 80.6,30.8 80.6,31.4 80,31.4 80,31.9 79.5,31.9 
-				79.5,32.5 78.9,32.5 78.9,33 78.4,33 78.4,33.6 77.8,33.6 77.8,34.1 77.3,34.1 77.3,34.7 76.7,34.7 76.2,34.7 76.1,35.2 
-				75.6,35.2 75,35.2 75,35.8 74.5,35.8 73.9,35.8 73.4,35.8 73.4,36.3 72.8,36.3 72.3,36.3 71.7,36.3 71.2,36.3 70.6,36.3 
-				70.6,36.9 71.1,36.9 71.7,36.9 72.3,36.9 72.8,36.9 73.4,36.9 73.9,36.9 74.5,36.9 75,36.9 75.6,36.9 76.1,36.9 76.7,36.9 
-				77.2,36.9 77.8,36.9 78.4,36.9 78.9,36.9 79.5,36.9 80,36.9 80.6,36.9 81.1,36.9 81.7,36.9 82.2,36.9 82.8,36.9 83.3,36.9 
-				83.9,36.9 84.5,36.9 85,36.9 85,36.4 84.5,36.4 83.9,36.4 83.4,36.4 82.8,36.4 82.2,36.4 81.7,36.4 81.1,36.4 80.6,36.4 80,36.4 
-				79.5,36.4 78.9,36.4 78.4,36.4 78.4,35.8 78.4,35.2 78.9,35.2 78.9,34.7 79.5,34.7 79.5,34.1 80,34.1 80,33.6 80.6,33.6 
-				81.1,33.6 81.7,33.6 82.3,33.6 82.8,33.6 83.4,33.6 83.9,33.6 83.9,34.2 84.5,34.2 85,34.2 85.6,34.2 86.1,34.2 86.1,33.6 
-				86.7,33.6 87.2,33.6 87.8,33.6 88.4,33.6 88.9,33.6 89.5,33.6 90,33.6 90.6,33.6 91.1,33.6 91.7,33.6 92.2,33.6 92.8,33.7 
-				92.8,34.2 93.3,34.2 93.9,34.2 93.9,34.8 93.9,35.3 93.9,35.9 93.3,35.9 93.3,36.4 92.8,36.4 92.8,37 92.2,37 92.2,37.5 
-				91.7,37.5 91.7,38.1 91.1,38.1 90.6,38.1 90.5,38.6 90,38.6 89.4,38.6 88.9,38.6 88.9,39.2 88.3,39.2 87.8,39.2 87.2,39.2 
-				87.2,39.7 86.7,39.7 86.1,39.7 85.6,39.7 85.5,40.3 85,40.3 84.4,40.3 83.9,40.3 83.3,40.3 83.3,40.8 82.8,40.8 82.2,40.8 
-				81.7,40.8 81.1,40.8 81.1,41.4 80.6,41.4 80,41.4 79.4,41.3 79.4,41.9 78.9,41.9 78.9,42.5 79.4,42.5 80,42.5 80.5,42.5 
-				81.1,42.5 81.7,42.5 82.2,42.5 82.8,42.5 82.8,41.9 83.3,41.9 83.9,41.9 83.9,41.4 83.9,40.8 84.4,40.8 85,40.8 85.5,40.8 
-				86.1,40.8 86.1,40.3 86.7,40.3 87.2,40.3 87.8,40.3 87.8,39.7 88.3,39.7 88.9,39.7 89.4,39.7 89.4,39.2 90,39.2 90.5,39.2 
-				91.1,39.2 91.1,38.6 91.7,38.6 92.2,38.6 92.2,38.1 92.8,38.1 92.8,37.5 93.3,37.5 93.3,37 93.9,37 93.9,36.4 94.4,36.4 
-				94.4,35.9 94.4,35.3 94.4,34.8 94.5,34.2 94.5,33.7 93.9,33.7 			"/>
-		</g>
-		<g>
-			<rect x="58.43" y="32.94" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.1982 91.7988)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.35" y="32.89" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.1586 90.6696)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.16" y="32.85" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.02 89.442)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.07" y="32.91" transform="matrix(5.134305e-03 -1 1 5.134305e-03 21.8786 88.4149)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.91" y="32.37" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.2429 90.7118)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.92" y="32.23" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.4021 89.5849)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.74" y="32.39" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.0652 88.5576)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="60.55" y="31.83" transform="matrix(5.134305e-03 -1 1 5.134305e-03 28.4088 92.8184)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="58.4,31.8 58.4,32.4 59,32.4 59,32.9 59.5,32.9 59.5,33.5 60.1,33.5 60.1,34 60.6,34 60.6,34.6 61.2,34.6 
-				61.2,35.2 61.7,35.2 61.7,34.6 61.7,34 61.7,33.5 62.3,33.5 62.3,32.9 62.3,32.4 61.7,32.4 61.2,32.4 61.2,32.9 61.2,33.5 
-				60.6,33.5 60.6,32.9 60.1,32.9 60.1,32.4 59.5,32.4 59.5,31.8 59.5,31.3 59,31.3 59,31.8 			"/>
-		</g>
-		<g>
-			<rect x="57.39" y="31.81" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.2872 89.6305)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.3" y="31.76" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.2473 88.5013)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.02" y="31.72" transform="matrix(5.134305e-03 -1 1 5.134305e-03 23.0083 87.1761)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="57.95" y="31.28" transform="matrix(5.134305e-03 -1 1 5.134305e-03 26.3722 89.6722)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.87" y="31.14" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.4326 88.4445)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="55.68" y="31.1" transform="matrix(5.134305e-03 -1 1 5.134305e-03 24.2895 87.218)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="60.6,30.7 60.1,30.7 60.1,31.3 60.1,31.8 60.6,31.8 60.6,31.3 			"/>
-		</g>
-		<g>
-			<rect x="57.33" y="30.72" transform="matrix(5.134305e-03 -1 1 5.134305e-03 26.3174 88.4904)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="56.24" y="30.58" transform="matrix(5.134305e-03 -1 1 5.134305e-03 25.3767 87.2628)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<path d="M68.4,30.2v-0.6V29v-0.6v-0.6v-0.6h-0.6v-0.6V26h-0.6v-0.6h-0.6H66v-0.6h-0.6h-0.6h-0.6h-0.6H63v0.6h-0.6h-0.6V26h-0.6
-				v0.6v0.6h-0.6v0.6v0.6V29v0.6v0.6h0.6v0.6v0.6h0.6V32v0.6h0.6V32H63h0.6v-0.6h0.6h0.6h0.6v-0.6H66h0.6h0.6h0.6h0.6H69v-0.6
-				L68.4,30.2z M63.4,28v-0.6H64h0.6V28v0.6H64h-0.6V28z"/>
-		</g>
-		<g>
-			<rect x="56.71" y="30.06" transform="matrix(5.134305e-03 -1 1 5.134305e-03 26.3595 87.2071)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="71.2,29.7 71.2,29.1 71.2,28.6 71.2,28 71.2,27.4 71.2,26.9 71.2,26.3 70.6,26.3 70.6,26.9 70.6,27.4 70.6,28 
-				70.6,28.5 70.6,29.1 70.6,29.7 70.6,30.2 71.2,30.2 71.7,30.2 72.3,30.2 72.3,29.7 71.7,29.7 			"/>
-		</g>
-		<g>
-			<polygon points="60.1,29.6 60.1,29 60.1,28.5 60.1,27.9 60.1,27.4 60.1,26.8 59.6,26.8 59.6,27.4 59.6,27.9 59.5,28.5 59.5,29 
-				59.5,29.6 59.5,30.2 59.5,30.7 60.1,30.7 60.1,30.2 			"/>
-		</g>
-		<g>
-			<polygon points="72.3,29.1 72.3,29.7 72.8,29.7 73.4,29.7 73.4,29.1 72.9,29.1 			"/>
-		</g>
-		<g>
-			<polygon points="73.4,28.6 73.4,29.1 74,29.1 74.5,29.1 74.5,28.6 74,28.6 			"/>
-		</g>
-		<g>
-			<polygon points="74.5,28 74.5,28.6 75.1,28.6 75.6,28.6 75.6,28 75.1,28 			"/>
-		</g>
-		<g>
-			<polygon points="75.6,27.5 75.6,28 76.2,28 76.7,28 76.7,27.5 76.2,27.5 			"/>
-		</g>
-		<g>
-			<polygon points="69.5,28 69.5,28.5 69.5,29.1 69.5,29.7 69.5,30.2 69.5,30.8 69,30.8 69,31.3 69.5,31.3 70.1,31.3 70.1,30.8 
-				70.1,30.2 70.1,29.7 70.1,29.1 70.1,28.5 70.1,28 70.1,27.4 70.1,26.9 69.5,26.9 69.5,27.4 			"/>
-		</g>
-		<g>
-			<rect x="76.7" y="26.94" transform="matrix(5.134305e-03 -1 1 5.134305e-03 49.3644 104.0994)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="77.3,26.4 77.3,26.9 77.9,26.9 78.4,26.9 78.4,26.4 77.9,26.4 			"/>
-		</g>
-		<g>
-			<polygon points="69,26.9 69.5,26.9 69.5,26.3 69.5,25.8 69,25.8 69,26.3 			"/>
-		</g>
-		<g>
-			<polygon points="60.7,26.3 60.7,25.7 60.1,25.7 60.1,26.3 60.1,26.8 60.7,26.8 			"/>
-		</g>
-		<g>
-			<polygon points="58.4,26.8 58.4,27.4 58.4,27.9 58.4,28.5 58.4,29 58.4,29.6 58.4,30.1 57.9,30.1 57.9,30.7 58.4,30.7 58.4,31.3 
-				59,31.3 59,30.7 59,30.2 59,29.6 59,29 59,28.5 59,27.9 59,27.4 59,26.8 59,26.3 58.5,26.3 			"/>
-		</g>
-		<g>
-			<rect x="78.42" y="25.87" transform="matrix(5.134305e-03 -1 1 5.134305e-03 52.1503 104.7495)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="79,25.3 79,25.8 79.5,25.8 80.1,25.8 80.1,25.3 79.5,25.3 			"/>
-		</g>
-		<g>
-			<polygon points="75.1,25.2 74.5,25.2 74,25.2 74,25.8 74.5,25.8 75.1,25.8 75.6,25.8 76.2,25.8 76.2,25.3 75.6,25.2 			"/>
-		</g>
-		<g>
-			<polygon points="70.7,25.2 70.1,25.2 70.1,25.8 70.1,26.3 70.6,26.3 70.7,25.8 			"/>
-		</g>
-		<g>
-			<rect x="68.31" y="25.2" transform="matrix(5.134305e-03 -1 1 5.134305e-03 42.7596 93.9763)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="60.7" y="25.11" transform="matrix(5.134305e-03 -1 1 5.134305e-03 35.2776 86.2758)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="59,25.7 59,26.3 59.6,26.3 59.6,25.7 59.6,25.2 59,25.2 			"/>
-		</g>
-		<g>
-			<rect x="80.04" y="24.59" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.0393 105.1025)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="76.2,24.7 76.2,25.3 76.8,25.3 77.3,25.3 77.3,24.7 76.8,24.7 			"/>
-		</g>
-		<g>
-			<rect x="73.52" y="24.64" transform="matrix(5.134305e-03 -1 1 5.134305e-03 48.5014 98.6335)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="69.57" y="24.65" transform="matrix(5.134305e-03 -1 1 5.134305e-03 44.5623 94.6831)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="67.99" y="24.63" transform="matrix(5.134305e-03 -1 1 5.134305e-03 43.0018 93.0898)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="61.16" y="24.59" transform="matrix(5.134305e-03 -1 1 5.134305e-03 36.2632 86.2221)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="59.48" y="24.57" transform="matrix(5.134305e-03 -1 1 5.134305e-03 34.6008 84.5275)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="80.6,24.2 80.6,24.7 81.2,24.7 81.7,24.7 81.8,24.2 81.2,24.2 			"/>
-		</g>
-		<g>
-			<polygon points="77.3,24.1 77.3,24.7 77.9,24.7 78.4,24.7 78.4,24.2 77.9,24.1 			"/>
-		</g>
-		<g>
-			<rect x="72.9" y="23.98" transform="matrix(5.134305e-03 -1 1 5.134305e-03 48.5423 97.3489)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="69.04" y="24.08" transform="matrix(5.134305e-03 -1 1 5.134305e-03 44.6043 93.5989)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="67.3,24.7 67.9,24.7 67.9,24.1 67.3,24.1 66.8,24.1 66.8,24.6 			"/>
-		</g>
-		<g>
-			<polygon points="62.9,24.6 62.9,24.1 62.3,24.1 61.8,24.1 61.8,24.6 62.3,24.6 			"/>
-		</g>
-		<g>
-			<rect x="60.15" y="24.05" transform="matrix(5.134305e-03 -1 1 5.134305e-03 35.7867 84.6725)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="81.76" y="23.52" transform="matrix(5.134305e-03 -1 1 5.134305e-03 57.8264 105.7553)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="78.4" y="23.69" transform="matrix(5.134305e-03 -1 1 5.134305e-03 54.3101 102.5693)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="64,24.1 64.6,24.1 65.1,24.1 65.7,24.1 66.2,24.1 66.8,24.1 66.8,23.5 66.2,23.5 65.7,23.5 65.1,23.5 64.6,23.5 
-				64,23.5 63.5,23.5 62.9,23.5 62.9,24.1 63.5,24.1 			"/>
-		</g>
-		<g>
-			<rect x="60.61" y="23.43" transform="matrix(5.134305e-03 -1 1 5.134305e-03 36.8701 84.518)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="79,23 79,23.6 79.5,23.6 80.1,23.6 80.1,23.1 79.5,23 			"/>
-		</g>
-		<g>
-			<rect x="76.3" y="22.92" transform="matrix(5.134305e-03 -1 1 5.134305e-03 52.9897 99.6957)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="72.9,23 72.9,22.5 72.3,22.5 72.3,23 72.3,23.6 72.3,24.1 72.9,24.1 72.9,23.6 			"/>
-		</g>
-		<g>
-			<polygon points="69.6,23.6 69.6,23 69.6,22.4 69,22.4 69,23 68.4,23 68.5,22.4 67.9,22.4 67.9,21.9 67.3,21.9 67.3,22.4 
-				66.8,22.4 66.2,22.4 65.7,22.4 65.1,22.4 64.6,22.4 64,22.4 63.5,22.4 62.9,22.4 62.4,22.4 62.3,23 62.9,23 63.5,23 64,23 
-				64.6,23 65.1,23 65.7,23 66.2,23 66.8,23 67.3,23 67.3,23.5 67.9,23.5 68.4,23.5 68.4,24.1 69,24.1 69,23.5 			"/>
-		</g>
-		<g>
-			<polygon points="61.2,23 61.2,23.5 61.8,23.5 62.3,23.5 62.3,23 61.8,23 			"/>
-		</g>
-		<g>
-			<rect x="80.03" y="22.52" transform="matrix(5.134305e-03 -1 1 5.134305e-03 57.0965 103.0237)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="75.78" y="22.35" transform="matrix(5.134305e-03 -1 1 5.134305e-03 53.0348 98.6083)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="77.92" y="21.84" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.6797 100.2473)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="75.15" y="21.89" transform="matrix(5.134305e-03 -1 1 5.134305e-03 52.8798 97.5249)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="73.4,21.9 73.4,21.4 72.9,21.4 72.9,21.9 72.9,22.5 73.4,22.5 			"/>
-		</g>
-		<g>
-			<rect x="68.53" y="21.74" transform="matrix(5.134305e-03 -1 1 5.134305e-03 46.4396 90.7545)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="77.4" y="21.28" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.7244 99.1622)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="67.91" y="21.27" transform="matrix(5.134305e-03 -1 1 5.134305e-03 46.2849 89.6707)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="79.45" y="20.87" transform="matrix(5.134305e-03 -1 1 5.134305e-03 58.1702 100.8023)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="76.68" y="20.71" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.5681 97.8796)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="73.42" y="20.89" transform="matrix(5.134305e-03 -1 1 5.134305e-03 52.1523 94.7938)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="68.57" y="20.65" transform="matrix(5.134305e-03 -1 1 5.134305e-03 47.5681 89.7142)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="78.92" y="20.2" transform="matrix(5.134305e-03 -1 1 5.134305e-03 58.3146 99.6165)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="76.15" y="20.25" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.5148 96.894)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="73.98" y="20.17" transform="matrix(5.134305e-03 -1 1 5.134305e-03 53.4324 94.6384)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="70.1,20.8 69.6,20.8 69.6,21.3 69,21.3 69,21.9 69.6,21.9 69.6,22.4 70.1,22.4 70.1,21.9 70.1,21.3 70.7,21.3 
-				70.7,20.8 70.7,20.2 70.1,20.2 			"/>
-		</g>
-		<g>
-			<rect x="69.04" y="20.23" transform="matrix(5.134305e-03 -1 1 5.134305e-03 48.4527 89.7598)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="67.95" y="20.19" transform="matrix(5.134305e-03 -1 1 5.134305e-03 47.413 88.6307)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="78.4" y="19.74" transform="matrix(5.134305e-03 -1 1 5.134305e-03 58.2585 98.6329)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="74.54" y="19.54" transform="matrix(5.134305e-03 -1 1 5.134305e-03 54.6153 94.5821)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="70.69" y="19.55" transform="matrix(5.134305e-03 -1 1 5.134305e-03 50.7784 90.7335)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="69.6" y="19.61" transform="matrix(5.134305e-03 -1 1 5.134305e-03 49.6376 89.7032)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="68.51" y="19.66" transform="matrix(5.134305e-03 -1 1 5.134305e-03 48.4975 88.6725)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="77.88" y="19.17" transform="matrix(5.134305e-03 -1 1 5.134305e-03 58.3033 97.5454)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="75.01" y="19.02" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.6008 94.5286)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="70.07" y="19.08" transform="matrix(5.134305e-03 -1 1 5.134305e-03 50.6235 89.6503)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="68.98" y="19.14" transform="matrix(5.134305e-03 -1 1 5.134305e-03 49.4831 88.6196)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="75.67" y="18.5" transform="matrix(5.134305e-03 -1 1 5.134305e-03 56.7848 94.6709)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="70.1,18.6 70.7,18.6 70.7,18 70.1,18 69.6,18 69,18 69,18.6 69.6,18.6 69.6,19.1 70.1,19.1 			"/>
-		</g>
-		<g>
-			<rect x="76.14" y="17.98" transform="matrix(5.134305e-03 -1 1 5.134305e-03 57.77 94.6179)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="72.38" y="17.98" transform="matrix(5.134305e-03 -1 1 5.134305e-03 54.0291 90.8649)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="71.8,18 71.2,18 71.2,18.6 70.7,18.6 70.7,19.1 71.2,19.1 71.2,19.7 71.8,19.7 71.8,19.1 72.3,19.1 72.4,18.6 
-				71.8,18.6 			"/>
-		</g>
-		<g>
-			<rect x="72.95" y="17.45" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.1161 90.9096)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="71.86" y="17.41" transform="matrix(5.134305e-03 -1 1 5.134305e-03 54.0754 89.7809)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="68.5,17.4 67.9,17.4 67.4,17.4 67.4,18 67.9,18 68.5,18 69,18 69,17.5 			"/>
-		</g>
-		<g>
-			<rect x="73.41" y="16.93" transform="matrix(5.134305e-03 -1 1 5.134305e-03 56.0985 90.8536)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="72.32" y="16.89" transform="matrix(5.134305e-03 -1 1 5.134305e-03 55.0591 89.7247)" width="0.6" height="0.6"/>
-		</g>
-	</g>
-	<g id="furippa_1_">
-		<g>
-			<polygon points="107.3,30.9 107.3,31.5 107.8,31.5 108.4,31.5 108.4,30.9 107.8,30.9 			"/>
-		</g>
-		<g>
-			<rect x="108.43" y="30.34" transform="matrix(5.134305e-03 -1 1 5.134305e-03 77.5309 139.205)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="116.8,29.3 116.8,28.7 116.3,28.7 116.3,28.2 116.3,27.6 115.7,27.6 115.7,27 115.7,26.5 115.2,26.5 114.6,26.5 
-				114.6,27 114.6,27.6 114.6,28.2 115.1,28.2 115.1,28.7 115.1,29.3 115.7,29.3 115.7,29.9 115.7,30.4 116.3,30.4 116.3,31 
-				116.3,31.5 116.8,31.5 117.4,31.5 117.4,31 117.4,30.4 117.4,29.9 116.8,29.9 			"/>
-		</g>
-		<g>
-			<polygon points="108.4,29.3 108.4,28.7 107.8,28.7 107.8,29.3 107.8,29.8 108.4,29.8 			"/>
-		</g>
-		<g>
-			<polygon points="107.3,29.3 107.3,28.7 106.7,28.7 106.7,29.2 106.7,29.8 107.3,29.8 			"/>
-		</g>
-		<g>
-			<polygon points="109,29.3 109,29.8 109,30.4 109.5,30.4 109.5,29.8 109.5,29.3 109.5,28.7 109,28.7 			"/>
-		</g>
-		<g>
-			<polygon points="121.9,28.2 121.3,28.2 120.8,28.2 120.2,28.2 119.6,28.2 119.1,28.2 119.1,28.7 119.1,29.3 119.6,29.3 
-				120.2,29.3 120.8,29.3 121.3,29.3 121.9,29.3 122.4,29.3 122.4,28.8 122.4,28.2 			"/>
-		</g>
-		<g>
-			<polygon points="103.4,28.7 103.4,28.1 103.4,27.5 103.4,27 103.4,26.4 102.8,26.4 102.2,26.4 102.2,27 102.2,27.5 102.2,28.1 
-				102.2,28.7 102.8,28.7 			"/>
-		</g>
-		<g>
-			<polygon points="112.4,26.5 112.3,27 112.3,27.6 111.8,27.6 111.8,28.2 111.8,28.7 111.2,28.7 111.2,29.3 111.2,29.8 110.7,29.8 
-				110.6,30.4 110.6,31 110.6,31.5 111.2,31.5 111.8,31.5 111.8,31 111.8,30.4 112.3,30.4 112.3,29.8 112.3,29.3 112.9,29.3 
-				112.9,28.7 112.9,28.2 113.5,28.2 113.5,27.6 113.5,27 113.5,26.5 112.9,26.5 			"/>
-		</g>
-		<g>
-			<polygon points="104.5,26.4 104.5,27 104.5,27.6 104.5,28.1 104.5,28.7 104.5,29.2 103.9,29.2 103.9,29.8 103.4,29.8 103.3,30.4 
-				102.8,30.4 102.2,30.3 102.2,30.9 102.2,31.5 102.8,31.5 103.3,31.5 103.9,31.5 103.9,30.9 104.5,30.9 104.5,30.4 105,30.4 
-				105,29.8 105.6,29.8 105.6,29.2 105.6,28.7 105.6,28.1 105.6,27.6 105.6,27 105.6,26.4 105.1,26.4 			"/>
-		</g>
-		<g>
-			<polygon points="100,26.4 99.4,26.4 98.9,26.4 98.3,26.4 97.8,26.4 97.2,26.4 96.6,26.4 96.1,26.4 95.5,26.4 95.5,26.9 
-				95.5,27.5 96.1,27.5 96.6,27.5 97.2,27.5 97.8,27.5 98.3,27.5 98.9,27.5 99.4,27.5 100,27.5 100,28.1 100,28.7 99.4,28.6 
-				99.4,29.2 98.9,29.2 98.9,29.8 98.3,29.8 97.7,29.8 97.7,30.3 97.2,30.3 96.6,30.3 96.1,30.3 95.5,30.3 95.5,30.9 95.5,31.4 
-				96,31.4 96.6,31.4 97.2,31.4 97.7,31.4 98.3,31.5 98.3,30.9 98.9,30.9 99.4,30.9 99.4,30.3 100,30.3 100,29.8 100.5,29.8 
-				100.5,29.2 101.1,29.2 101.1,28.7 101.1,28.1 101.1,27.5 101.1,27 101.1,26.4 100.6,26.4 			"/>
-		</g>
-		<g>
-			<path d="M117.4,25.9h-0.6v0.6v0.6v0.6h0.6h0.6h0.6v-0.6v-0.6v-0.6H118H117.4z M118,27.1h-0.6v-0.6h0.6V27.1z"/>
-		</g>
-	</g>
-	<g id="waves_1_">
-		<g>
-			<polygon points="96.2,19.7 96.2,20.3 96.8,20.3 96.8,19.7 96.8,19.1 96.2,19.1 			"/>
-		</g>
-		<g>
-			<polygon points="94,19.7 94,20.3 94.5,20.3 94.5,19.7 94.5,19.1 94,19.1 			"/>
-		</g>
-		<g>
-			<polygon points="98.5,18 98.5,18.6 98.5,19.2 98.5,19.7 98.5,20.3 99,20.3 99,19.7 99,19.2 99,18.6 99,18 			"/>
-		</g>
-		<g>
-			<polygon points="96.2,18 95.7,18 95.7,18.6 95.7,19.1 96.2,19.1 96.2,18.6 			"/>
-		</g>
-		<g>
-			<rect x="93.43" y="18.64" transform="matrix(5.134305e-03 -1 1 5.134305e-03 74.3037 112.5742)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="92.9,18 92.3,18 92.3,18.6 92.9,18.6 93.4,18.6 93.4,18 			"/>
-		</g>
-		<g>
-			<polygon points="98.5,16.9 97.9,16.9 97.9,17.5 97.9,18 98.5,18 98.5,17.5 			"/>
-		</g>
-		<g>
-			<rect x="95.21" y="17.44" transform="matrix(5.134305e-03 -1 1 5.134305e-03 77.2823 113.1613)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<rect x="94.49" y="16.83" transform="matrix(5.134305e-03 -1 1 5.134305e-03 77.1711 111.8337)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="97.9,15.8 97.4,15.8 97.4,16.3 97.4,16.9 97.9,16.9 97.9,16.3 			"/>
-		</g>
-		<g>
-			<polygon points="94,16.3 93.4,16.3 93.4,16.9 94,16.9 94.5,16.9 94.5,16.3 			"/>
-		</g>
-		<g>
-			<polygon points="92.9,15.8 92.3,15.8 92.3,16.3 92.9,16.3 93.4,16.3 93.4,15.8 			"/>
-		</g>
-		<g>
-			<rect x="96.88" y="15.11" transform="matrix(5.134305e-03 -1 1 5.134305e-03 81.2768 112.5089)" width="0.6" height="0.6"/>
-		</g>
-		<g>
-			<polygon points="96.2,14.7 95.7,14.6 95.7,15.2 96.2,15.2 96.8,15.2 96.8,14.7 			"/>
-		</g>
-		<g>
-			<polygon points="95.1,14.1 94.6,14.1 94.6,14.6 95.1,14.6 95.7,14.6 95.7,14.1 			"/>
-		</g>
-		<g>
-			<polygon points="94,13.5 93.4,13.5 92.9,13.5 92.3,13.5 92.3,14.1 92.9,14.1 93.4,14.1 94,14.1 94.6,14.1 94.6,13.5 			"/>
-		</g>
-	</g>
-	<g class="st3">
-		<path class="st4" d="M93.5,71.9c-2.2,0-4.5,0-6.7,0v-0.8h0.8c0-0.4,0-1.3,0-1.7h0.8c0-0.4,0-1.3,0-1.7h0.8c0-0.7,0-1.8,0-2.5
-			c-0.4,0-1.3,0-1.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7c3.3,0,6.7,0,10.1,0v-0.8h0.8v-0.8C94.7,71.9,93.9,71.9,93.5,71.9z"/>
-		<path class="st4" d="M101,68.6v-0.8h0.8c0-0.7,0-1.8,0-2.5c-0.4,0-1.3,0-1.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0V73h0.8c0-0.4,0-1.3,0-1.7h0.8
-			c0-0.4,0-1.3,0-1.7h0.8V68.6z"/>
-		<path class="st4" d="M127.8,67.7h0.8v-0.8h0.8c0-0.4,0-1.3,0-1.7c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7
-			h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0v-0.8h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8
-			c2.8,0,5.6,0,8.4,0v-0.8h0.8v-0.8h0.8C127.8,68.8,127.8,67.7,127.8,67.7z M126.1,67.7h-0.8v0.8c-2.2,0-4.5,0-6.7,0v-0.8h0.8v-0.8
-			c2.2,0,4.5,0,6.7,0V67.7z"/>
-		<path class="st4" d="M114.4,67.7h0.8v-0.8h0.8c0-0.4,0-1.3,0-1.7c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7
-			h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H101c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0v-0.8h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8
-			c2.8,0,5.6,0,8.4,0v-0.8h0.8v-0.8h0.8L114.4,67.7L114.4,67.7z M112.7,67.7h-0.8v0.8c-2.2,0-4.5,0-6.7,0v-0.8h0.8v-0.8
-			c2.2,0,4.5,0,6.7,0V67.7z"/>
-		<path class="st4" d="M142.1,66.9v-0.8h0.8v-0.8c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H128c0,0.4,0,1.3,0,1.7c3.6,0,7.3,0,10.9,0V73h0.8v-0.8c-3.1,0-6.2,0-9.2,0v-0.8h0.8
-			v-0.8c2.5,0,5.1,0,7.5,0v-0.8h0.8V69c-2.5,0-5.1,0-7.5,0v-0.8h0.8v-0.8C135.9,66.9,139,66.9,142.1,66.9z"/>
-		<path class="st4" d="M85.1,66.9v-0.8h0.8v-0.8c-4.2,0-8.4,0-12.6,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H70c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0v-0.8h0.8
-			c0-0.4,0-1.3,0-1.7h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8c2.5,0,5.1,0,7.5,0v-0.8h0.8v-0.8c-2.5,0-5.1,0-7.5,0v-0.8H75v-0.8
-			C78.3,66.9,81.7,66.9,85.1,66.9z"/>
-		<path class="st4" d="M156.3,65.2c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H143c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0v-0.8h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8c1.9,0,3.9,0,5.9,0v0.8h0.8V72
-			h0.8v0.8h0.8v0.8h0.8v0.8h0.8v0.8c0.4,0,1.3,0,1.7,0c0-0.4,0-1.3,0-1.7h-0.8v-0.8h-0.8v-0.8h-0.8v-0.8H153c0-0.4,0-1.3,0-1.7h0.8
-			v-0.8h0.8v-0.8h0.8V67h0.8v-0.8h0.8v-0.8h-0.7L156.3,65.2L156.3,65.2z M153,67.7h-0.8v0.8c-2.2,0-4.5,0-6.7,0v-0.8h0.8v-0.8
-			c2.2,0,4.5,0,6.7,0V67.7z"/>
-	</g>
-	<g>
-		<path class="st5" d="M93.2,72c-2.2,0-4.5,0-6.7,0v-0.8h0.8c0-0.4,0-1.3,0-1.7h0.8c0-0.4,0-1.3,0-1.7h0.8c0-0.7,0-1.8,0-2.5
-			c-0.4,0-1.3,0-1.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H84
-			c0,0.4,0,1.3,0,1.7c3.3,0,6.7,0,10,0V73h0.8v-1C94.5,72,93.7,72,93.2,72z"/>
-		<path class="st5" d="M100.8,68.7v-0.8h0.8c0-0.7,0-1.8,0-2.5c-0.4,0-1.3,0-1.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0v-0.8h0.8c0-0.4,0-1.3,0-1.7h0.8
-			c0-0.4,0-1.3,0-1.7h0.8V68.7z"/>
-		<path class="st5" d="M127.6,67.8h0.8V67h0.8c0-0.4,0-1.3,0-1.7c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7
-			h-0.8c0,0.4,0,1.3,0,1.7H115c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0V73h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8
-			c2.8,0,5.6,0,8.4,0v-0.8h0.8v-0.8h0.8v-1.1H127.6z M125.9,67.8h-0.8v0.8c-2.2,0-4.5,0-6.7,0v-0.8h0.8V67c2.2,0,4.5,0,6.7,0V67.8z"
-			/>
-		<path class="st5" d="M114.2,67.8h0.8V67h0.8c0-0.4,0-1.3,0-1.7c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7
-			h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0V73h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8
-			c2.8,0,5.6,0,8.4,0v-0.8h0.8v-0.8h0.8C114.2,68.9,114.2,67.8,114.2,67.8z M112.5,67.8h-0.8v0.8c-2.2,0-4.5,0-6.7,0v-0.8h0.8V67
-			c2.2,0,4.5,0,6.7,0V67.8z"/>
-		<path class="st5" d="M141.8,67v-0.8h0.8v-0.8c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7c3.6,0,7.3,0,10.9,0v-0.8h0.8V72c-3,0-6.2,0-9.2,0v-0.8h0.8
-			v-0.8c2.5,0,5,0,7.5,0v-0.8h0.8v-0.8c-2.5,0-5,0-7.5,0V68h0.8v-1C135.7,67,138.8,67,141.8,67z"/>
-		<path class="st5" d="M84.9,67v-0.8h0.8v-0.8c-4.2,0-8.4,0-12.6,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8
-			c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H69c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0v-0.8h0.8
-			c0-0.4,0-1.3,0-1.7h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8c2.5,0,5,0,7.5,0v-0.8h0.8V69c-2.5,0-5,0-7.5,0v-0.8h0.8V67
-			C78.2,67,81.6,67,84.9,67z"/>
-		<path class="st5" d="M156.1,65.3c-3.9,0-7.8,0-11.7,0c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7h-0.8c0,0.4,0,1.3,0,1.7H142
-			c0,0.4,0,1.3,0,1.7h-1c0,0.4,0,1.3,0,1.7c0.4,0,1.3,0,1.7,0V73h0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8c1.9,0,3.9,0,5.9,0v0.8h0.8V72h0.8
-			v0.8h0.8v0.8h0.8v0.8h0.8v0.8c0.4,0,1.3,0,1.7,0c0-0.4,0-1.3,0-1.7h-0.8v-0.8h-0.8V72h-0.8v-0.8h-0.8c0-0.4,0-1.3,0-1.7h0.8v-0.8
-			h0.8v-0.8h0.8V67h0.8v-0.8h0.8v-0.8h-0.6V65.3z M152.7,67.8h-0.8v0.8c-2.2,0-4.5,0-6.7,0v-0.8h0.8V67c2.2,0,4.5,0,6.7,0V67.8z"/>
-	</g>
-</g>
-</svg>

BIN
non_catalog_apps/gb-pokemon-trading/docs/images/youtube.png


+ 250 - 151
non_catalog_apps/gb-pokemon-trading/pokemon_app.cpp

@@ -1,160 +1,205 @@
 #include "pokemon_app.h"
 
 struct pokemon_lut pokemon_table[] = {
-    {"Bulbasaur", &I_bulbasaur, 0x99},
-    {"Ivysaur", &I_ivysaur, 0x09},
-    {"Venusaur", &I_venusaur, 0x9A},
-    {"Charmander", &I_charmander, 0xB0},
-    {"Charmeleon", &I_charmeleon, 0xB2},
-    {"Charizard", &I_charizard, 0xB4},
-    {"Squirtle", &I_squirtle, 0xB1},
-    {"Wartortle", &I_wartortle, 0xB3},
-    {"Blastoise", &I_blastoise, 0x1C},
-    {"Caterpie", &I_caterpie, 0x7B},
-    {"Metapod", &I_metapod, 0x7C},
-    {"Butterfree", &I_butterfree, 0x7D},
-    {"Weedle", &I_weedle, 0x70},
-    {"Kakuna", &I_kakuna, 0x71},
-    {"Beedrill", &I_beedrill, 0x72},
-    {"Pidgey", &I_pidgey, 0x24},
-    {"Pidgeotto", &I_pidgeotto, 0x96},
-    {"Pidgeot", &I_pidgeot, 0x97},
-    {"Rattata", &I_rattata, 0xA5},
-    {"Raticate", &I_raticate, 0xA6},
-    {"Spearow", &I_spearow, 0x05},
-    {"Fearow", &I_fearow, 0x23},
-    {"Ekans", &I_ekans, 0x6C},
-    {"Arbok", &I_arbok, 0x2D},
-    {"Pikachu", &I_pikachu, 0x54},
-    {"Raichu", &I_raichu, 0x55},
-    {"Sandshrew", &I_sandshrew, 0x60},
-    {"Sandslash", &I_sandslash, 0x61},
-    {"Nidoran ♀", &I_nidoranf, 0x0F},
-    {"Nidorina", &I_nidorina, 0xA8},
-    {"Nidoqueen", &I_nidoqueen, 0x10},
-    {"Nidoran ♂", &I_nidoranm, 0x03},
-    {"Nidorino", &I_nidorino, 0xA7},
-    {"Nidoking", &I_nidoking, 0x07},
-    {"Clefairy", &I_clefairy, 0x04},
-    {"Clefable", &I_clefable, 0x8E},
-    {"Vulpix", &I_vulpix, 0x52},
-    {"Ninetales", &I_ninetales, 0x53},
-    {"Jigglypuff", &I_jigglypuff, 0x64},
-    {"Wigglytuff", &I_wigglytuff, 0x65},
-    {"Zubat", &I_zubat, 0x6B},
-    {"Golbat", &I_golbat, 0x82},
-    {"Oddish", &I_oddish, 0xB9},
-    {"Gloom", &I_gloom, 0xBA},
-    {"Vileplume", &I_vileplume, 0xBB},
-    {"Paras", &I_paras, 0x6D},
-    {"Parasect", &I_parasect, 0x2E},
-    {"Venonat", &I_venonat, 0x41},
-    {"Venomoth", &I_venomoth, 0x77},
-    {"Diglett", &I_diglett, 0x3B},
-    {"Dugtrio", &I_dugtrio, 0x76},
-    {"Meowth", &I_meowth, 0x4D},
-    {"Persian", &I_persian, 0x90},
-    {"Psyduck", &I_psyduck, 0x2F},
-    {"Golduck", &I_golduck, 0x80},
-    {"Mankey", &I_mankey, 0x39},
-    {"Primeape", &I_primeape, 0x75},
-    {"Growlithe", &I_growlithe, 0x21},
-    {"Arcanine", &I_arcanine, 0x14},
-    {"Poliwag", &I_poliwag, 0x47},
-    {"Poliwhirl", &I_poliwhirl, 0x6E},
-    {"Poliwrath", &I_poliwrath, 0x6F},
-    {"Abra", &I_abra, 0x94},
-    {"Kadabra", &I_kadabra, 0x26},
-    {"Alakazam", &I_alakazam, 0x95},
-    {"Machop", &I_machop, 0x6A},
-    {"Machoke", &I_machoke, 0x29},
-    {"Machamp", &I_machamp, 0x7E},
-    {"Bellsprout", &I_bellsprout, 0xBC},
-    {"Weepinbell", &I_weepinbell, 0xBD},
-    {"Victreebel", &I_victreebel, 0xBE},
-    {"Tentacool", &I_tentacool, 0x18},
-    {"Tentacruel", &I_tentacruel, 0x9B},
-    {"Geodude", &I_geodude, 0xA9},
-    {"Graveler", &I_graveler, 0x27},
-    {"Golem", &I_golem, 0x31},
-    {"Ponyta", &I_ponyta, 0xA3},
-    {"Rapidash", &I_rapidash, 0xA4},
-    {"Slowpoke", &I_slowpoke, 0x25},
-    {"Slowbro", &I_slowbro, 0x08},
-    {"Magnemite", &I_magnemite, 0xAD},
-    {"Magneton", &I_magneton, 0x36},
-    {"Farfetch'd", &I_farfetchd, 0x40},
-    {"Doduo", &I_doduo, 0x46},
-    {"Dodrio", &I_dodrio, 0x74},
-    {"Seel", &I_seel, 0x3A},
-    {"Dewgong", &I_dewgong, 0x78},
-    {"Grimer", &I_grimer, 0x0D},
-    {"Muk", &I_muk, 0x88},
-    {"Shellder", &I_shellder, 0x17},
-    {"Cloyster", &I_cloyster, 0x8B},
-    {"Gastly", &I_gastly, 0x19},
-    {"Haunter", &I_haunter, 0x93},
-    {"Gengar", &I_gengar, 0x0E},
-    {"Onix", &I_onix, 0x22},
-    {"Drowzee", &I_drowzee, 0x30},
-    {"Hypno", &I_hypno, 0x81},
-    {"Krabby", &I_krabby, 0x4E},
-    {"Kingler", &I_kingler, 0x8A},
-    {"Voltorb", &I_voltorb, 0x06},
-    {"Electrode", &I_electrode, 0x8D},
-    {"Exeggcute", &I_exeggcute, 0x0C},
-    {"Exeggutor", &I_exeggutor, 0x0A},
-    {"Cubone", &I_cubone, 0x11},
-    {"Marowak", &I_marowak, 0x91},
-    {"Hitmonlee", &I_hitmonlee, 0x2B},
-    {"Hitmonchan", &I_hitmonchan, 0x2C},
-    {"Lickitung", &I_lickitung, 0x0B},
-    {"Koffing", &I_koffing, 0x37},
-    {"Weezing", &I_weezing, 0x8F},
-    {"Rhyhorn", &I_rhyhorn, 0x12},
-    {"Rhydon", &I_rhydon, 0x01},
-    {"Chansey", &I_chansey, 0x28},
-    {"Tangela", &I_tangela, 0x1E},
-    {"Kangaskhan", &I_kangaskhan, 0x02},
-    {"Horsea", &I_horsea, 0x5C},
-    {"Seadra", &I_seadra, 0x5D},
-    {"Goldeen", &I_goldeen, 0x9D},
-    {"Seaking", &I_seaking, 0x9E},
-    {"Staryu", &I_staryu, 0x1B},
-    {"Starmie", &I_starmie, 0x98},
-    {"Mr. Mime", &I_mr_mime, 0x2A},
-    {"Scyther", &I_scyther, 0x1A},
-    {"Jynx", &I_jynx, 0x48},
-    {"Electabuzz", &I_electabuzz, 0x35},
-    {"Magmar", &I_magmar, 0x33},
-    {"Pinsir", &I_pinsir, 0x1D},
-    {"Tauros", &I_tauros, 0x3C},
-    {"Magikarp", &I_magikarp, 0x85},
-    {"Gyarados", &I_gyarados, 0x16},
-    {"Lapras", &I_lapras, 0x13},
-    {"Ditto", &I_ditto, 0x4C},
-    {"Eevee", &I_eevee, 0x66},
-    {"Vaporeon", &I_vaporeon, 0x69},
-    {"Jolteon", &I_jolteon, 0x68},
-    {"Flareon", &I_flareon, 0x67},
-    {"Porygon", &I_porygon, 0xAA},
-    {"Omanyte", &I_omanyte, 0x62},
-    {"Omastar", &I_omastar, 0x63},
-    {"Kabuto", &I_kabuto, 0x5A},
-    {"Kabutops", &I_kabutops, 0x5B},
-    {"Aerodactyl", &I_aerodactyl, 0xAB},
-    {"Snorlax", &I_snorlax, 0x84},
-    {"Articuno", &I_articuno, 0x4A},
-    {"Zapdos", &I_zapdos, 0x4B},
-    {"Moltres", &I_moltres, 0x49},
-    {"Dratini", &I_dratini, 0x58},
-    {"Dragonair", &I_dragonair, 0x59},
-    {"Dragonite", &I_dragonite, 0x42},
-    {"Mewtwo", &I_mewtwo, 0x83},
-    {"Mew", &I_mew, 0x15},
+    {"Bulbasaur", &I_bulbasaur, 0x99, 0x16, 0x03, 1, 45, 49, 49, 45, 65},
+    {"Ivysaur", &I_ivysaur, 0x09, 0x16, 0x03, 1, 60, 62, 63, 60, 80},
+    {"Venusaur", &I_venusaur, 0x9A, 0x16, 0x03, 1, 80, 82, 83, 80, 100},
+    {"Charmander", &I_charmander, 0xB0, 0x14, 0xFF, 1, 39, 52, 43, 65, 50},
+    {"Charmeleon", &I_charmeleon, 0xB2, 0x14, 0xFF, 1, 58, 64, 58, 80, 65},
+    {"Charizard", &I_charizard, 0xB4, 0x14, 0x02, 1, 78, 84, 78, 100, 85},
+    {"Squirtle", &I_squirtle, 0xB1, 0x15, 0xFF, 1, 44, 48, 65, 43, 50},
+    {"Wartortle", &I_wartortle, 0xB3, 0x15, 0xFF, 1, 59, 63, 80, 58, 65},
+    {"Blastoise", &I_blastoise, 0x1C, 0x15, 0xFF, 1, 79, 83, 100, 78, 85},
+    {"Caterpie", &I_caterpie, 0x7B, 0x07, 0xFF, 2, 45, 30, 35, 45, 20},
+    {"Metapod", &I_metapod, 0x7C, 0x07, 0xFF, 2, 50, 20, 55, 30, 25},
+    {"Butterfree", &I_butterfree, 0x7D, 0x07, 0x02, 2, 60, 45, 50, 70, 80},
+    {"Weedle", &I_weedle, 0x70, 0x07, 0x03, 2, 40, 35, 30, 50, 20},
+    {"Kakuna", &I_kakuna, 0x71, 0x07, 0x03, 2, 45, 25, 50, 35, 25},
+    {"Beedrill", &I_beedrill, 0x72, 0x07, 0x03, 2, 65, 80, 40, 75, 45},
+    {"Pidgey", &I_pidgey, 0x24, 0x00, 0x02, 1, 40, 45, 40, 56, 35},
+    {"Pidgeotto", &I_pidgeotto, 0x96, 0x00, 0x02, 1, 63, 60, 55, 71, 50},
+    {"Pidgeot", &I_pidgeot, 0x97, 0x00, 0x02, 1, 83, 80, 75, 91, 70},
+    {"Rattata", &I_rattata, 0xA5, 0x00, 0xFF, 2, 30, 56, 35, 72, 25},
+    {"Raticate", &I_raticate, 0xA6, 0x00, 0xFF, 2, 55, 81, 60, 97, 50},
+    {"Spearow", &I_spearow, 0x05, 0x00, 0x02, 2, 40, 60, 30, 70, 31},
+    {"Fearow", &I_fearow, 0x23, 0x00, 0x02, 2, 65, 90, 65, 100, 61},
+    {"Ekans", &I_ekans, 0x6C, 0x03, 0xFF, 2, 35, 60, 44, 55, 40},
+    {"Arbok", &I_arbok, 0x2D, 0x03, 0xFF, 2, 60, 85, 69, 80, 65},
+    {"Pikachu", &I_pikachu, 0x54, 0x17, 0xFF, 2, 35, 55, 30, 90, 50},
+    {"Raichu", &I_raichu, 0x55, 0x17, 0xFF, 2, 60, 90, 55, 100, 90},
+    {"Sandshrew", &I_sandshrew, 0x60, 0x04, 0xFF, 2, 50, 75, 85, 40, 30},
+    {"Sandslash", &I_sandslash, 0x61, 0x04, 0xFF, 2, 75, 100, 110, 65, 55},
+    {"Nidoran@", &I_nidoranf, 0x0F, 0x03, 0xFF, 1, 55, 47, 52, 41, 40},
+    {"Nidorina", &I_nidorina, 0xA8, 0x03, 0xFF, 1, 70, 62, 67, 56, 55},
+    {"Nidoqueen", &I_nidoqueen, 0x10, 0x03, 0x04, 1, 90, 82, 87, 76, 75},
+    {"Nidoran!", &I_nidoranm, 0x03, 0x03, 0xFF, 1, 46, 57, 40, 50, 40},
+    {"Nidorino", &I_nidorino, 0xA7, 0x03, 0xFF, 1, 61, 72, 57, 65, 55},
+    {"Nidoking", &I_nidoking, 0x07, 0x03, 0x04, 1, 81, 92, 77, 85, 75},
+    {"Clefairy", &I_clefairy, 0x04, 0x00, 0xFF, 3, 70, 45, 48, 35, 60},
+    {"Clefable", &I_clefable, 0x8E, 0x00, 0xFF, 3, 95, 70, 73, 60, 85},
+    {"Vulpix", &I_vulpix, 0x52, 0x14, 0xFF, 2, 38, 41, 40, 65, 65},
+    {"Ninetales", &I_ninetales, 0x53, 0x14, 0xFF, 2, 73, 76, 75, 100, 100},
+    {"Jigglypuff", &I_jigglypuff, 0x64, 0x00, 0xFF, 3, 115, 45, 20, 20, 25},
+    {"Wigglytuff", &I_wigglytuff, 0x65, 0x00, 0xFF, 3, 140, 70, 45, 45, 50},
+    {"Zubat", &I_zubat, 0x6B, 0x03, 0x02, 2, 40, 45, 35, 55, 40},
+    {"Golbat", &I_golbat, 0x82, 0x03, 0x02, 2, 75, 80, 70, 90, 75},
+    {"Oddish", &I_oddish, 0xB9, 0x16, 0x03, 1, 45, 50, 55, 30, 75},
+    {"Gloom", &I_gloom, 0xBA, 0x16, 0x03, 1, 60, 65, 70, 40, 85},
+    {"Vileplume", &I_vileplume, 0xBB, 0x16, 0x03, 1, 75, 80, 85, 50, 100},
+    {"Paras", &I_paras, 0x6D, 0x07, 0x16, 2, 35, 70, 55, 25, 55},
+    {"Parasect", &I_parasect, 0x2E, 0x07, 0x16, 2, 60, 95, 80, 30, 80},
+    {"Venonat", &I_venonat, 0x41, 0x07, 0x03, 2, 60, 55, 50, 45, 40},
+    {"Venomoth", &I_venomoth, 0x77, 0x07, 0x03, 2, 70, 65, 60, 90, 90},
+    {"Diglett", &I_diglett, 0x3B, 0x04, 0xFF, 2, 10, 55, 25, 95, 45},
+    {"Dugtrio", &I_dugtrio, 0x76, 0x04, 0xFF, 2, 35, 80, 50, 120, 70},
+    {"Meowth", &I_meowth, 0x4D, 0x00, 0xFF, 2, 40, 45, 35, 90, 40},
+    {"Persian", &I_persian, 0x90, 0x00, 0xFF, 2, 65, 70, 60, 115, 65},
+    {"Psyduck", &I_psyduck, 0x2F, 0x15, 0xFF, 2, 50, 52, 48, 55, 50},
+    {"Golduck", &I_golduck, 0x80, 0x15, 0xFF, 2, 80, 82, 78, 85, 80},
+    {"Mankey", &I_mankey, 0x39, 0x01, 0xFF, 2, 40, 80, 35, 70, 35},
+    {"Primeape", &I_primeape, 0x75, 0x01, 0xFF, 2, 65, 105, 60, 95, 60},
+    {"Growlithe", &I_growlithe, 0x21, 0x14, 0xFF, 0, 55, 70, 45, 60, 50},
+    {"Arcanine", &I_arcanine, 0x14, 0x14, 0xFF, 0, 90, 110, 80, 95, 80},
+    {"Poliwag", &I_poliwag, 0x47, 0x15, 0xFF, 1, 40, 50, 40, 90, 40},
+    {"Poliwhirl", &I_poliwhirl, 0x6E, 0x15, 0xFF, 1, 65, 65, 65, 90, 50},
+    {"Poliwrath", &I_poliwrath, 0x6F, 0x15, 0x01, 1, 90, 85, 95, 70, 70},
+    {"Abra", &I_abra, 0x94, 0x18, 0xFF, 1, 25, 20, 15, 90, 105},
+    {"Kadabra", &I_kadabra, 0x26, 0x18, 0xFF, 1, 40, 35, 30, 105, 120},
+    {"Alakazam", &I_alakazam, 0x95, 0x18, 0xFF, 1, 55, 50, 45, 120, 135},
+    {"Machop", &I_machop, 0x6A, 0x01, 0xFF, 1, 70, 80, 50, 35, 35},
+    {"Machoke", &I_machoke, 0x29, 0x01, 0xFF, 1, 80, 100, 70, 45, 50},
+    {"Machamp", &I_machamp, 0x7E, 0x01, 0xFF, 1, 90, 130, 80, 55, 65},
+    {"Bellsprout", &I_bellsprout, 0xBC, 0x16, 0x03, 1, 50, 75, 35, 40, 70},
+    {"Weepinbell", &I_weepinbell, 0xBD, 0x16, 0x03, 1, 65, 90, 50, 55, 85},
+    {"Victreebel", &I_victreebel, 0xBE, 0x16, 0x03, 1, 80, 105, 65, 70, 100},
+    {"Tentacool", &I_tentacool, 0x18, 0x15, 0x03, 0, 40, 40, 35, 70, 100},
+    {"Tentacruel", &I_tentacruel, 0x9B, 0x15, 0x03, 0, 80, 70, 65, 100, 120},
+    {"Geodude", &I_geodude, 0xA9, 0x05, 0x04, 1, 40, 80, 100, 20, 30},
+    {"Graveler", &I_graveler, 0x27, 0x05, 0x04, 1, 55, 95, 115, 35, 45},
+    {"Golem", &I_golem, 0x31, 0x05, 0x04, 1, 80, 110, 130, 45, 55},
+    {"Ponyta", &I_ponyta, 0xA3, 0x14, 0xFF, 2, 50, 85, 55, 90, 65},
+    {"Rapidash", &I_rapidash, 0xA4, 0x14, 0xFF, 2, 65, 100, 70, 105, 80},
+    {"Slowpoke", &I_slowpoke, 0x25, 0x15, 0x18, 2, 90, 65, 65, 15, 40},
+    {"Slowbro", &I_slowbro, 0x08, 0x15, 0x18, 2, 95, 75, 110, 30, 80},
+    {"Magnemite", &I_magnemite, 0xAD, 0x17, 0xFF, 2, 25, 35, 70, 45, 95},
+    {"Magneton", &I_magneton, 0x36, 0x17, 0xFF, 2, 50, 60, 95, 70, 120},
+    {"Farfetch'd", &I_farfetchd, 0x40, 0x00, 0x02, 2, 52, 65, 55, 60, 58},
+    {"Doduo", &I_doduo, 0x46, 0x00, 0x02, 2, 35, 85, 45, 75, 35},
+    {"Dodrio", &I_dodrio, 0x74, 0x00, 0x02, 2, 60, 110, 70, 100, 60},
+    {"Seel", &I_seel, 0x3A, 0x15, 0xFF, 2, 65, 45, 55, 45, 70},
+    {"Dewgong", &I_dewgong, 0x78, 0x15, 0x19, 2, 90, 70, 80, 70, 95},
+    {"Grimer", &I_grimer, 0x0D, 0x03, 0xFF, 2, 80, 80, 50, 25, 40},
+    {"Muk", &I_muk, 0x88, 0x03, 0xFF, 2, 105, 105, 75, 50, 65},
+    {"Shellder", &I_shellder, 0x17, 0x15, 0xFF, 0, 30, 65, 100, 40, 45},
+    {"Cloyster", &I_cloyster, 0x8B, 0x15, 0x19, 0, 50, 95, 180, 70, 85},
+    {"Gastly", &I_gastly, 0x19, 0x08, 0x03, 1, 30, 35, 30, 80, 100},
+    {"Haunter", &I_haunter, 0x93, 0x08, 0x03, 1, 45, 50, 45, 95, 115},
+    {"Gengar", &I_gengar, 0x0E, 0x08, 0x03, 1, 60, 65, 60, 110, 130},
+    {"Onix", &I_onix, 0x22, 0x05, 0x04, 2, 35, 45, 160, 70, 30},
+    {"Drowzee", &I_drowzee, 0x30, 0x18, 0xFF, 2, 60, 48, 45, 42, 90},
+    {"Hypno", &I_hypno, 0x81, 0x18, 0xFF, 2, 85, 73, 70, 67, 115},
+    {"Krabby", &I_krabby, 0x4E, 0x15, 0xFF, 2, 30, 105, 90, 50, 25},
+    {"Kingler", &I_kingler, 0x8A, 0x15, 0xFF, 2, 55, 130, 115, 75, 50},
+    {"Voltorb", &I_voltorb, 0x06, 0x17, 0xFF, 2, 40, 30, 50, 100, 55},
+    {"Electrode", &I_electrode, 0x8D, 0x17, 0xFF, 2, 60, 50, 70, 140, 80},
+    {"Exeggcute", &I_exeggcute, 0x0C, 0x16, 0x18, 0, 60, 40, 80, 40, 60},
+    {"Exeggutor", &I_exeggutor, 0x0A, 0x16, 0x18, 0, 95, 95, 85, 55, 125},
+    {"Cubone", &I_cubone, 0x11, 0x04, 0xFF, 2, 50, 50, 95, 35, 40},
+    {"Marowak", &I_marowak, 0x91, 0x04, 0xFF, 2, 60, 80, 110, 45, 50},
+    {"Hitmonlee", &I_hitmonlee, 0x2B, 0x01, 0xFF, 2, 50, 120, 53, 87, 35},
+    {"Hitmonchan", &I_hitmonchan, 0x2C, 0x01, 0xFF, 2, 50, 105, 79, 76, 35},
+    {"Lickitung", &I_lickitung, 0x0B, 0x00, 0xFF, 2, 90, 55, 75, 30, 60},
+    {"Koffing", &I_koffing, 0x37, 0x03, 0xFF, 2, 40, 65, 95, 35, 60},
+    {"Weezing", &I_weezing, 0x8F, 0x03, 0xFF, 2, 65, 90, 120, 60, 85},
+    {"Rhyhorn", &I_rhyhorn, 0x12, 0x04, 0x05, 0, 80, 85, 95, 25, 30},
+    {"Rhydon", &I_rhydon, 0x01, 0x04, 0x05, 0, 105, 130, 120, 40, 45},
+    {"Chansey", &I_chansey, 0x28, 0x00, 0xFF, 3, 250, 5, 5, 50, 105},
+    {"Tangela", &I_tangela, 0x1E, 0x16, 0xFF, 2, 65, 55, 115, 60, 100},
+    {"Kangaskhan", &I_kangaskhan, 0x02, 0x00, 0xFF, 2, 105, 95, 80, 90, 40},
+    {"Horsea", &I_horsea, 0x5C, 0x15, 0xFF, 2, 30, 40, 70, 60, 70},
+    {"Seadra", &I_seadra, 0x5D, 0x15, 0xFF, 2, 55, 65, 95, 85, 95},
+    {"Goldeen", &I_goldeen, 0x9D, 0x15, 0xFF, 2, 45, 67, 60, 63, 50},
+    {"Seaking", &I_seaking, 0x9E, 0x15, 0xFF, 2, 80, 92, 65, 68, 80},
+    {"Staryu", &I_staryu, 0x1B, 0x15, 0xFF, 0, 30, 45, 55, 85, 70},
+    {"Starmie", &I_starmie, 0x98, 0x15, 0x18, 0, 60, 75, 85, 115, 100},
+    {"Mr. Mime", &I_mr_mime, 0x2A, 0x18, 0xFF, 2, 40, 45, 65, 90, 100},
+    {"Scyther", &I_scyther, 0x1A, 0x07, 0x02, 2, 70, 110, 80, 105, 55},
+    {"Jynx", &I_jynx, 0x48, 0x19, 0x18, 2, 65, 50, 35, 95, 95},
+    {"Electabuzz", &I_electabuzz, 0x35, 0x17, 0xFF, 2, 65, 83, 57, 105, 85},
+    {"Magmar", &I_magmar, 0x33, 0x14, 0xFF, 2, 65, 95, 57, 93, 85},
+    {"Pinsir", &I_pinsir, 0x1D, 0x07, 0xFF, 0, 65, 125, 100, 85, 55},
+    {"Tauros", &I_tauros, 0x3C, 0x00, 0xFF, 0, 75, 100, 95, 110, 70},
+    {"Magikarp", &I_magikarp, 0x85, 0x15, 0xFF, 0, 20, 10, 55, 80, 20},
+    {"Gyarados", &I_gyarados, 0x16, 0x15, 0x02, 0, 95, 125, 79, 81, 100},
+    {"Lapras", &I_lapras, 0x13, 0x15, 0x19, 0, 130, 85, 80, 60, 95},
+    {"Ditto", &I_ditto, 0x4C, 0x00, 0xFF, 2, 48, 48, 48, 48, 48},
+    {"Eevee", &I_eevee, 0x66, 0x00, 0xFF, 2, 55, 55, 50, 55, 65},
+    {"Vaporeon", &I_vaporeon, 0x69, 0x15, 0xFF, 2, 130, 65, 60, 65, 110},
+    {"Jolteon", &I_jolteon, 0x68, 0x17, 0xFF, 2, 65, 65, 60, 130, 110},
+    {"Flareon", &I_flareon, 0x67, 0x14, 0xFF, 2, 65, 130, 60, 65, 110},
+    {"Porygon", &I_porygon, 0xAA, 0x00, 0xFF, 2, 65, 60, 70, 40, 75},
+    {"Omanyte", &I_omanyte, 0x62, 0x05, 0x15, 2, 35, 40, 100, 35, 90},
+    {"Omastar", &I_omastar, 0x63, 0x05, 0x15, 2, 70, 60, 125, 55, 115},
+    {"Kabuto", &I_kabuto, 0x5A, 0x05, 0x15, 2, 30, 80, 90, 55, 45},
+    {"Kabutops", &I_kabutops, 0x5B, 0x05, 0x15, 2, 60, 115, 105, 80, 70},
+    {"Aerodactyl", &I_aerodactyl, 0xAB, 0x05, 0x02, 0, 80, 105, 65, 130, 60},
+    {"Snorlax", &I_snorlax, 0x84, 0x00, 0xFF, 0, 160, 110, 65, 30, 65},
+    {"Articuno", &I_articuno, 0x4A, 0x19, 0x02, 0, 90, 85, 100, 85, 125},
+    {"Zapdos", &I_zapdos, 0x4B, 0x17, 0x02, 0, 90, 90, 85, 100, 125},
+    {"Moltres", &I_moltres, 0x49, 0x14, 0x02, 0, 90, 100, 90, 90, 125},
+    {"Dratini", &I_dratini, 0x58, 0x1A, 0xFF, 0, 41, 64, 45, 50, 50},
+    {"Dragonair", &I_dragonair, 0x59, 0x1A, 0xFF, 0, 61, 84, 65, 70, 70},
+    {"Dragonite", &I_dragonite, 0x42, 0x1A, 0x02, 0, 91, 134, 95, 80, 100},
+    {"Mewtwo", &I_mewtwo, 0x83, 0x18, 0xFF, 0, 106, 110, 90, 130, 154},
+    {"Mew", &I_mew, 0x15, 0x18, 0xFF, 1, 100, 100, 100, 100, 100},
     {},
 };
 
+struct pokemon_mv move_table[] = {
+    {"No Move", 0x00},      {"Absorb", 0x47},       {"Acid Armor", 0x97},   {"Acid", 0x33},
+    {"Agility", 0x61},      {"Amnesia", 0x85},      {"Aurora Beam", 0x3E},  {"Barrage", 0x8C},
+    {"Barrier", 0x70},      {"Bide", 0x75},         {"Bind", 0x14},         {"Bite", 0x2C},
+    {"Blizzard", 0x3B},     {"Body Slam", 0x22},    {"Bone Club", 0x7D},    {"Boomerang", 0x9B},
+    {"Bubblebeam", 0x3D},   {"Bubble", 0x91},       {"Clamp", 0x80},        {"Comet Punch", 0x04},
+    {"Confuse Ray", 0x6D},  {"Confusion", 0x5D},    {"Constrict", 0x84},    {"Conversion", 0xA0},
+    {"Counter", 0x44},      {"Crabhammer", 0x98},   {"Cut", 0x0F},          {"Defense Curl", 0x6F},
+    {"Dig", 0x5B},          {"Disable", 0x32},      {"Dizzy Punch", 0x92},  {"Doubleslap", 0x03},
+    {"Double Kick", 0x18},  {"Double Team", 0x68},  {"Double-Edge", 0x26},  {"Dragon Rage", 0x52},
+    {"Dream Eater", 0x8A},  {"Drill Peck", 0x41},   {"Earthquake", 0x59},   {"Egg Bomb", 0x79},
+    {"Ember", 0x34},        {"Explosion", 0x99},    {"Fire Blast", 0x7E},   {"Fire Punch", 0x07},
+    {"Fire Spin", 0x53},    {"Fissure", 0x5A},      {"Flamethrower", 0x35}, {"Flash", 0x94},
+    {"Fly", 0x13},          {"Focus Energy", 0x74}, {"Fury Attack", 0x1F},  {"Fury Swipes", 0x9A},
+    {"Glare", 0x89},        {"Growl", 0x2D},        {"Growth", 0x4A},       {"Guillotine", 0x0C},
+    {"Gust", 0x10},         {"Harden", 0x6A},       {"Haze", 0x72},         {"Headbutt", 0x1D},
+    {"Hi Jump Kick", 0x88}, {"Horn Attack", 0x1E},  {"Horn Drill", 0x20},   {"Hydro Pump", 0x38},
+    {"Hyper Beam", 0x3F},   {"Hyper Fang", 0x9E},   {"Hypnosis", 0x5F},     {"Ice Beam", 0x3A},
+    {"Ice Punch", 0x08},    {"Jump Kick", 0x1A},    {"Karate Chop", 0x02},  {"Kinesis", 0x86},
+    {"Leech Life", 0x8D},   {"Leech Seed", 0x49},   {"Leer", 0x2B},         {"Lick", 0x7A},
+    {"Light Screen", 0x71}, {"Lovely Kiss", 0x8E},  {"Low Kick", 0x43},     {"Meditate", 0x60},
+    {"Mega Drain", 0x48},   {"Mega Kick", 0x19},    {"Mega Punch", 0x05},   {"Metronome", 0x76},
+    {"Mimic", 0x66},        {"Minimize", 0x6B},     {"Mirror Move", 0x77},  {"Mist", 0x36},
+    {"Night Shade", 0x65},  {"Pay Day", 0x06},      {"Peck", 0x40},         {"Petal Dance", 0x50},
+    {"Pin Missile", 0x2A},  {"Poisonpowder", 0x4D}, {"Poison Gas", 0x8B},   {"Poison Sting", 0x28},
+    {"Pound", 0x01},        {"Psybeam", 0x3C},      {"Psychic", 0x5E},      {"Psywave", 0x95},
+    {"Quick Attack", 0x62}, {"Rage", 0x63},         {"Razor Leaf", 0x4B},   {"Razor Wind", 0x0D},
+    {"Recover", 0x69},      {"Reflect", 0x73},      {"Rest", 0x9C},         {"Roar", 0x2E},
+    {"Rock Slide", 0x9D},   {"Rock Throw", 0x58},   {"Rolling Kick", 0x1B}, {"Sand Attack", 0x1C},
+    {"Scratch", 0x0A},      {"Screech", 0x67},      {"Seismic Toss", 0x45}, {"Selfdestruct", 0x78},
+    {"Sharpen", 0x9F},      {"Sing", 0x2F},         {"Skull Bash", 0x82},   {"Sky Attack", 0x8F},
+    {"Slam", 0x15},         {"Slash", 0xA3},        {"Sleep Powder", 0x4F}, {"Sludge", 0x7C},
+    {"Smog", 0x7B},         {"Smokescreen", 0x6C},  {"Softboiled", 0x87},   {"Solar Beam", 0x4C},
+    {"Sonicboom", 0x31},    {"Spike Cannon", 0x83}, {"Splash", 0x96},       {"Spore", 0x93},
+    {"Stomp", 0x17},        {"Strength", 0x46},     {"String Shot", 0x51},  {"Struggle", 0xA5},
+    {"Stun Spore", 0x4E},   {"Submission", 0x42},   {"Substitute", 0xA4},   {"Supersonic", 0x30},
+    {"Super Fang", 0xA2},   {"Surf", 0x39},         {"Swift", 0x81},        {"Swords Dance", 0x0E},
+    {"Tackle", 0x21},       {"Tail Whip", 0x27},    {"Take Down", 0x24},    {"Teleport", 0x64},
+    {"Thrash", 0x25},       {"Thunderbolt", 0x55},  {"Thunderpunch", 0x09}, {"Thundershock", 0x54},
+    {"Thunder Wave", 0x56}, {"Thunder", 0x57},      {"Toxic", 0x5C},        {"Transform", 0x90},
+    {"Tri Attack", 0xA1},   {"Twineedle", 0x29},    {"Vicegrip", 0x0B},     {"Vine Whip", 0x16},
+    {"Waterfall", 0x7F},    {"Water Gun", 0x37},    {"Whirlwind", 0x12},    {"Wing Attack", 0x11},
+    {"Withdraw", 0x6E},     {"Wrap", 0x23},
+};
+
 uint32_t pokemon_exit_confirm_view(void* context) {
     UNUSED(context);
     return AppViewExitConfirm;
@@ -179,6 +224,48 @@ App* pokemon_alloc() {
     view_dispatcher_add_view(
         app->view_dispatcher, AppViewSelectPokemon, select_pokemon_get_view(app));
 
+    //  Start Index first level
+    app->current_level = 3;
+    // Select Level View
+    app->select_level = select_level_alloc(app);
+    view_set_previous_callback(select_level_get_view(app), pokemon_exit_confirm_view);
+    view_dispatcher_add_view(app->view_dispatcher, AppViewSelectLevel, select_level_get_view(app));
+
+    //  Start Index first stat
+    app->current_stats = 0;
+    // Select Level View
+    app->select_stats = select_stats_alloc(app);
+    view_set_previous_callback(select_stats_get_view(app), pokemon_exit_confirm_view);
+    view_dispatcher_add_view(app->view_dispatcher, AppViewSelectStats, select_stats_get_view(app));
+
+    //  Start Index first move
+    app->current_move = 0;
+    // Select Move View
+    app->select_move1 = select_move1_alloc(app);
+    view_set_previous_callback(select_move1_get_view(app), pokemon_exit_confirm_view);
+    view_dispatcher_add_view(app->view_dispatcher, AppViewSelectMove1, select_move1_get_view(app));
+
+    //  Start Index first move
+    app->current_move = 0;
+    // Select Move View
+    app->select_move2 = select_move2_alloc(app);
+    view_set_previous_callback(select_move1_get_view(app), pokemon_exit_confirm_view);
+    view_dispatcher_add_view(app->view_dispatcher, AppViewSelectMove2, select_move2_get_view(app));
+
+    //  Start Index first move
+    app->current_move = 0;
+    // Select Move View
+    app->select_move3 = select_move3_alloc(app);
+    view_set_previous_callback(select_move3_get_view(app), pokemon_exit_confirm_view);
+    view_dispatcher_add_view(app->view_dispatcher, AppViewSelectMove3, select_move3_get_view(app));
+
+    //  Start Index first move
+    app->current_move = 0;
+    // Select Move View
+    app->select_move4 = select_move4_alloc(app);
+    view_set_previous_callback(select_move4_get_view(app), pokemon_exit_confirm_view);
+    view_dispatcher_add_view(app->view_dispatcher, AppViewSelectMove4, select_move4_get_view(app));
+
     // Trade View
     app->trade = trade_alloc(app);
     view_set_previous_callback(trade_get_view(app), pokemon_exit_confirm_view);
@@ -195,6 +282,18 @@ void free_app(App* app) {
     // Free views
     view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectPokemon);
     select_pokemon_free(app);
+    view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectLevel);
+    select_level_free(app);
+    view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectStats);
+    select_stats_free(app);
+    view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectMove1);
+    select_move1_free(app);
+    view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectMove2);
+    select_move2_free(app);
+    view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectMove3);
+    select_move3_free(app);
+    view_dispatcher_remove_view(app->view_dispatcher, AppViewSelectMove4);
+    select_move4_free(app);
     view_dispatcher_remove_view(app->view_dispatcher, AppViewTrade);
     trade_free(app);
     // Close records

+ 46 - 0
non_catalog_apps/gb-pokemon-trading/pokemon_app.h

@@ -11,6 +11,12 @@
 #include <pokemon_icons.h>
 
 #include "views/select_pokemon.hpp"
+#include "views/select_level.hpp"
+#include "views/select_stats.hpp"
+#include "views/select_move1.hpp"
+#include "views/select_move2.hpp"
+#include "views/select_move3.hpp"
+#include "views/select_move4.hpp"
 #include "views/trade.hpp"
 
 #define TAG "Pokemon"
@@ -19,6 +25,19 @@ struct pokemon_lut {
     const char* name;
     const Icon* icon;
     const uint8_t hex;
+    const uint8_t type1;
+    const uint8_t type2;
+    const int xp_group;
+    const int base_hp;
+    const int base_atk;
+    const int base_def;
+    const int base_spd;
+    const int base_special;
+};
+
+struct pokemon_mv {
+    const char* name;
+    const uint8_t hex;
 };
 
 typedef struct App App;
@@ -36,15 +55,34 @@ struct App {
     Gui* gui;
     ViewDispatcher* view_dispatcher;
     SelectPokemon* select_pokemon;
+    SelectLevel* select_level;
+    SelectStats* select_stats;
+    SelectMove1* select_move1;
+    SelectMove2* select_move2;
+    SelectMove3* select_move3;
+    SelectMove4* select_move4;
     Trade* trade;
     uint32_t view_id;
 
     int current_pokemon = 0;
+    int current_level = 3;
+    int current_stats = 0;
+    int current_move = 0;
     char pokemon_hex_code = ' ';
+    char move1_hex_code = ' ';
+    char move2_hex_code = ' ';
+    char move3_hex_code = ' ';
+    char move4_hex_code = ' ';
 };
 
 typedef enum {
     AppViewSelectPokemon,
+    AppViewSelectLevel,
+    AppViewSelectStats,
+    AppViewSelectMove1,
+    AppViewSelectMove2,
+    AppViewSelectMove3,
+    AppViewSelectMove4,
     AppViewTrade,
     AppViewExitConfirm,
 } AppView;
@@ -52,7 +90,14 @@ typedef enum {
 typedef void (*SelectPokemonCallback)(void* context, uint32_t index);
 typedef struct SelectPokemonModel {
     int current_pokemon = 0;
+    int current_level = 3;
+    int current_stats = 0;
+    int current_move = 0;
     char pokemon_hex_code = ' ';
+    char move1_hex_code = ' ';
+    char move2_hex_code = ' ';
+    char move3_hex_code = ' ';
+    char move4_hex_code = ' ';
     bool trading = false;
     bool connected = false;
     render_gameboy_state_t gameboy_status = GAMEBOY_INITIAL;
@@ -61,5 +106,6 @@ typedef struct SelectPokemonModel {
 } SelectPokemonModel;
 
 extern struct pokemon_lut pokemon_table[];
+extern struct pokemon_mv move_table[];
 
 #endif /* POKEMON_APP_H */

+ 13 - 14
non_catalog_apps/gb-pokemon-trading/pokemon_data.h

@@ -143,7 +143,7 @@ struct __attribute__((__packed__)) trade_data_block {
 };
 
 struct trade_data_block DATA_BLOCK2 =
-    {.trainer_name = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00, 0x00},
+    {.trainer_name = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_},
      .party_cnt = 1,
      .party_members = {0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
      .party =
@@ -281,23 +281,22 @@ struct trade_data_block DATA_BLOCK2 =
               .spd = 0x9800,
               .special = 0x9900},
          },
-     /* NOTE: I think this shouldn't exceed 7 chars */
      .ot_name =
          {
-             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
+             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+             {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
          },
      .nickname = {
-         {.str = {F_, l_, o_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-         {.str = {F_, l_, o_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-         {.str = {F_, l_, o_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-         {.str = {F_, l_, o_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-         {.str = {F_, l_, o_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
-         {.str = {F_, l_, o_, p_, p_, e_, r_, TERM_, 0x00, 0x00}},
+         {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+         {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+         {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+         {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+         {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
+         {.str = {F_, l_, i_, p_, p_, e_, r_, TERM_, TERM_, TERM_, TERM_}},
      }};
 
 unsigned char INPUT_BLOCK[405];

+ 170 - 0
non_catalog_apps/gb-pokemon-trading/views/select_level.cpp

@@ -0,0 +1,170 @@
+#include "../pokemon_app.h"
+#include "select_level.hpp"
+
+static void select_level_render_callback(Canvas* canvas, void* context) {
+    canvas_clear(canvas);
+
+    SelectPokemonModel* model = (SelectPokemonModel*)context;
+    const uint8_t current_index = model->current_level;
+
+    char level_num[5];
+
+    snprintf(level_num, sizeof(level_num), "#%03d", current_index);
+    canvas_set_font(canvas, FontPrimary);
+    canvas_draw_str_aligned(
+        canvas, 55, 54 / 2, AlignLeft, AlignTop, "Level:");
+
+    canvas_set_font(canvas, FontSecondary);
+    canvas_draw_str_aligned(canvas, 55, 38, AlignLeft, AlignTop, level_num);
+    canvas_draw_icon(canvas, 0, 0, pokemon_table[model->current_pokemon].icon);
+    canvas_draw_icon(canvas, 128 - 80, 0, &I_Space_80x18);
+    canvas_draw_str_aligned(canvas, (128 - 40), 5, AlignCenter, AlignTop, "Select Level");
+
+    canvas_set_font(canvas, FontPrimary);
+    elements_button_center(canvas, "OK");
+}
+
+static bool select_level_input_callback(InputEvent* event, void* context) {
+    furi_assert(context);
+    SelectLevel* select_level = (SelectLevel*)context;
+    bool consumed = false;
+
+    if(event->type == InputTypePress && event->key == InputKeyOk) {
+        with_view_model_cpp(
+            select_level->view,
+            SelectPokemonModel*,
+            model,
+            {
+                select_level->app->current_level = model->current_level;
+            },
+            false);
+        
+        view_dispatcher_switch_to_view(select_level->app->view_dispatcher, AppViewSelectStats);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyBack) {
+        view_dispatcher_switch_to_view(select_level->app->view_dispatcher, AppViewSelectPokemon);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyLeft) {
+        with_view_model_cpp(
+            select_level->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_level == 3) {
+                    model->current_level = 100;
+                } else {
+                    model->current_level--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyDown) {
+        with_view_model_cpp(
+            select_level->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_level >= 10) {
+                    model->current_level -= 10;
+                } else {
+                    model->current_level = 100;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyRight) {
+        with_view_model_cpp(
+            select_level->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_level == 100) {
+                    model->current_level = 3;
+                } else {
+                    model->current_level++;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyUp) {
+        with_view_model_cpp(
+            select_level->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_level <= 90) {
+                    model->current_level += 10;
+                } else {
+                    model->current_level = 3;
+                    ;
+                }
+            },
+            true);
+        consumed = true;
+    }
+
+    return consumed;
+}
+
+void select_level_enter_callback(void* context) {
+    furi_assert(context);
+    SelectLevel* select_level = (SelectLevel*)context;
+    with_view_model_cpp(
+        select_level->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_pokemon = select_level->app->current_pokemon;
+            model->pokemon_hex_code = select_level->app->pokemon_hex_code;
+            model->current_level = select_level->app->current_level;
+        },
+        true);
+}
+
+bool select_level_custom_callback(uint32_t event, void* context) {
+    UNUSED(event);
+    furi_assert(context);
+    SelectLevel* select_level = (SelectLevel*)context;
+    view_dispatcher_send_custom_event(select_level->app->view_dispatcher, 0);
+    return true;
+}
+
+void select_level_exit_callback(void* context) {
+    furi_assert(context);
+    UNUSED(context);
+}
+
+SelectLevel* select_level_alloc(App* app) {
+    SelectLevel* select_level = (SelectLevel*)malloc(sizeof(SelectLevel));
+    select_level->app = app;
+    select_level->view = view_alloc();
+    view_set_context(select_level->view, select_level);
+    view_allocate_model(select_level->view, ViewModelTypeLockFree, sizeof(SelectPokemonModel));
+    with_view_model_cpp(
+        select_level->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_level = app->current_level;
+        },
+        true);
+
+    view_set_draw_callback(select_level->view, select_level_render_callback);
+    view_set_input_callback(select_level->view, select_level_input_callback);
+    view_set_enter_callback(select_level->view, select_level_enter_callback);
+    view_set_custom_callback(select_level->view, select_level_custom_callback);
+
+    view_set_exit_callback(select_level->view, select_level_exit_callback);
+    return select_level;
+}
+
+void select_level_free(App* app) {
+    furi_assert(app->select_level);
+    view_free(app->select_level->view);
+    free(app->select_level);
+}
+
+View* select_level_get_view(App* app) {
+    furi_assert(app->select_level);
+    return app->select_level->view;
+}

+ 25 - 0
non_catalog_apps/gb-pokemon-trading/views/select_level.hpp

@@ -0,0 +1,25 @@
+#ifndef SELECCT_LEVEL_HPP
+#define SELECCT_LEVEL_HPP
+
+#pragma once
+#include <furi.h>
+#include <gui/view.h>
+#include <gui/view_dispatcher.h>
+
+#include <gui/elements.h>
+#include <string>
+
+typedef struct App App;
+
+typedef struct {
+    View* view;
+    App* app;
+} SelectLevel;
+
+SelectLevel* select_level_alloc(App* app);
+
+void select_level_free(App* app);
+
+View* select_level_get_view(App* app);
+
+#endif /* SELECCT_LEVEL_HPP */

+ 172 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move1.cpp

@@ -0,0 +1,172 @@
+#include "../pokemon_app.h"
+#include "select_move1.hpp"
+
+static void select_move1_render_callback(Canvas* canvas, void* context) {
+    canvas_clear(canvas);
+
+    SelectPokemonModel* model = (SelectPokemonModel*)context;
+    const uint8_t current_index = model->current_move;
+    char move_num[5];
+
+    snprintf(move_num, sizeof(move_num), "#%03d", current_index + 1);
+    canvas_set_font(canvas, FontPrimary);
+    canvas_draw_str_aligned(
+        canvas, 55, 54 / 2, AlignLeft, AlignTop, move_table[current_index].name);
+
+    canvas_set_font(canvas, FontSecondary);
+    canvas_draw_str_aligned(canvas, 55, 38, AlignLeft, AlignTop, move_num);
+    canvas_draw_icon(canvas, 0, 0, pokemon_table[model->current_pokemon].icon);
+    canvas_draw_icon(canvas, 128 - 80, 0, &I_Space_80x18);
+    canvas_draw_str_aligned(canvas, (128 - 40), 5, AlignCenter, AlignTop, "Select Move #1");
+
+    canvas_set_font(canvas, FontPrimary);
+    elements_button_center(canvas, "OK");
+}
+
+static bool select_move1_input_callback(InputEvent* event, void* context) {
+    furi_assert(context);
+    SelectMove1* select_move1 = (SelectMove1*)context;
+    bool consumed = false;
+
+    if(event->type == InputTypePress && event->key == InputKeyOk) {
+        with_view_model_cpp(
+            select_move1->view,
+            SelectPokemonModel*,
+            model,
+            {
+                select_move1->app->current_move = model->current_move;
+                select_move1->app->move1_hex_code = move_table[model->current_move].hex;
+            },
+            false);
+        view_dispatcher_switch_to_view(select_move1->app->view_dispatcher, AppViewSelectMove2);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyBack) {
+        view_dispatcher_switch_to_view(select_move1->app->view_dispatcher, AppViewSelectStats);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyLeft) {
+        with_view_model_cpp(
+            select_move1->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 0) {
+                    model->current_move = 165;
+                } else {
+                    model->current_move--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyDown) {
+        with_view_model_cpp(
+            select_move1->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move >= 10) {
+                    model->current_move -= 10;
+                } else {
+                    model->current_move = 165;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyRight) {
+        with_view_model_cpp(
+            select_move1->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 165) {
+                    model->current_move = 0;
+                } else {
+                    model->current_move++;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyUp) {
+        with_view_model_cpp(
+            select_move1->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move <= 155) {
+                    model->current_move += 10;
+                } else {
+                    model->current_move = 0;
+                    ;
+                }
+            },
+            true);
+        consumed = true;
+    }
+
+    return consumed;
+}
+
+void select_move1_enter_callback(void* context) {
+    furi_assert(context);
+    SelectMove1* select_move1 = (SelectMove1*)context;
+    with_view_model_cpp(
+        select_move1->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_pokemon = select_move1->app->current_pokemon;
+            model->pokemon_hex_code = select_move1->app->pokemon_hex_code;
+            model->current_level = select_move1->app->current_level;
+            model->current_stats = select_move1->app->current_stats;
+            model->move1_hex_code = select_move1->app->move1_hex_code;
+        },
+        true);
+}
+
+bool select_move1_custom_callback(uint32_t event, void* context) {
+    UNUSED(event);
+    furi_assert(context);
+    SelectMove1* select_move1 = (SelectMove1*)context;
+    view_dispatcher_send_custom_event(select_move1->app->view_dispatcher, 0);
+    return true;
+}
+
+void select_move1_exit_callback(void* context) {
+    furi_assert(context);
+    UNUSED(context);
+}
+
+SelectMove1* select_move1_alloc(App* app) {
+    SelectMove1* select_move1 = (SelectMove1*)malloc(sizeof(SelectMove1));
+    select_move1->app = app;
+    select_move1->view = view_alloc();
+    view_set_context(select_move1->view, select_move1);
+    view_allocate_model(select_move1->view, ViewModelTypeLockFree, sizeof(SelectPokemonModel));
+    with_view_model_cpp(
+        select_move1->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_move = app->current_move;
+            model->move1_hex_code = app->move1_hex_code;
+        },
+        true);
+
+    view_set_draw_callback(select_move1->view, select_move1_render_callback);
+    view_set_input_callback(select_move1->view, select_move1_input_callback);
+    view_set_enter_callback(select_move1->view, select_move1_enter_callback);
+    view_set_custom_callback(select_move1->view, select_move1_custom_callback);
+
+    view_set_exit_callback(select_move1->view, select_move1_exit_callback);
+    return select_move1;
+}
+
+void select_move1_free(App* app) {
+    furi_assert(app->select_move1);
+    view_free(app->select_move1->view);
+    free(app->select_move1);
+}
+
+View* select_move1_get_view(App* app) {
+    furi_assert(app->select_move1);
+    return app->select_move1->view;
+}

+ 25 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move1.hpp

@@ -0,0 +1,25 @@
+#ifndef SELECCT_MOVE1_HPP
+#define SELECCT_MOVE1_HPP
+
+#pragma once
+#include <furi.h>
+#include <gui/view.h>
+#include <gui/view_dispatcher.h>
+
+#include <gui/elements.h>
+#include <string>
+
+typedef struct App App;
+
+typedef struct {
+    View* view;
+    App* app;
+} SelectMove1;
+
+SelectMove1* select_move1_alloc(App* app);
+
+void select_move1_free(App* app);
+
+View* select_move1_get_view(App* app);
+
+#endif /* SELECCT_MOVE1_HPP */

+ 173 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move2.cpp

@@ -0,0 +1,173 @@
+#include "../pokemon_app.h"
+#include "select_move2.hpp"
+
+static void select_move2_render_callback(Canvas* canvas, void* context) {
+    canvas_clear(canvas);
+
+    SelectPokemonModel* model = (SelectPokemonModel*)context;
+    const uint8_t current_index = model->current_move;
+    char move_num[5];
+
+    snprintf(move_num, sizeof(move_num), "#%03d", current_index + 1);
+    canvas_set_font(canvas, FontPrimary);
+    canvas_draw_str_aligned(
+        canvas, 55, 54 / 2, AlignLeft, AlignTop, move_table[current_index].name);
+
+    canvas_set_font(canvas, FontSecondary);
+    canvas_draw_str_aligned(canvas, 55, 38, AlignLeft, AlignTop, move_num);
+    canvas_draw_icon(canvas, 0, 0, pokemon_table[model->current_pokemon].icon);
+    canvas_draw_icon(canvas, 128 - 80, 0, &I_Space_80x18);
+    canvas_draw_str_aligned(canvas, (128 - 40), 5, AlignCenter, AlignTop, "Select Move #2");
+
+    canvas_set_font(canvas, FontPrimary);
+    elements_button_center(canvas, "OK");
+}
+
+static bool select_move2_input_callback(InputEvent* event, void* context) {
+    furi_assert(context);
+    SelectMove2* select_move2 = (SelectMove2*)context;
+    bool consumed = false;
+
+    if(event->type == InputTypePress && event->key == InputKeyOk) {
+        with_view_model_cpp(
+            select_move2->view,
+            SelectPokemonModel*,
+            model,
+            {
+                select_move2->app->current_move = model->current_move;
+                select_move2->app->move2_hex_code = move_table[model->current_move].hex;
+            },
+            false);
+        view_dispatcher_switch_to_view(select_move2->app->view_dispatcher, AppViewSelectMove3);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyBack) {
+        view_dispatcher_switch_to_view(select_move2->app->view_dispatcher, AppViewSelectMove1);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyLeft) {
+        with_view_model_cpp(
+            select_move2->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 0) {
+                    model->current_move = 165;
+                } else {
+                    model->current_move--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyDown) {
+        with_view_model_cpp(
+            select_move2->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move >= 10) {
+                    model->current_move -= 10;
+                } else {
+                    model->current_move = 165;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyRight) {
+        with_view_model_cpp(
+            select_move2->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 165) {
+                    model->current_move = 0;
+                } else {
+                    model->current_move++;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyUp) {
+        with_view_model_cpp(
+            select_move2->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move <= 155) {
+                    model->current_move += 10;
+                } else {
+                    model->current_move = 0;
+                    ;
+                }
+            },
+            true);
+        consumed = true;
+    }
+
+    return consumed;
+}
+
+void select_move2_enter_callback(void* context) {
+    furi_assert(context);
+    SelectMove2* select_move2 = (SelectMove2*)context;
+    with_view_model_cpp(
+        select_move2->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_pokemon = select_move2->app->current_pokemon;
+            model->pokemon_hex_code = select_move2->app->pokemon_hex_code;
+            model->current_level = select_move2->app->current_level;
+            model->current_stats = select_move2->app->current_stats;
+            model->move1_hex_code = select_move2->app->move1_hex_code;
+            model->move2_hex_code = select_move2->app->move2_hex_code;
+        },
+        true);
+}
+
+bool select_move2_custom_callback(uint32_t event, void* context) {
+    UNUSED(event);
+    furi_assert(context);
+    SelectMove2* select_move2 = (SelectMove2*)context;
+    view_dispatcher_send_custom_event(select_move2->app->view_dispatcher, 0);
+    return true;
+}
+
+void select_move2_exit_callback(void* context) {
+    furi_assert(context);
+    UNUSED(context);
+}
+
+SelectMove2* select_move2_alloc(App* app) {
+    SelectMove2* select_move2 = (SelectMove2*)malloc(sizeof(SelectMove2));
+    select_move2->app = app;
+    select_move2->view = view_alloc();
+    view_set_context(select_move2->view, select_move2);
+    view_allocate_model(select_move2->view, ViewModelTypeLockFree, sizeof(SelectPokemonModel));
+    with_view_model_cpp(
+        select_move2->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_move = app->current_move;
+            model->move2_hex_code = app->move2_hex_code;
+        },
+        true);
+
+    view_set_draw_callback(select_move2->view, select_move2_render_callback);
+    view_set_input_callback(select_move2->view, select_move2_input_callback);
+    view_set_enter_callback(select_move2->view, select_move2_enter_callback);
+    view_set_custom_callback(select_move2->view, select_move2_custom_callback);
+
+    view_set_exit_callback(select_move2->view, select_move2_exit_callback);
+    return select_move2;
+}
+
+void select_move2_free(App* app) {
+    furi_assert(app->select_move2);
+    view_free(app->select_move2->view);
+    free(app->select_move2);
+}
+
+View* select_move2_get_view(App* app) {
+    furi_assert(app->select_move2);
+    return app->select_move2->view;
+}

+ 25 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move2.hpp

@@ -0,0 +1,25 @@
+#ifndef SELECCT_MOVE2_HPP
+#define SELECCT_MOVE2_HPP
+
+#pragma once
+#include <furi.h>
+#include <gui/view.h>
+#include <gui/view_dispatcher.h>
+
+#include <gui/elements.h>
+#include <string>
+
+typedef struct App App;
+
+typedef struct {
+    View* view;
+    App* app;
+} SelectMove2;
+
+SelectMove2* select_move2_alloc(App* app);
+
+void select_move2_free(App* app);
+
+View* select_move2_get_view(App* app);
+
+#endif /* SELECCT_MOVE2_HPP */

+ 174 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move3.cpp

@@ -0,0 +1,174 @@
+#include "../pokemon_app.h"
+#include "select_move3.hpp"
+
+static void select_move3_render_callback(Canvas* canvas, void* context) {
+    canvas_clear(canvas);
+
+    SelectPokemonModel* model = (SelectPokemonModel*)context;
+    const uint8_t current_index = model->current_move;
+    char move_num[5];
+
+    snprintf(move_num, sizeof(move_num), "#%03d", current_index + 1);
+    canvas_set_font(canvas, FontPrimary);
+    canvas_draw_str_aligned(
+        canvas, 55, 54 / 2, AlignLeft, AlignTop, move_table[current_index].name);
+
+    canvas_set_font(canvas, FontSecondary);
+    canvas_draw_str_aligned(canvas, 55, 38, AlignLeft, AlignTop, move_num);
+    canvas_draw_icon(canvas, 0, 0, pokemon_table[model->current_pokemon].icon);
+    canvas_draw_icon(canvas, 128 - 80, 0, &I_Space_80x18);
+    canvas_draw_str_aligned(canvas, (128 - 40), 5, AlignCenter, AlignTop, "Select Move #3");
+
+    canvas_set_font(canvas, FontPrimary);
+    elements_button_center(canvas, "OK");
+}
+
+static bool select_move3_input_callback(InputEvent* event, void* context) {
+    furi_assert(context);
+    SelectMove3* select_move3 = (SelectMove3*)context;
+    bool consumed = false;
+
+    if(event->type == InputTypePress && event->key == InputKeyOk) {
+        with_view_model_cpp(
+            select_move3->view,
+            SelectPokemonModel*,
+            model,
+            {
+                select_move3->app->current_move = model->current_move;
+                select_move3->app->move3_hex_code = move_table[model->current_move].hex;
+            },
+            false);
+        view_dispatcher_switch_to_view(select_move3->app->view_dispatcher, AppViewSelectMove4);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyBack) {
+        view_dispatcher_switch_to_view(select_move3->app->view_dispatcher, AppViewSelectMove2);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyLeft) {
+        with_view_model_cpp(
+            select_move3->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 0) {
+                    model->current_move = 165;
+                } else {
+                    model->current_move--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyDown) {
+        with_view_model_cpp(
+            select_move3->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move >= 10) {
+                    model->current_move -= 10;
+                } else {
+                    model->current_move = 165;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyRight) {
+        with_view_model_cpp(
+            select_move3->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 165) {
+                    model->current_move = 0;
+                } else {
+                    model->current_move++;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyUp) {
+        with_view_model_cpp(
+            select_move3->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move <= 155) {
+                    model->current_move += 10;
+                } else {
+                    model->current_move = 0;
+                    ;
+                }
+            },
+            true);
+        consumed = true;
+    }
+
+    return consumed;
+}
+
+void select_move3_enter_callback(void* context) {
+    furi_assert(context);
+    SelectMove3* select_move3 = (SelectMove3*)context;
+    with_view_model_cpp(
+        select_move3->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_pokemon = select_move3->app->current_pokemon;
+            model->pokemon_hex_code = select_move3->app->pokemon_hex_code;
+            model->current_level = select_move3->app->current_level;
+            model->current_stats = select_move3->app->current_stats;
+            model->move1_hex_code = select_move3->app->move1_hex_code;
+            model->move2_hex_code = select_move3->app->move2_hex_code;
+            model->move3_hex_code = select_move3->app->move3_hex_code;
+        },
+        true);
+}
+
+bool select_move3_custom_callback(uint32_t event, void* context) {
+    UNUSED(event);
+    furi_assert(context);
+    SelectMove3* select_move3 = (SelectMove3*)context;
+    view_dispatcher_send_custom_event(select_move3->app->view_dispatcher, 0);
+    return true;
+}
+
+void select_move3_exit_callback(void* context) {
+    furi_assert(context);
+    UNUSED(context);
+}
+
+SelectMove3* select_move3_alloc(App* app) {
+    SelectMove3* select_move3 = (SelectMove3*)malloc(sizeof(SelectMove3));
+    select_move3->app = app;
+    select_move3->view = view_alloc();
+    view_set_context(select_move3->view, select_move3);
+    view_allocate_model(select_move3->view, ViewModelTypeLockFree, sizeof(SelectPokemonModel));
+    with_view_model_cpp(
+        select_move3->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_move = app->current_move;
+            model->move3_hex_code = app->move3_hex_code;
+        },
+        true);
+
+    view_set_draw_callback(select_move3->view, select_move3_render_callback);
+    view_set_input_callback(select_move3->view, select_move3_input_callback);
+    view_set_enter_callback(select_move3->view, select_move3_enter_callback);
+    view_set_custom_callback(select_move3->view, select_move3_custom_callback);
+
+    view_set_exit_callback(select_move3->view, select_move3_exit_callback);
+    return select_move3;
+}
+
+void select_move3_free(App* app) {
+    furi_assert(app->select_move3);
+    view_free(app->select_move3->view);
+    free(app->select_move3);
+}
+
+View* select_move3_get_view(App* app) {
+    furi_assert(app->select_move3);
+    return app->select_move3->view;
+}

+ 25 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move3.hpp

@@ -0,0 +1,25 @@
+#ifndef SELECCT_MOVE3_HPP
+#define SELECCT_MOVE3_HPP
+
+#pragma once
+#include <furi.h>
+#include <gui/view.h>
+#include <gui/view_dispatcher.h>
+
+#include <gui/elements.h>
+#include <string>
+
+typedef struct App App;
+
+typedef struct {
+    View* view;
+    App* app;
+} SelectMove3;
+
+SelectMove3* select_move3_alloc(App* app);
+
+void select_move3_free(App* app);
+
+View* select_move3_get_view(App* app);
+
+#endif /* SELECCT_MOVE3_HPP */

+ 174 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move4.cpp

@@ -0,0 +1,174 @@
+#include "../pokemon_app.h"
+#include "select_move4.hpp"
+
+static void select_move4_render_callback(Canvas* canvas, void* context) {
+    canvas_clear(canvas);
+
+    SelectPokemonModel* model = (SelectPokemonModel*)context;
+    const uint8_t current_index = model->current_move;
+    char move_num[5];
+
+    snprintf(move_num, sizeof(move_num), "#%03d", current_index + 1);
+    canvas_set_font(canvas, FontPrimary);
+    canvas_draw_str_aligned(
+        canvas, 55, 54 / 2, AlignLeft, AlignTop, move_table[current_index].name);
+
+    canvas_set_font(canvas, FontSecondary);
+    canvas_draw_str_aligned(canvas, 55, 38, AlignLeft, AlignTop, move_num);
+    canvas_draw_icon(canvas, 0, 0, pokemon_table[model->current_pokemon].icon);
+    canvas_draw_icon(canvas, 128 - 80, 0, &I_Space_80x18);
+    canvas_draw_str_aligned(canvas, (128 - 40), 5, AlignCenter, AlignTop, "Select Move #4");
+
+    canvas_set_font(canvas, FontPrimary);
+    elements_button_center(canvas, "OK");
+}
+
+static bool select_move4_input_callback(InputEvent* event, void* context) {
+    furi_assert(context);
+    SelectMove4* select_move4 = (SelectMove4*)context;
+    bool consumed = false;
+
+    if(event->type == InputTypePress && event->key == InputKeyOk) {
+        with_view_model_cpp(
+            select_move4->view,
+            SelectPokemonModel*,
+            model,
+            {
+                select_move4->app->current_move = model->current_move;
+                select_move4->app->move4_hex_code = move_table[model->current_move].hex;
+            },
+            false);
+        view_dispatcher_switch_to_view(select_move4->app->view_dispatcher, AppViewTrade);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyBack) {
+        view_dispatcher_switch_to_view(select_move4->app->view_dispatcher, AppViewSelectMove3);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyLeft) {
+        with_view_model_cpp(
+            select_move4->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 0) {
+                    model->current_move = 165;
+                } else {
+                    model->current_move--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyDown) {
+        with_view_model_cpp(
+            select_move4->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move >= 10) {
+                    model->current_move -= 10;
+                } else {
+                    model->current_move = 165;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyRight) {
+        with_view_model_cpp(
+            select_move4->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move == 165) {
+                    model->current_move = 0;
+                } else {
+                    model->current_move++;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyUp) {
+        with_view_model_cpp(
+            select_move4->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_move <= 155) {
+                    model->current_move += 10;
+                } else {
+                    model->current_move = 0;
+                    ;
+                }
+            },
+            true);
+        consumed = true;
+    }
+
+    return consumed;
+}
+
+void select_move4_enter_callback(void* context) {
+    furi_assert(context);
+    SelectMove4* select_move4 = (SelectMove4*)context;
+    with_view_model_cpp(
+        select_move4->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_pokemon = select_move4->app->current_pokemon;
+            model->pokemon_hex_code = select_move4->app->pokemon_hex_code;
+            model->current_level = select_move4->app->current_level;
+            model->current_stats = select_move4->app->current_stats;
+            model->move1_hex_code = select_move4->app->move1_hex_code;
+            model->move2_hex_code = select_move4->app->move2_hex_code;
+            model->move3_hex_code = select_move4->app->move3_hex_code;
+        },
+        true);
+}
+
+bool select_move4_custom_callback(uint32_t event, void* context) {
+    UNUSED(event);
+    furi_assert(context);
+    SelectMove4* select_move4 = (SelectMove4*)context;
+    view_dispatcher_send_custom_event(select_move4->app->view_dispatcher, 0);
+    return true;
+}
+
+void select_move4_exit_callback(void* context) {
+    furi_assert(context);
+    UNUSED(context);
+}
+
+SelectMove4* select_move4_alloc(App* app) {
+    SelectMove4* select_move4 = (SelectMove4*)malloc(sizeof(SelectMove4));
+    select_move4->app = app;
+    select_move4->view = view_alloc();
+    view_set_context(select_move4->view, select_move4);
+    view_allocate_model(select_move4->view, ViewModelTypeLockFree, sizeof(SelectPokemonModel));
+    with_view_model_cpp(
+        select_move4->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_move = app->current_move;
+            model->move4_hex_code = app->move4_hex_code;
+        },
+        true);
+
+    view_set_draw_callback(select_move4->view, select_move4_render_callback);
+    view_set_input_callback(select_move4->view, select_move4_input_callback);
+    view_set_enter_callback(select_move4->view, select_move4_enter_callback);
+    view_set_custom_callback(select_move4->view, select_move4_custom_callback);
+
+    view_set_exit_callback(select_move4->view, select_move4_exit_callback);
+    return select_move4;
+}
+
+void select_move4_free(App* app) {
+    furi_assert(app->select_move4);
+    view_free(app->select_move4->view);
+    free(app->select_move4);
+}
+
+View* select_move4_get_view(App* app) {
+    furi_assert(app->select_move4);
+    return app->select_move4->view;
+}

+ 25 - 0
non_catalog_apps/gb-pokemon-trading/views/select_move4.hpp

@@ -0,0 +1,25 @@
+#ifndef SELECCT_MOVE4_HPP
+#define SELECCT_MOVE4_HPP
+
+#pragma once
+#include <furi.h>
+#include <gui/view.h>
+#include <gui/view_dispatcher.h>
+
+#include <gui/elements.h>
+#include <string>
+
+typedef struct App App;
+
+typedef struct {
+    View* view;
+    App* app;
+} SelectMove4;
+
+SelectMove4* select_move4_alloc(App* app);
+
+void select_move4_free(App* app);
+
+View* select_move4_get_view(App* app);
+
+#endif /* SELECCT_MOVE4_HPP */

+ 2 - 1
non_catalog_apps/gb-pokemon-trading/views/select_pokemon.cpp

@@ -38,7 +38,8 @@ static bool select_pokemon_input_callback(InputEvent* event, void* context) {
                 select_pokemon->app->pokemon_hex_code = pokemon_table[model->current_pokemon].hex;
             },
             false);
-        view_dispatcher_switch_to_view(select_pokemon->app->view_dispatcher, AppViewTrade);
+
+        view_dispatcher_switch_to_view(select_pokemon->app->view_dispatcher, AppViewSelectLevel);
         consumed = true;
     } else if(event->type == InputTypePress && event->key == InputKeyBack) {
         view_dispatcher_switch_to_view(select_pokemon->app->view_dispatcher, VIEW_NONE);

+ 195 - 0
non_catalog_apps/gb-pokemon-trading/views/select_stats.cpp

@@ -0,0 +1,195 @@
+#include "../pokemon_app.h"
+#include "select_stats.hpp"
+
+static void select_stats_render_callback(Canvas* canvas, void* context) {
+    canvas_clear(canvas);
+
+    SelectPokemonModel* model = (SelectPokemonModel*)context;
+    const uint8_t current_index = model->current_stats;
+
+    canvas_set_font(canvas, FontPrimary);
+    if(current_index == 0) {
+        canvas_draw_str_aligned(
+            canvas, 55, 54 / 2, AlignLeft, AlignTop, "Random IV");
+        canvas_draw_str_aligned(
+            canvas, 55, 38, AlignLeft, AlignTop, "Zero EV");
+    } else if(current_index == 1) {
+        canvas_draw_str_aligned(
+            canvas, 55, 54 / 2, AlignLeft, AlignTop, "Random IV");
+        canvas_draw_str_aligned(
+            canvas, 55, 38, AlignLeft, AlignTop, "Max EV / Lvl");
+    } else if(current_index == 2) {
+        canvas_draw_str_aligned(
+            canvas, 55, 54 / 2, AlignLeft, AlignTop, "Random IV");
+        canvas_draw_str_aligned(
+            canvas, 55, 38, AlignLeft, AlignTop, "Max EV");
+    } else if(current_index == 3) {
+        canvas_draw_str_aligned(
+            canvas, 55, 54 / 2, AlignLeft, AlignTop, "Max IV");
+        canvas_draw_str_aligned(
+            canvas, 55, 38, AlignLeft, AlignTop, "Zero EV");
+    } else if(current_index == 4) {
+        canvas_draw_str_aligned(
+            canvas, 55, 54 / 2, AlignLeft, AlignTop, "Max IV");
+        canvas_draw_str_aligned(
+            canvas, 55, 38, AlignLeft, AlignTop, "Max EV / Lvl");
+    } else if(current_index == 5) {
+        canvas_draw_str_aligned(
+            canvas, 55, 54 / 2, AlignLeft, AlignTop, "Max IV");
+        canvas_draw_str_aligned(
+            canvas, 55, 38, AlignLeft, AlignTop, "Max EV");
+    }
+
+    canvas_set_font(canvas, FontSecondary);
+    canvas_draw_icon(canvas, 0, 0, pokemon_table[model->current_pokemon].icon);
+    canvas_draw_icon(canvas, 128 - 80, 0, &I_Space_80x18);
+    canvas_draw_str_aligned(canvas, (128 - 40), 5, AlignCenter, AlignTop, "Select Stats");
+
+    canvas_set_font(canvas, FontPrimary);
+    elements_button_center(canvas, "OK");
+}
+
+static bool select_stats_input_callback(InputEvent* event, void* context) {
+    furi_assert(context);
+    SelectStats* select_stats = (SelectStats*)context;
+    bool consumed = false;
+
+    if(event->type == InputTypePress && event->key == InputKeyOk) {
+        with_view_model_cpp(
+            select_stats->view,
+            SelectPokemonModel*,
+            model,
+            {
+                select_stats->app->current_stats = model->current_stats;
+            },
+            false);
+        
+        view_dispatcher_switch_to_view(select_stats->app->view_dispatcher, AppViewSelectMove1);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyBack) {
+        view_dispatcher_switch_to_view(select_stats->app->view_dispatcher, AppViewSelectLevel);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyLeft) {
+        with_view_model_cpp(
+            select_stats->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_stats == 0) {
+                    model->current_stats = 5;
+                } else {
+                    model->current_stats--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyDown) {
+        with_view_model_cpp(
+            select_stats->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_stats == 0) {
+                    model->current_stats = 5;
+                } else {
+                    model->current_stats--;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyRight) {
+        with_view_model_cpp(
+            select_stats->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_stats == 5) {
+                    model->current_stats = 0;
+                } else {
+                    model->current_stats++;
+                }
+            },
+            true);
+        consumed = true;
+    } else if(event->type == InputTypePress && event->key == InputKeyUp) {
+        with_view_model_cpp(
+            select_stats->view,
+            SelectPokemonModel*,
+            model,
+            {
+                if(model->current_stats == 5) {
+                    model->current_stats = 0;
+                } else {
+                    model->current_stats++;
+                }
+            },
+            true);
+        consumed = true;
+    }
+
+    return consumed;
+}
+
+void select_stats_enter_callback(void* context) {
+    furi_assert(context);
+    SelectStats* select_stats = (SelectStats*)context;
+    with_view_model_cpp(
+        select_stats->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_pokemon = select_stats->app->current_pokemon;
+            model->pokemon_hex_code = select_stats->app->pokemon_hex_code;
+            model->current_level = select_stats->app->current_level;
+            model->current_stats = select_stats->app->current_stats;
+        },
+        true);
+}
+
+bool select_stats_custom_callback(uint32_t event, void* context) {
+    UNUSED(event);
+    furi_assert(context);
+    SelectStats* select_stats = (SelectStats*)context;
+    view_dispatcher_send_custom_event(select_stats->app->view_dispatcher, 0);
+    return true;
+}
+
+void select_stats_exit_callback(void* context) {
+    furi_assert(context);
+    UNUSED(context);
+}
+
+SelectStats* select_stats_alloc(App* app) {
+    SelectStats* select_stats = (SelectStats*)malloc(sizeof(SelectStats));
+    select_stats->app = app;
+    select_stats->view = view_alloc();
+    view_set_context(select_stats->view, select_stats);
+    view_allocate_model(select_stats->view, ViewModelTypeLockFree, sizeof(SelectPokemonModel));
+    with_view_model_cpp(
+        select_stats->view,
+        SelectPokemonModel*,
+        model,
+        {
+            model->current_stats = app->current_stats;
+        },
+        true);
+
+    view_set_draw_callback(select_stats->view, select_stats_render_callback);
+    view_set_input_callback(select_stats->view, select_stats_input_callback);
+    view_set_enter_callback(select_stats->view, select_stats_enter_callback);
+    view_set_custom_callback(select_stats->view, select_stats_custom_callback);
+
+    view_set_exit_callback(select_stats->view, select_stats_exit_callback);
+    return select_stats;
+}
+
+void select_stats_free(App* app) {
+    furi_assert(app->select_stats);
+    view_free(app->select_stats->view);
+    free(app->select_stats);
+}
+
+View* select_stats_get_view(App* app) {
+    furi_assert(app->select_stats);
+    return app->select_stats->view;
+}

+ 25 - 0
non_catalog_apps/gb-pokemon-trading/views/select_stats.hpp

@@ -0,0 +1,25 @@
+#ifndef SELECCT_STATS_HPP
+#define SELECCT_LEVEL_HPP
+
+#pragma once
+#include <furi.h>
+#include <gui/view.h>
+#include <gui/view_dispatcher.h>
+
+#include <gui/elements.h>
+#include <string>
+
+typedef struct App App;
+
+typedef struct {
+    View* view;
+    App* app;
+} SelectStats;
+
+SelectStats* select_stats_alloc(App* app);
+
+void select_stats_free(App* app);
+
+View* select_stats_get_view(App* app);
+
+#endif /* SELECCT_STATS_HPP */

+ 294 - 0
non_catalog_apps/gb-pokemon-trading/views/trade.cpp

@@ -34,6 +34,7 @@ int time_in_seconds = 0;
 static void trade_draw_callback(Canvas* canvas, void* context) {
     canvas_clear(canvas);
     SelectPokemonModel* model = (SelectPokemonModel*)context;
+
     if(!model->trading) {
         if(!model->connected) {
             furi_hal_light_set(LightGreen, 0x00);
@@ -298,6 +299,126 @@ void input_clk_gameboy(void* context) {
     transferBit(context);
     time = micros();
 }
+unsigned char convertCharToTagHex(char c) {
+    switch(c) {
+    case 'A':
+        return A_;
+    case 'B':
+        return B_;
+    case 'C':
+        return C_;
+    case 'D':
+        return D_;
+    case 'E':
+        return E_;
+    case 'F':
+        return F_;
+    case 'G':
+        return G_;
+    case 'H':
+        return H_;
+    case 'I':
+        return I_;
+    case 'J':
+        return J_;
+    case 'K':
+        return K_;
+    case 'L':
+        return L_;
+    case 'M':
+        return M_;
+    case 'N':
+        return N_;
+    case 'O':
+        return O_;
+    case 'P':
+        return P_;
+    case 'Q':
+        return Q_;
+    case 'R':
+        return R_;
+    case 'S':
+        return S_;
+    case 'T':
+        return T_;
+    case 'U':
+        return U_;
+    case 'V':
+        return V_;
+    case 'W':
+        return W_;
+    case 'X':
+        return X_;
+    case 'Y':
+        return Y_;
+    case 'Z':
+        return Z_;
+    case 'a':
+        return A_;
+    case 'b':
+        return B_;
+    case 'c':
+        return C_;
+    case 'd':
+        return D_;
+    case 'e':
+        return E_;
+    case 'f':
+        return F_;
+    case 'g':
+        return G_;
+    case 'h':
+        return H_;
+    case 'i':
+        return I_;
+    case 'j':
+        return J_;
+    case 'k':
+        return K_;
+    case 'l':
+        return L_;
+    case 'm':
+        return M_;
+    case 'n':
+        return N_;
+    case 'o':
+        return O_;
+    case 'p':
+        return P_;
+    case 'q':
+        return Q_;
+    case 'r':
+        return R_;
+    case 's':
+        return S_;
+    case 't':
+        return T_;
+    case 'u':
+        return U_;
+    case 'v':
+        return V_;
+    case 'w':
+        return W_;
+    case 'x':
+        return X_;
+    case 'y':
+        return Y_;
+    case 'z':
+        return Z_;
+    case ' ':
+        return SPACE_;
+    case '.':
+        return PERIOD_;
+    case '\'':
+        return S_QUOTE_;
+    case '!':
+        return MALE_;
+    case '@':
+        return FEMALE_;
+    default:
+        return 0x00;
+    }
+}
 void trade_enter_callback(void* context) {
     furi_assert(context);
     Trade* trade = (Trade*)context;
@@ -308,13 +429,186 @@ void trade_enter_callback(void* context) {
         {
             model->current_pokemon = trade->app->current_pokemon;
             model->pokemon_hex_code = trade->app->pokemon_hex_code;
+            model->current_level = trade->app->current_level;
+            model->current_stats = trade->app->current_stats;
+            model->current_move = trade->app->current_move;
+            model->move1_hex_code = trade->app->move1_hex_code;
+            model->move2_hex_code = trade->app->move2_hex_code;
+            model->move3_hex_code = trade->app->move3_hex_code;
+            model->move4_hex_code = trade->app->move4_hex_code;
             model->trading = false;
             model->connected = false;
             model->gameboy_status = GAMEBOY_INITIAL;
         },
         true);
 
+    FURI_LOG_D(TAG, "[Trade] Current Pokemon: %d", trade->app->current_pokemon);
+
+    // Set the Pokemon name
+
+    unsigned char nickname[11];
+    for(size_t i = 0; i < 11; ++i) {
+        nickname[i] = 0x50;
+    }
+    for(size_t i = 0; i < strlen(pokemon_table[trade->app->current_pokemon].name); ++i) {
+        nickname[i] = convertCharToTagHex(pokemon_table[trade->app->current_pokemon].name[i]);
+    }
+
+    memcpy(DATA_BLOCK2.nickname[0].str, nickname, sizeof(nickname));
+
+    FURI_LOG_D(TAG, "[Trade] Pokemon Name: %s", pokemon_table[trade->app->current_pokemon].name);
+
+    // Set the Pokemon hex code
+
     DATA_BLOCK[12] = trade->app->pokemon_hex_code;
+
+    FURI_LOG_D(TAG, "[Trade] Pokemon Hex Code: %x", trade->app->pokemon_hex_code);
+
+    // Set the Pokemon level
+
+    FURI_LOG_D(TAG, "[Trade] Current Level: %d", trade->app->current_level);
+
+    uint8_t level = trade->app->current_level;
+    DATA_BLOCK2.party[0].level = level & 0xFF;
+    DATA_BLOCK2.party[0].level_again = level & 0xFF;
+
+    FURI_LOG_D(TAG, "[Trade] Level Hex Code: %x", DATA_BLOCK2.party[0].level);
+
+    // Set the Pokemon experience
+
+    int32_t exp = 0;
+    if(pokemon_table[trade->app->current_pokemon].xp_group == 0) {
+        exp = 1.25 * level * level * level;
+    } else if(pokemon_table[trade->app->current_pokemon].xp_group == 1) {
+        exp = (1.2 * level * level * level) - (15 * level * level) + (100 * level) - 140;
+    } else if(pokemon_table[trade->app->current_pokemon].xp_group == 2) {
+        exp = level * level * level;
+    } else if(pokemon_table[trade->app->current_pokemon].xp_group == 3) {
+        exp = 0.8 * level * level * level;
+    }
+
+    DATA_BLOCK2.party[0].exp[0] = (exp >> 16) & 0xFF;
+    DATA_BLOCK2.party[0].exp[1] = (exp >> 8) & 0xFF;
+    DATA_BLOCK2.party[0].exp[2] = exp & 0xFF;
+
+    FURI_LOG_D(TAG, "[Trade] XP 1: %x", DATA_BLOCK2.party[0].exp[0]);
+    FURI_LOG_D(TAG, "[Trade] XP 2: %x", DATA_BLOCK2.party[0].exp[1]);
+    FURI_LOG_D(TAG, "[Trade] XP 3: %x", DATA_BLOCK2.party[0].exp[2]);
+
+    // Set the Pokemon stat experience
+
+    uint16_t statexp = 0x0000;
+    if(trade->app->current_stats == 1 || trade->app->current_stats == 4) {
+        statexp = (65535 / 100) * level;
+    } else if(trade->app->current_stats == 2 || trade->app->current_stats == 5) {
+        statexp = 65535;
+    }
+
+    DATA_BLOCK2.party[0].hp_ev = ((statexp >> 8) & 0x00FF) | ((statexp << 8) & 0xFF00);
+    DATA_BLOCK2.party[0].atk_ev = ((statexp >> 8) & 0x00FF) | ((statexp << 8) & 0xFF00);
+    DATA_BLOCK2.party[0].def_ev = ((statexp >> 8) & 0x00FF) | ((statexp << 8) & 0xFF00);
+    DATA_BLOCK2.party[0].spd_ev = ((statexp >> 8) & 0x00FF) | ((statexp << 8) & 0xFF00);
+    DATA_BLOCK2.party[0].special_ev = ((statexp >> 8) & 0x00FF) | ((statexp << 8) & 0xFF00);
+
+    FURI_LOG_D(TAG, "[Trade] Pokemon Stat EXP: %d", statexp);
+    FURI_LOG_D(TAG, "[Trade] Pokemon HP EV: %x", DATA_BLOCK2.party[0].hp_ev);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Attack EV: %x", DATA_BLOCK2.party[0].atk_ev);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Defence EV: %x", DATA_BLOCK2.party[0].def_ev);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Speed EV: %x", DATA_BLOCK2.party[0].spd_ev);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Special EV: %x", DATA_BLOCK2.party[0].special_ev);
+
+    // Set the Pokemon stats
+
+    uint8_t atk_iv = 15;
+    uint8_t def_iv = 15;
+    uint8_t spd_iv = 15;
+    uint8_t special_iv = 15;
+    uint8_t hp_iv = 15;
+    if(trade->app->current_stats <= 2) {
+        atk_iv = rand() % 15;
+        def_iv = rand() % 15;
+        spd_iv = rand() % 15;
+        special_iv = rand() % 15;
+        DATA_BLOCK2.party[0].iv = ((atk_iv & 0b00001111) << 12) | ((def_iv & 0b00001111) << 8) |
+                                  ((spd_iv & 0b00001111) << 4) | ((special_iv & 0b00001111));
+        hp_iv = (DATA_BLOCK2.party[0].iv & 0xAA) >> 4;
+    }
+
+    FURI_LOG_D(TAG, "[Trade] Pokemon IV: %x", DATA_BLOCK2.party[0].iv);
+    FURI_LOG_D(TAG, "[Trade] Pokemon HP IV: %x", hp_iv);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Attack IV: %x", atk_iv);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Defence IV: %x", def_iv);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Speed IV: %x", spd_iv);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Special IV: %x", special_iv);
+
+    uint16_t max_hp = floor(
+                          (((2 * (pokemon_table[trade->app->current_pokemon].base_hp + hp_iv)) +
+                            floor(sqrt(statexp) / 4)) *
+                           level) /
+                          100) +
+                      (level + 10);
+    DATA_BLOCK2.party[0].max_hp = ((max_hp >> 8) & 0x00FF) | ((max_hp << 8) & 0xFF00);
+    DATA_BLOCK2.party[0].hp = ((max_hp >> 8) & 0x00FF) | ((max_hp << 8) & 0xFF00);
+    uint16_t attack = floor(
+                          (((2 * (pokemon_table[trade->app->current_pokemon].base_atk + atk_iv)) +
+                            floor(sqrt(statexp) / 4)) *
+                           level) /
+                          100) +
+                      5;
+    DATA_BLOCK2.party[0].atk = ((attack >> 8) & 0x00FF) | ((attack << 8) & 0xFF00);
+    uint16_t defence = floor(
+                           (((2 * (pokemon_table[trade->app->current_pokemon].base_def + def_iv)) +
+                             floor(sqrt(statexp) / 4)) *
+                            level) /
+                           100) +
+                       5;
+    DATA_BLOCK2.party[0].def = ((defence >> 8) & 0x00FF) | ((defence << 8) & 0xFF00);
+    uint16_t speed = floor(
+                         (((2 * (pokemon_table[trade->app->current_pokemon].base_spd + spd_iv)) +
+                           floor(sqrt(statexp) / 4)) *
+                          level) /
+                         100) +
+                     5;
+    DATA_BLOCK2.party[0].spd = ((speed >> 8) & 0x00FF) | ((speed << 8) & 0xFF00);
+    uint16_t special =
+        floor(
+            (((2 * (pokemon_table[trade->app->current_pokemon].base_special + special_iv)) +
+              floor(sqrt(statexp) / 4)) *
+             level) /
+            100) +
+        5;
+    DATA_BLOCK2.party[0].special = ((special >> 8) & 0x00FF) | ((special << 8) & 0xFF00);
+
+    FURI_LOG_D(TAG, "[Trade] Pokemon Max HP: %x", DATA_BLOCK2.party[0].max_hp);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Attack: %x", DATA_BLOCK2.party[0].atk);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Defence: %x", DATA_BLOCK2.party[0].def);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Speed: %x", DATA_BLOCK2.party[0].spd);
+    FURI_LOG_D(TAG, "[Trade] Pokemon Special: %x", DATA_BLOCK2.party[0].special);
+
+    // Set the Pokemon types
+
+    DATA_BLOCK2.party[0].type[0] = pokemon_table[trade->app->current_pokemon].type1;
+    if(pokemon_table[trade->app->current_pokemon].type2 == 0xFF) {
+        DATA_BLOCK2.party[0].type[1] = pokemon_table[trade->app->current_pokemon].type1;
+    } else {
+        DATA_BLOCK2.party[0].type[1] = pokemon_table[trade->app->current_pokemon].type2;
+    }
+
+    FURI_LOG_D(TAG, "[Trade] Type 1: %x", DATA_BLOCK2.party[0].type[0]);
+    FURI_LOG_D(TAG, "[Trade] Type 2: %x", DATA_BLOCK2.party[0].type[1]);
+
+    // Set the Pokemon moves
+
+    DATA_BLOCK2.party[0].move[0] = trade->app->move1_hex_code;
+    DATA_BLOCK2.party[0].move[1] = trade->app->move2_hex_code;
+    DATA_BLOCK2.party[0].move[2] = trade->app->move3_hex_code;
+    DATA_BLOCK2.party[0].move[3] = trade->app->move4_hex_code;
+
+    FURI_LOG_D(TAG, "[Trade] Move 1 Hex Code: %x", trade->app->move1_hex_code);
+    FURI_LOG_D(TAG, "[Trade] Move 2 Hex Code: %x", trade->app->move2_hex_code);
+    FURI_LOG_D(TAG, "[Trade] Move 3 Hex Code: %x", trade->app->move3_hex_code);
+    FURI_LOG_D(TAG, "[Trade] Move 4 Hex Code: %x", trade->app->move4_hex_code);
+
     // B3 (Pin6) / SO (2)
     furi_hal_gpio_write(&GAME_BOY_SO, false);
     furi_hal_gpio_init(&GAME_BOY_SO, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh);

Някои файлове не бяха показани, защото твърде много файлове са промени