├── examples ├── pictureEmbed │ ├── .leonardo.test.skip │ ├── pictureEmbed.ino │ └── dragon.h ├── pyportal_boing │ ├── .pyportal.test.only │ └── pyportal_boing.ino ├── breakouttouchpaint │ ├── .esp8266.test.skip │ └── breakouttouchpaint.ino ├── onoffbutton_breakout │ ├── .esp8266.test.skip │ └── onoffbutton_breakout.ino ├── touchpaint_pyportal │ ├── .pyportal.test.only │ └── touchpaint_pyportal.ino ├── mandelbrot │ └── mandelbrot.ino ├── onoffbutton │ └── onoffbutton.ino ├── touchpaint │ └── touchpaint.ino ├── touchpaint_featherwing │ └── touchpaint_featherwing.ino ├── graphicstest_pyportal │ └── graphicstest_pyportal.ino ├── graphicstest │ └── graphicstest.ino └── graphicstest_featherwing │ └── graphicstest_featherwing.ino ├── .gitignore ├── library.properties ├── .github ├── workflows │ └── githubci.yml ├── PULL_REQUEST_TEMPLATE.md └── ISSUE_TEMPLATE.md ├── README.md ├── Adafruit_ILI9341.h └── Adafruit_ILI9341.cpp /examples/pictureEmbed/.leonardo.test.skip: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/pyportal_boing/.pyportal.test.only: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/breakouttouchpaint/.esp8266.test.skip: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/onoffbutton_breakout/.esp8266.test.skip: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/touchpaint_pyportal/.pyportal.test.only: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Our handy .gitignore for automation ease 2 | Doxyfile* 3 | doxygen_sqlite3.db 4 | html 5 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=Adafruit ILI9341 2 | version=1.6.2 3 | author=Adafruit 4 | maintainer=Adafruit 5 | sentence=Library for Adafruit ILI9341 displays 6 | paragraph=Library for Adafruit ILI9341 displays 7 | category=Display 8 | url=https://github.com/adafruit/Adafruit_ILI9341 9 | architectures=* 10 | depends=Adafruit GFX Library, Adafruit STMPE610, Adafruit TouchScreen, Adafruit TSC2007 11 | -------------------------------------------------------------------------------- /.github/workflows/githubci.yml: -------------------------------------------------------------------------------- 1 | name: Arduino Library CI 2 | 3 | on: [pull_request, push, repository_dispatch] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/setup-python@v4 11 | with: 12 | python-version: '3.x' 13 | - uses: actions/checkout@v3 14 | - uses: actions/checkout@v3 15 | with: 16 | repository: adafruit/ci-arduino 17 | path: ci 18 | 19 | - name: pre-install 20 | run: bash ci/actions_install.sh 21 | 22 | - name: test platforms 23 | run: python3 ci/build_platform.py main_platforms 24 | 25 | - name: clang 26 | run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r . 27 | 28 | - name: doxygen 29 | env: 30 | GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }} 31 | PRETTYNAME : "Adafruit ILI9341 Display Library" 32 | run: bash ci/doxy_gen_and_deploy.sh 33 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Thank you for creating a pull request to contribute to Adafruit's GitHub code! 2 | Before you open the request please review the following guidelines and tips to 3 | help it be more easily integrated: 4 | 5 | - **Describe the scope of your change--i.e. what the change does and what parts 6 | of the code were modified.** This will help us understand any risks of integrating 7 | the code. 8 | 9 | - **Describe any known limitations with your change.** For example if the change 10 | doesn't apply to a supported platform of the library please mention it. 11 | 12 | - **Please run any tests or examples that can exercise your modified code.** We 13 | strive to not break users of the code and running tests/examples helps with this 14 | process. 15 | 16 | Thank you again for contributing! We will try to test and integrate the change 17 | as soon as we can, but be aware we have many GitHub repositories to manage and 18 | can't immediately respond to every request. There is no need to bump or check in 19 | on a pull request (it will clutter the discussion of the request). 20 | 21 | Also don't be worried if the request is closed or not integrated--sometimes the 22 | priorities of Adafruit's GitHub code (education, ease of use) might not match the 23 | priorities of the pull request. Don't fret, the open source community thrives on 24 | forks and GitHub makes it easy to keep your changes in a forked repo. 25 | 26 | After reviewing the guidelines above you can delete this text from the pull request. 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Adafruit ILI9341 Arduino Library [![Build Status](https://github.com/adafruit/Adafruit_ILI9341/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_ILI9341/actions)[![Documentation](https://github.com/adafruit/ci-arduino/blob/master/assets/doxygen_badge.svg)](http://adafruit.github.io/Adafruit_ILI9341/html/index.html) 2 | 3 | This is a library for the Adafruit ILI9341 display products 4 | 5 | This library works with the Adafruit 2.8" Touch Shield V2 (SPI) 6 | * http://www.adafruit.com/products/1651 7 | 8 | Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341 9 | * https://www.adafruit.com/product/2478 10 | 11 | 2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket - ILI9341 12 | * https://www.adafruit.com/product/1770 13 | 14 | 2.2" 18-bit color TFT LCD display with microSD card breakout - ILI9340 15 | * https://www.adafruit.com/product/1480 16 | 17 | TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers 18 | * https://www.adafruit.com/product/3315 19 | 20 | Check out the links above for our tutorials and wiring diagrams. 21 | These displays use SPI to communicate, 4 or 5 pins are required 22 | to interface (RST is optional). 23 | 24 | **BMP image-loading examples have been moved to the Adafruit_ImageReader library:** 25 | https://github.com/adafruit/Adafruit_ImageReader 26 | 27 | Adafruit invests time and resources providing this open source code, 28 | please support Adafruit and open-source hardware by purchasing 29 | products from Adafruit! 30 | 31 | Written by Limor Fried/Ladyada for Adafruit Industries. 32 | MIT license, all text above must be included in any redistribution 33 | 34 | To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_ILI9341. Check that the Adafruit_ILI9341 folder contains Adafruit_ILI9341.cpp and Adafruit_ILI9341. 35 | 36 | Place the Adafruit_ILI9341 library folder your arduinosketchfolder/libraries/ folder. You may need to create the libraries subfolder if its your first library. Restart the IDE 37 | 38 | Also requires the [Adafruit_GFX](https://github.com/adafruit/Adafruit-GFX-Library) library for Arduino. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Thank you for opening an issue on an Adafruit Arduino library repository. To 2 | improve the speed of resolution please review the following guidelines and 3 | common troubleshooting steps below before creating the issue: 4 | 5 | - **Do not use GitHub issues for troubleshooting projects and issues.** Instead use 6 | the forums at http://forums.adafruit.com to ask questions and troubleshoot why 7 | something isn't working as expected. In many cases the problem is a common issue 8 | that you will more quickly receive help from the forum community. GitHub issues 9 | are meant for known defects in the code. If you don't know if there is a defect 10 | in the code then start with troubleshooting on the forum first. 11 | 12 | - **If following a tutorial or guide be sure you didn't miss a step.** Carefully 13 | check all of the steps and commands to run have been followed. Consult the 14 | forum if you're unsure or have questions about steps in a guide/tutorial. 15 | 16 | - **For Arduino projects check these very common issues to ensure they don't apply**: 17 | 18 | - For uploading sketches or communicating with the board make sure you're using 19 | a **USB data cable** and **not** a **USB charge-only cable**. It is sometimes 20 | very hard to tell the difference between a data and charge cable! Try using the 21 | cable with other devices or swapping to another cable to confirm it is not 22 | the problem. 23 | 24 | - **Be sure you are supplying adequate power to the board.** Check the specs of 25 | your board and plug in an external power supply. In many cases just 26 | plugging a board into your computer is not enough to power it and other 27 | peripherals. 28 | 29 | - **Double check all soldering joints and connections.** Flakey connections 30 | cause many mysterious problems. See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints. 31 | 32 | - **Ensure you are using an official Arduino or Adafruit board.** We can't 33 | guarantee a clone board will have the same functionality and work as expected 34 | with this code and don't support them. 35 | 36 | If you're sure this issue is a defect in the code and checked the steps above 37 | please fill in the following fields to provide enough troubleshooting information. 38 | You may delete the guideline and text above to just leave the following details: 39 | 40 | - Arduino board: **INSERT ARDUINO BOARD NAME/TYPE HERE** 41 | 42 | - Arduino IDE version (found in Arduino -> About Arduino menu): **INSERT ARDUINO 43 | VERSION HERE** 44 | 45 | - List the steps to reproduce the problem below (if possible attach a sketch or 46 | copy the sketch code in too): **LIST REPRO STEPS BELOW** 47 | -------------------------------------------------------------------------------- /examples/pictureEmbed/pictureEmbed.ino: -------------------------------------------------------------------------------- 1 | // ILI9341 example with embedded color bitmaps in sketch. 2 | // WILL NOT FIT ON ARDUINO UNO OR OTHER AVR BOARDS; 3 | // uses large bitmap image stored in array! 4 | 5 | // Options for converting images to the format used here include: 6 | // http://www.rinkydinkelectronics.com/t_imageconverter565.php 7 | // or 8 | // GIMP (https://www.gimp.org/) as follows: 9 | // 1. File -> Export As 10 | // 2. In Export Image dialog, use 'C source code (*.c)' as filetype. 11 | // 3. Press export to get the export options dialog. 12 | // 4. Type the desired variable name into the 'prefixed name' box. 13 | // 5. Uncheck 'GLIB types (guint8*)' 14 | // 6. Check 'Save as RGB565 (16-bit)' 15 | // 7. Press export to save your image. 16 | // Assuming 'image_name' was typed in the 'prefixed name' box of step 4, 17 | // you can have to include the c file, then using the image can be done with: 18 | // tft.drawRGBBitmap(0, 0, image_name.pixel_data, image_name.width, image_name.height); 19 | // See also https://forum.pjrc.com/threads/35575-Export-for-ILI9341_t3-with-GIMP 20 | 21 | #include "SPI.h" 22 | #include 23 | #include "dragon.h" 24 | 25 | // For the Adafruit shield, these are the default. 26 | //#define TFT_DC 9 27 | //#define TFT_CS 10 28 | 29 | // Feather 32u4 or M0 with TFT FeatherWing: 30 | #define TFT_DC 10 31 | #define TFT_CS 9 32 | // ESP8266: 33 | //#define TFT_DC 15 34 | //#define TFT_CS 0 35 | // Other boards (including Feather boards) may have other pinouts; 36 | // see learn.adafruit.com/adafruit-2-4-tft-touch-screen-featherwing/pinouts 37 | 38 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 39 | // If using the breakout, change pins as desired 40 | //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); 41 | 42 | void setup() { 43 | tft.begin(); 44 | } 45 | 46 | void loop(void) { 47 | for(uint8_t r=0; r<4; r++) { 48 | tft.setRotation(r); 49 | tft.fillScreen(ILI9341_BLACK); 50 | for(uint8_t j=0; j<20; j++) { 51 | tft.drawRGBBitmap( 52 | random(-DRAGON_WIDTH , tft.width()), 53 | random(-DRAGON_HEIGHT, tft.height()), 54 | #if defined(__AVR__) || defined(ESP8266) 55 | dragonBitmap, 56 | #else 57 | // Some non-AVR MCU's have a "flat" memory model and don't 58 | // distinguish between flash and RAM addresses. In this case, 59 | // the RAM-resident-optimized drawRGBBitmap in the ILI9341 60 | // library can be invoked by forcibly type-converting the 61 | // PROGMEM bitmap pointer to a non-const uint16_t *. 62 | (uint16_t *)dragonBitmap, 63 | #endif 64 | DRAGON_WIDTH, DRAGON_HEIGHT); 65 | delay(1); // Allow ESP8266 to handle watchdog & WiFi stuff 66 | } 67 | delay(3000); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /examples/mandelbrot/mandelbrot.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifdef ADAFRUIT_PYPORTAL 4 | #define TFT_D0 34 // Data bit 0 pin (MUST be on PORT byte boundary) 5 | #define TFT_WR 26 // Write-strobe pin (CCL-inverted timer output) 6 | #define TFT_DC 10 // Data/command pin 7 | #define TFT_CS 11 // Chip-select pin 8 | #define TFT_RST 24 // Reset pin 9 | #define TFT_RD 9 // Read-strobe pin 10 | #define TFT_BACKLIGHT 25 11 | // ILI9341 with 8-bit parallel interface: 12 | Adafruit_ILI9341 tft = Adafruit_ILI9341(tft8bitbus, TFT_D0, TFT_WR, TFT_DC, TFT_CS, TFT_RST, TFT_RD); 13 | #define USE_BUFFER // buffer all 155 KB of data for bliting - uses passive ram but looks nicer? 14 | #else 15 | // Use SPI 16 | #define STMPE_CS 6 17 | #define TFT_CS 9 18 | #define TFT_DC 10 19 | #define SD_CS 5 20 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 21 | #endif 22 | 23 | 24 | const int16_t 25 | bits = 20, // Fractional resolution 26 | pixelWidth = 320, // TFT dimensions 27 | pixelHeight = 240, 28 | iterations = 128; // Fractal iteration limit or 'dwell' 29 | float 30 | centerReal = -0.6, // Image center point in complex plane 31 | centerImag = 0.0, 32 | rangeReal = 3.0, // Image coverage in complex plane 33 | rangeImag = 3.0; 34 | 35 | #if defined(USE_BUFFER) 36 | uint16_t buffer[pixelWidth * pixelHeight]; 37 | #endif 38 | 39 | void setup(void) { 40 | Serial.begin(115200); 41 | Serial.print("Mandelbrot drawer!"); 42 | 43 | tft.begin(); 44 | tft.setRotation(1); 45 | tft.fillScreen(ILI9341_BLACK); 46 | 47 | // Turn on backlight (required on PyPortal) 48 | #if defined(TFT_BACKLIGHT) 49 | pinMode(TFT_BACKLIGHT, OUTPUT); 50 | digitalWrite(TFT_BACKLIGHT, HIGH); 51 | #endif 52 | } 53 | 54 | void loop() { 55 | int64_t n, a, b, a2, b2, posReal, posImag; 56 | uint32_t startTime,elapsedTime; 57 | 58 | 59 | int32_t 60 | startReal = (int64_t)((centerReal - rangeReal * 0.5) * (float)(1 << bits)), 61 | startImag = (int64_t)((centerImag + rangeImag * 0.5) * (float)(1 << bits)), 62 | incReal = (int64_t)((rangeReal / (float)pixelWidth) * (float)(1 << bits)), 63 | incImag = (int64_t)((rangeImag / (float)pixelHeight) * (float)(1 << bits)); 64 | 65 | startTime = millis(); 66 | posImag = startImag; 67 | for (int y = 0; y < pixelHeight; y++) { 68 | posReal = startReal; 69 | for (int x = 0; x < pixelWidth; x++) { 70 | a = posReal; 71 | b = posImag; 72 | for (n = iterations; n > 0 ; n--) { 73 | a2 = (a * a) >> bits; 74 | b2 = (b * b) >> bits; 75 | if ((a2 + b2) >= (4 << bits)) 76 | break; 77 | b = posImag + ((a * b) >> (bits - 1)); 78 | a = posReal + a2 - b2; 79 | } 80 | #if defined(USE_BUFFER) 81 | buffer[y * pixelWidth + x] = (n * 29)<<8 | (n * 67); 82 | #else 83 | tft.drawPixel(x, y, (n * 29)<<8 | (n * 67)); // takes 500ms with individual pixel writes 84 | #endif 85 | posReal += incReal; 86 | } 87 | posImag -= incImag; 88 | } 89 | #if defined(USE_BUFFER) 90 | tft.drawRGBBitmap(0, 0, buffer, pixelWidth, pixelHeight); // takes 169 ms 91 | #endif 92 | elapsedTime = millis()-startTime; 93 | Serial.print("Took "); Serial.print(elapsedTime); Serial.println(" ms"); 94 | 95 | rangeReal *= 0.95; 96 | rangeImag *= 0.95; 97 | } 98 | -------------------------------------------------------------------------------- /examples/onoffbutton/onoffbutton.ino: -------------------------------------------------------------------------------- 1 | //This example implements a simple sliding On/Off button. The example 2 | // demonstrates drawing and touch operations. 3 | // 4 | //Thanks to Adafruit forums member Asteroid for the original sketch! 5 | // 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | // This is calibration data for the raw touch data to the screen coordinates 13 | #define TS_MINX 150 14 | #define TS_MINY 130 15 | #define TS_MAXX 3800 16 | #define TS_MAXY 4000 17 | 18 | #define STMPE_CS 8 19 | Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); 20 | #define TFT_CS 10 21 | #define TFT_DC 9 22 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 23 | 24 | boolean RecordOn = false; 25 | 26 | #define FRAME_X 210 27 | #define FRAME_Y 180 28 | #define FRAME_W 100 29 | #define FRAME_H 50 30 | 31 | #define REDBUTTON_X FRAME_X 32 | #define REDBUTTON_Y FRAME_Y 33 | #define REDBUTTON_W (FRAME_W/2) 34 | #define REDBUTTON_H FRAME_H 35 | 36 | #define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W) 37 | #define GREENBUTTON_Y FRAME_Y 38 | #define GREENBUTTON_W (FRAME_W/2) 39 | #define GREENBUTTON_H FRAME_H 40 | 41 | void drawFrame() 42 | { 43 | tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, ILI9341_BLACK); 44 | } 45 | 46 | void redBtn() 47 | { 48 | tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_RED); 49 | tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_BLUE); 50 | drawFrame(); 51 | tft.setCursor(GREENBUTTON_X + 6 , GREENBUTTON_Y + (GREENBUTTON_H/2)); 52 | tft.setTextColor(ILI9341_WHITE); 53 | tft.setTextSize(2); 54 | tft.println("ON"); 55 | RecordOn = false; 56 | } 57 | 58 | void greenBtn() 59 | { 60 | tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_GREEN); 61 | tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_BLUE); 62 | drawFrame(); 63 | tft.setCursor(REDBUTTON_X + 6 , REDBUTTON_Y + (REDBUTTON_H/2)); 64 | tft.setTextColor(ILI9341_WHITE); 65 | tft.setTextSize(2); 66 | tft.println("OFF"); 67 | RecordOn = true; 68 | } 69 | 70 | void setup(void) 71 | { 72 | Serial.begin(9600); 73 | tft.begin(); 74 | if (!ts.begin()) { 75 | Serial.println("Unable to start touchscreen."); 76 | } 77 | else { 78 | Serial.println("Touchscreen started."); 79 | } 80 | 81 | tft.fillScreen(ILI9341_BLUE); 82 | // origin = left,top landscape (USB left upper) 83 | tft.setRotation(1); 84 | redBtn(); 85 | } 86 | 87 | void loop() 88 | { 89 | // See if there's any touch data for us 90 | if (!ts.bufferEmpty()) 91 | { 92 | // Retrieve a point 93 | TS_Point p = ts.getPoint(); 94 | // Scale using the calibration #'s 95 | // and rotate coordinate system 96 | p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height()); 97 | p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width()); 98 | int y = tft.height() - p.x; 99 | int x = p.y; 100 | 101 | if (RecordOn) 102 | { 103 | if((x > REDBUTTON_X) && (x < (REDBUTTON_X + REDBUTTON_W))) { 104 | if ((y > REDBUTTON_Y) && (y <= (REDBUTTON_Y + REDBUTTON_H))) { 105 | Serial.println("Red btn hit"); 106 | redBtn(); 107 | } 108 | } 109 | } 110 | else //Record is off (RecordOn == false) 111 | { 112 | if((x > GREENBUTTON_X) && (x < (GREENBUTTON_X + GREENBUTTON_W))) { 113 | if ((y > GREENBUTTON_Y) && (y <= (GREENBUTTON_Y + GREENBUTTON_H))) { 114 | Serial.println("Green btn hit"); 115 | greenBtn(); 116 | } 117 | } 118 | } 119 | 120 | Serial.println(RecordOn); 121 | } 122 | } 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /examples/onoffbutton_breakout/onoffbutton_breakout.ino: -------------------------------------------------------------------------------- 1 | //This example implements a simple sliding On/Off button. The example 2 | // demonstrates drawing and touch operations. 3 | // 4 | //Thanks to Adafruit forums member Asteroid for the original sketch! 5 | // 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | //Touchscreen X+ X- Y+ Y- pins 13 | #define YP A3 // must be an analog pin, use "An" notation! 14 | #define XM A2 // must be an analog pin, use "An" notation! 15 | #define YM 5 // can be a digital pin 16 | #define XP 4 // can be a digital pin 17 | 18 | // This is calibration data for the raw touch data to the screen coordinates 19 | #define TS_MINX 150 20 | #define TS_MINY 120 21 | #define TS_MAXX 920 22 | #define TS_MAXY 940 23 | 24 | #define MINPRESSURE 10 25 | #define MAXPRESSURE 1000 26 | 27 | // For better pressure precision, we need to know the resistance 28 | // between X+ and X- Use any multimeter to read it 29 | // For the one we're using, its 300 ohms across the X plate 30 | TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); 31 | 32 | 33 | #define TFT_CS 10 34 | #define TFT_DC 9 35 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 36 | 37 | boolean RecordOn = false; 38 | 39 | #define FRAME_X 210 40 | #define FRAME_Y 180 41 | #define FRAME_W 100 42 | #define FRAME_H 50 43 | 44 | #define REDBUTTON_X FRAME_X 45 | #define REDBUTTON_Y FRAME_Y 46 | #define REDBUTTON_W (FRAME_W/2) 47 | #define REDBUTTON_H FRAME_H 48 | 49 | #define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W) 50 | #define GREENBUTTON_Y FRAME_Y 51 | #define GREENBUTTON_W (FRAME_W/2) 52 | #define GREENBUTTON_H FRAME_H 53 | 54 | void drawFrame() 55 | { 56 | tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, ILI9341_BLACK); 57 | } 58 | 59 | void redBtn() 60 | { 61 | tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_RED); 62 | tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_BLUE); 63 | drawFrame(); 64 | tft.setCursor(GREENBUTTON_X + 6 , GREENBUTTON_Y + (GREENBUTTON_H/2)); 65 | tft.setTextColor(ILI9341_WHITE); 66 | tft.setTextSize(2); 67 | tft.println("ON"); 68 | RecordOn = false; 69 | } 70 | 71 | void greenBtn() 72 | { 73 | tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_GREEN); 74 | tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_BLUE); 75 | drawFrame(); 76 | tft.setCursor(REDBUTTON_X + 6 , REDBUTTON_Y + (REDBUTTON_H/2)); 77 | tft.setTextColor(ILI9341_WHITE); 78 | tft.setTextSize(2); 79 | tft.println("OFF"); 80 | RecordOn = true; 81 | } 82 | 83 | void setup(void) 84 | { 85 | Serial.begin(9600); 86 | tft.begin(); 87 | 88 | tft.fillScreen(ILI9341_BLUE); 89 | // origin = left,top landscape (USB left upper) 90 | tft.setRotation(1); 91 | redBtn(); 92 | } 93 | 94 | void loop() 95 | { 96 | // Retrieve a point 97 | TSPoint p = ts.getPoint(); 98 | 99 | // See if there's any touch data for us 100 | if (p.z > MINPRESSURE && p.z < MAXPRESSURE) 101 | { 102 | // Scale using the calibration #'s 103 | // and rotate coordinate system 104 | p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height()); 105 | p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width()); 106 | int y = tft.height() - p.x; 107 | int x = p.y; 108 | 109 | if (RecordOn) 110 | { 111 | if((x > REDBUTTON_X) && (x < (REDBUTTON_X + REDBUTTON_W))) { 112 | if ((y > REDBUTTON_Y) && (y <= (REDBUTTON_Y + REDBUTTON_H))) { 113 | Serial.println("Red btn hit"); 114 | redBtn(); 115 | } 116 | } 117 | } 118 | else //Record is off (RecordOn == false) 119 | { 120 | if((x > GREENBUTTON_X) && (x < (GREENBUTTON_X + GREENBUTTON_W))) { 121 | if ((y > GREENBUTTON_Y) && (y <= (GREENBUTTON_Y + GREENBUTTON_H))) { 122 | Serial.println("Green btn hit"); 123 | greenBtn(); 124 | } 125 | } 126 | } 127 | 128 | Serial.println(RecordOn); 129 | } 130 | } 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /examples/touchpaint_pyportal/touchpaint_pyportal.ino: -------------------------------------------------------------------------------- 1 | #include "Adafruit_ILI9341.h" 2 | #include "TouchScreen.h" 3 | 4 | #define YP A4 5 | #define XM A7 6 | #define YM A6 7 | #define XP A5 8 | TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); 9 | #define X_MIN 325 10 | #define X_MAX 750 11 | #define Y_MIN 840 12 | #define Y_MAX 240 13 | 14 | // Pin settings for PyPortal 15 | #define TFT_D0 34 // Data bit 0 pin (MUST be on PORT byte boundary) 16 | #define TFT_WR 26 // Write-strobe pin (CCL-inverted timer output) 17 | #define TFT_DC 10 // Data/command pin 18 | #define TFT_CS 11 // Chip-select pin 19 | #define TFT_RST 24 // Reset pin 20 | #define TFT_RD 9 // Read-strobe pin 21 | #define TFT_BACKLIGHT 25 22 | // ILI9341 with 8-bit parallel interface: 23 | Adafruit_ILI9341 tft = Adafruit_ILI9341(tft8bitbus, TFT_D0, TFT_WR, TFT_DC, TFT_CS, TFT_RST, TFT_RD); 24 | 25 | // Size of the color selection boxes and the paintbrush size 26 | #define BOXSIZE 40 27 | #define PENRADIUS 3 28 | int oldcolor, currentcolor; 29 | 30 | void setup(void) { 31 | // while (!Serial); // used for leonardo debugging 32 | 33 | delay(100); 34 | Serial.begin(9600); 35 | Serial.println(F("Touch Paint!")); 36 | 37 | tft.begin(); 38 | 39 | tft.fillScreen(ILI9341_BLACK); 40 | 41 | // make the color selection boxes 42 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 43 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 44 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 45 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 46 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 47 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 48 | 49 | // select the current color 'red' 50 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 51 | currentcolor = ILI9341_RED; 52 | 53 | pinMode(TFT_BACKLIGHT, OUTPUT); 54 | digitalWrite(TFT_BACKLIGHT, HIGH); 55 | 56 | } 57 | 58 | 59 | void loop() 60 | { 61 | TSPoint p = ts.getPoint(); 62 | // we have some minimum pressure we consider 'valid' 63 | // pressure of 0 means no pressing! 64 | if ((p.z < 100) || (p.z > 1000)) { 65 | return; 66 | } 67 | Serial.print("X = "); Serial.print(p.x); 68 | Serial.print("\tY = "); Serial.print(p.y); 69 | Serial.print("\tPressure = "); Serial.println(p.z); 70 | p.x = map(p.x, X_MIN, X_MAX, 0, 240); 71 | p.y = map(p.y, Y_MIN, Y_MAX, 0, 320); 72 | 73 | if (p.y < BOXSIZE) { 74 | oldcolor = currentcolor; 75 | 76 | if (p.x < BOXSIZE) { 77 | currentcolor = ILI9341_RED; 78 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 79 | } else if (p.x < BOXSIZE*2) { 80 | currentcolor = ILI9341_YELLOW; 81 | tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 82 | } else if (p.x < BOXSIZE*3) { 83 | currentcolor = ILI9341_GREEN; 84 | tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 85 | } else if (p.x < BOXSIZE*4) { 86 | currentcolor = ILI9341_CYAN; 87 | tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 88 | } else if (p.x < BOXSIZE*5) { 89 | currentcolor = ILI9341_BLUE; 90 | tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 91 | } else if (p.x < BOXSIZE*6) { 92 | currentcolor = ILI9341_MAGENTA; 93 | tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 94 | } 95 | 96 | if (oldcolor != currentcolor) { 97 | if (oldcolor == ILI9341_RED) 98 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 99 | if (oldcolor == ILI9341_YELLOW) 100 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 101 | if (oldcolor == ILI9341_GREEN) 102 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 103 | if (oldcolor == ILI9341_CYAN) 104 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 105 | if (oldcolor == ILI9341_BLUE) 106 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 107 | if (oldcolor == ILI9341_MAGENTA) 108 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 109 | } 110 | } 111 | if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) { 112 | tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /examples/touchpaint/touchpaint.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is our touchscreen painting example for the Adafruit ILI9341 Shield 3 | ----> http://www.adafruit.com/products/1651 4 | 5 | Check out the links above for our tutorials and wiring diagrams 6 | These displays use SPI to communicate, 4 or 5 pins are required to 7 | interface (RST is optional) 8 | Adafruit invests time and resources providing this open source code, 9 | please support Adafruit and open-source hardware by purchasing 10 | products from Adafruit! 11 | 12 | Written by Limor Fried/Ladyada for Adafruit Industries. 13 | MIT license, all text above must be included in any redistribution 14 | ****************************************************/ 15 | 16 | 17 | #include // Core graphics library 18 | #include 19 | #include // this is needed even tho we aren't using it 20 | #include 21 | #include 22 | 23 | // This is calibration data for the raw touch data to the screen coordinates 24 | #define TS_MINX 150 25 | #define TS_MINY 130 26 | #define TS_MAXX 3800 27 | #define TS_MAXY 4000 28 | 29 | // The STMPE610 uses hardware SPI on the shield, and #8 30 | #define STMPE_CS 8 31 | Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); 32 | 33 | // The display also uses hardware SPI, plus #9 & #10 34 | #define TFT_CS 10 35 | #define TFT_DC 9 36 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 37 | 38 | // Size of the color selection boxes and the paintbrush size 39 | #define BOXSIZE 40 40 | #define PENRADIUS 3 41 | int oldcolor, currentcolor; 42 | 43 | void setup(void) { 44 | // while (!Serial); // used for leonardo debugging 45 | 46 | Serial.begin(9600); 47 | Serial.println(F("Touch Paint!")); 48 | 49 | tft.begin(); 50 | 51 | if (!ts.begin()) { 52 | Serial.println("Couldn't start touchscreen controller"); 53 | while (1); 54 | } 55 | Serial.println("Touchscreen started"); 56 | 57 | tft.fillScreen(ILI9341_BLACK); 58 | 59 | // make the color selection boxes 60 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 61 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 62 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 63 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 64 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 65 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 66 | 67 | // select the current color 'red' 68 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 69 | currentcolor = ILI9341_RED; 70 | } 71 | 72 | 73 | void loop() 74 | { 75 | // See if there's any touch data for us 76 | if (ts.bufferEmpty()) { 77 | return; 78 | } 79 | /* 80 | // You can also wait for a touch 81 | if (! ts.touched()) { 82 | return; 83 | } 84 | */ 85 | 86 | // Retrieve a point 87 | TS_Point p = ts.getPoint(); 88 | 89 | /* 90 | Serial.print("X = "); Serial.print(p.x); 91 | Serial.print("\tY = "); Serial.print(p.y); 92 | Serial.print("\tPressure = "); Serial.println(p.z); 93 | */ 94 | 95 | // Scale from ~0->4000 to tft.width using the calibration #'s 96 | p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); 97 | p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); 98 | 99 | /* 100 | Serial.print("("); Serial.print(p.x); 101 | Serial.print(", "); Serial.print(p.y); 102 | Serial.println(")"); 103 | */ 104 | 105 | if (p.y < BOXSIZE) { 106 | oldcolor = currentcolor; 107 | 108 | if (p.x < BOXSIZE) { 109 | currentcolor = ILI9341_RED; 110 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 111 | } else if (p.x < BOXSIZE*2) { 112 | currentcolor = ILI9341_YELLOW; 113 | tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 114 | } else if (p.x < BOXSIZE*3) { 115 | currentcolor = ILI9341_GREEN; 116 | tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 117 | } else if (p.x < BOXSIZE*4) { 118 | currentcolor = ILI9341_CYAN; 119 | tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 120 | } else if (p.x < BOXSIZE*5) { 121 | currentcolor = ILI9341_BLUE; 122 | tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 123 | } else if (p.x < BOXSIZE*6) { 124 | currentcolor = ILI9341_MAGENTA; 125 | tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 126 | } 127 | 128 | if (oldcolor != currentcolor) { 129 | if (oldcolor == ILI9341_RED) 130 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 131 | if (oldcolor == ILI9341_YELLOW) 132 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 133 | if (oldcolor == ILI9341_GREEN) 134 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 135 | if (oldcolor == ILI9341_CYAN) 136 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 137 | if (oldcolor == ILI9341_BLUE) 138 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 139 | if (oldcolor == ILI9341_MAGENTA) 140 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 141 | } 142 | } 143 | if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) { 144 | tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /examples/breakouttouchpaint/breakouttouchpaint.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is our touchscreen painting example for the Adafruit ILI9341 Breakout 3 | ----> http://www.adafruit.com/products/1770 4 | 5 | Check out the links above for our tutorials and wiring diagrams 6 | These displays use SPI to communicate, 4 or 5 pins are required to 7 | interface (RST is optional) 8 | Adafruit invests time and resources providing this open source code, 9 | please support Adafruit and open-source hardware by purchasing 10 | products from Adafruit! 11 | 12 | Written by Limor Fried/Ladyada for Adafruit Industries. 13 | MIT license, all text above must be included in any redistribution 14 | ****************************************************/ 15 | 16 | /** NOT FOR USE WITH THE TOUCH SHIELD, ONLY FOR THE BREAKOUT! **/ 17 | 18 | #include // Core graphics library 19 | #include 20 | #include 21 | #include "TouchScreen.h" 22 | 23 | // These are the four touchscreen analog pins 24 | #define YP A2 // must be an analog pin, use "An" notation! 25 | #define XM A3 // must be an analog pin, use "An" notation! 26 | #define YM 8 // can be any digital pin 27 | #define XP 9 // can be any digital pin 28 | 29 | // This is calibration data for the raw touch data to the screen coordinates 30 | #define TS_MINX 150 31 | #define TS_MINY 120 32 | #define TS_MAXX 920 33 | #define TS_MAXY 940 34 | 35 | #define MINPRESSURE 10 36 | #define MAXPRESSURE 1000 37 | 38 | // The display uses hardware SPI, plus #9 & #10 39 | #define TFT_CS 10 40 | #define TFT_DC 9 41 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 42 | 43 | // For better pressure precision, we need to know the resistance 44 | // between X+ and X- Use any multimeter to read it 45 | // For the one we're using, its 300 ohms across the X plate 46 | TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); 47 | 48 | // Size of the color selection boxes and the paintbrush size 49 | #define BOXSIZE 40 50 | #define PENRADIUS 3 51 | int oldcolor, currentcolor; 52 | 53 | void setup(void) { 54 | // while (!Serial); // used for leonardo debugging 55 | 56 | Serial.begin(9600); 57 | Serial.println(F("Touch Paint!")); 58 | 59 | tft.begin(); 60 | tft.fillScreen(ILI9341_BLACK); 61 | 62 | // make the color selection boxes 63 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 64 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 65 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 66 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 67 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 68 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 69 | 70 | // select the current color 'red' 71 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 72 | currentcolor = ILI9341_RED; 73 | } 74 | 75 | 76 | void loop() 77 | { 78 | // Retrieve a point 79 | TSPoint p = ts.getPoint(); 80 | 81 | /* 82 | Serial.print("X = "); Serial.print(p.x); 83 | Serial.print("\tY = "); Serial.print(p.y); 84 | Serial.print("\tPressure = "); Serial.println(p.z); 85 | */ 86 | 87 | // we have some minimum pressure we consider 'valid' 88 | // pressure of 0 means no pressing! 89 | if (p.z < MINPRESSURE || p.z > MAXPRESSURE) { 90 | return; 91 | } 92 | 93 | // Scale from ~0->1000 to tft.width using the calibration #'s 94 | p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); 95 | p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); 96 | 97 | /* 98 | Serial.print("("); Serial.print(p.x); 99 | Serial.print(", "); Serial.print(p.y); 100 | Serial.println(")"); 101 | */ 102 | 103 | 104 | if (p.y < BOXSIZE) { 105 | oldcolor = currentcolor; 106 | 107 | if (p.x < BOXSIZE) { 108 | currentcolor = ILI9341_RED; 109 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 110 | } else if (p.x < BOXSIZE*2) { 111 | currentcolor = ILI9341_YELLOW; 112 | tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 113 | } else if (p.x < BOXSIZE*3) { 114 | currentcolor = ILI9341_GREEN; 115 | tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 116 | } else if (p.x < BOXSIZE*4) { 117 | currentcolor = ILI9341_CYAN; 118 | tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 119 | } else if (p.x < BOXSIZE*5) { 120 | currentcolor = ILI9341_BLUE; 121 | tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 122 | } else if (p.x < BOXSIZE*6) { 123 | currentcolor = ILI9341_MAGENTA; 124 | tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 125 | } 126 | 127 | if (oldcolor != currentcolor) { 128 | if (oldcolor == ILI9341_RED) 129 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 130 | if (oldcolor == ILI9341_YELLOW) 131 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 132 | if (oldcolor == ILI9341_GREEN) 133 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 134 | if (oldcolor == ILI9341_CYAN) 135 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 136 | if (oldcolor == ILI9341_BLUE) 137 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 138 | if (oldcolor == ILI9341_MAGENTA) 139 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 140 | } 141 | } 142 | if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) { 143 | tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /examples/pyportal_boing/pyportal_boing.ino: -------------------------------------------------------------------------------- 1 | // 'Boing' ball demo for PyPortal. 2 | // Requires Adafruit_GFX 1.4.5 or later and Adafruit_DMA 3 | 4 | #include "Adafruit_GFX.h" 5 | #include "Adafruit_ILI9341.h" 6 | #define SCREENWIDTH ILI9341_TFTHEIGHT // Native display orientation is 7 | #define SCREENHEIGHT ILI9341_TFTWIDTH // vertical, so swap width/height 8 | #include "graphics.h" 9 | 10 | #define TFT_D0 34 // Data bit 0 pin (MUST be on PORT byte boundary) 11 | #define TFT_WR 26 // Write-strobe pin (CCL-inverted timer output) 12 | #define TFT_DC 10 // Data/command pin 13 | #define TFT_CS 11 // Chip-select pin 14 | #define TFT_RST 24 // Reset pin 15 | #define TFT_RD 9 // Read-strobe pin 16 | #define TFT_BACKLIGHT 25 17 | 18 | // ILI9341 with 8-bit parallel interface: 19 | Adafruit_ILI9341 tft(tft8bitbus, TFT_D0, TFT_WR, TFT_DC, TFT_CS, TFT_RST, TFT_RD); 20 | 21 | #define BGCOLOR 0xAD75 22 | #define GRIDCOLOR 0xA815 23 | #define BGSHADOW 0x5285 24 | #define GRIDSHADOW 0x600C 25 | #define RED 0xF800 26 | #define WHITE 0xFFFF 27 | 28 | #define YBOTTOM 123 // Ball Y coord at bottom 29 | #define YBOUNCE -3.5 // Upward velocity on ball bounce 30 | 31 | // Ball coordinates are stored floating-point because screen refresh 32 | // is so quick, whole-pixel movements are just too fast! 33 | float ballx = 20.0, bally = YBOTTOM, // Current ball position 34 | ballvx = 0.8, ballvy = YBOUNCE, // Ball velocity 35 | ballframe = 3; // Ball animation frame # 36 | int balloldx = ballx, balloldy = bally; // Prior ball position 37 | 38 | // Working buffer for ball rendering...2 scanlines that alternate, 39 | // one is rendered while the other is transferred via DMA. 40 | uint16_t renderbuf[2][SCREENWIDTH]; 41 | 42 | uint16_t palette[16]; // Color table for ball rotation effect 43 | 44 | uint32_t startTime, frame = 0; // For frames-per-second estimate 45 | 46 | void setup() { 47 | Serial.begin(9600); 48 | // while(!Serial); 49 | 50 | // Turn on backlight (required on PyPortal) 51 | pinMode(TFT_BACKLIGHT, OUTPUT); 52 | digitalWrite(TFT_BACKLIGHT, HIGH); 53 | 54 | tft.begin(); 55 | tft.setRotation(3); // Landscape orientation, USB at bottom right 56 | 57 | // Draw initial framebuffer contents: 58 | tft.drawBitmap(0, 0, (uint8_t *)background, 59 | SCREENWIDTH, SCREENHEIGHT, GRIDCOLOR, BGCOLOR); 60 | 61 | startTime = millis(); 62 | } 63 | 64 | void loop() { 65 | 66 | balloldx = (int16_t)ballx; // Save prior position 67 | balloldy = (int16_t)bally; 68 | ballx += ballvx; // Update position 69 | bally += ballvy; 70 | ballvy += 0.06; // Update Y velocity 71 | if((ballx <= 15) || (ballx >= SCREENWIDTH - BALLWIDTH)) 72 | ballvx *= -1; // Left/right bounce 73 | if(bally >= YBOTTOM) { // Hit ground? 74 | bally = YBOTTOM; // Clip and 75 | ballvy = YBOUNCE; // bounce up 76 | } 77 | 78 | // Determine screen area to update. This is the bounds of the ball's 79 | // prior and current positions, so the old ball is fully erased and new 80 | // ball is fully drawn. 81 | int16_t minx, miny, maxx, maxy, width, height; 82 | // Determine bounds of prior and new positions 83 | minx = ballx; 84 | if(balloldx < minx) minx = balloldx; 85 | miny = bally; 86 | if(balloldy < miny) miny = balloldy; 87 | maxx = ballx + BALLWIDTH - 1; 88 | if((balloldx + BALLWIDTH - 1) > maxx) maxx = balloldx + BALLWIDTH - 1; 89 | maxy = bally + BALLHEIGHT - 1; 90 | if((balloldy + BALLHEIGHT - 1) > maxy) maxy = balloldy + BALLHEIGHT - 1; 91 | 92 | width = maxx - minx + 1; 93 | height = maxy - miny + 1; 94 | 95 | // Ball animation frame # is incremented opposite the ball's X velocity 96 | ballframe -= ballvx * 0.5; 97 | if(ballframe < 0) ballframe += 14; // Constrain from 0 to 13 98 | else if(ballframe >= 14) ballframe -= 14; 99 | 100 | // Set 7 palette entries to white, 7 to red, based on frame number. 101 | // This makes the ball spin 102 | for(uint8_t i=0; i<14; i++) { 103 | palette[i+2] = ((((int)ballframe + i) % 14) < 7) ? WHITE : RED; 104 | // Palette entries 0 and 1 aren't used (clear and shadow, respectively) 105 | } 106 | 107 | // Only the changed rectangle is drawn into the 'renderbuf' array... 108 | uint16_t c, *destPtr; 109 | int16_t bx = minx - (int)ballx, // X relative to ball bitmap (can be negative) 110 | by = miny - (int)bally, // Y relative to ball bitmap (can be negative) 111 | bgx = minx, // X relative to background bitmap (>= 0) 112 | bgy = miny, // Y relative to background bitmap (>= 0) 113 | x, y, bx1, bgx1; // Loop counters and working vars 114 | uint8_t p; // 'packed' value of 2 ball pixels 115 | int8_t bufIdx = 0; 116 | 117 | tft.dmaWait(); // Wait for last line from prior call to complete 118 | tft.endWrite(); 119 | 120 | tft.startWrite(); 121 | tft.setAddrWindow(minx, miny, width, height); 122 | 123 | for(y=0; y= 0) && (bx1 < BALLWIDTH) && // Is current pixel row/column 129 | (by >= 0) && (by < BALLHEIGHT)) { // inside the ball bitmap area? 130 | // Yes, do ball compositing math... 131 | p = ball[by][bx1 / 2]; // Get packed value (2 pixels) 132 | c = (bx1 & 1) ? (p & 0xF) : (p >> 4); // Unpack high or low nybble 133 | if(c == 0) { // Outside ball - just draw grid 134 | c = background[bgy][bgx1 / 8] & (0x80 >> (bgx1 & 7)) ? GRIDCOLOR : BGCOLOR; 135 | } else if(c > 1) { // In ball area... 136 | c = palette[c]; 137 | } else { // In shadow area... 138 | c = background[bgy][bgx1 / 8] & (0x80 >> (bgx1 & 7)) ? GRIDSHADOW : BGSHADOW; 139 | } 140 | } else { // Outside ball bitmap, just draw background bitmap... 141 | c = background[bgy][bgx1 / 8] & (0x80 >> (bgx1 & 7)) ? GRIDCOLOR : BGCOLOR; 142 | } 143 | *destPtr++ = c; // Store pixel color 144 | bx1++; // Increment bitmap position counters (X axis) 145 | bgx1++; 146 | } 147 | tft.dmaWait(); // Wait for prior line to complete 148 | tft.writePixels(&renderbuf[bufIdx][0], width, false); // Non-blocking write 149 | bufIdx = 1 - bufIdx; 150 | by++; // Increment bitmap position counters (Y axis) 151 | bgy++; 152 | } 153 | 154 | // Show approximate frame rate 155 | if(!(++frame & 255)) { // Every 256 frames... 156 | uint32_t elapsed = (millis() - startTime) / 1000; // Seconds 157 | if(elapsed) { 158 | Serial.print(frame / elapsed); 159 | Serial.println(" fps"); 160 | } 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /Adafruit_ILI9341.h: -------------------------------------------------------------------------------- 1 | /*! 2 | * @file Adafruit_ILI9341.h 3 | * 4 | * This is the documentation for Adafruit's ILI9341 driver for the 5 | * Arduino platform. 6 | * 7 | * This library works with the Adafruit 2.8" Touch Shield V2 (SPI) 8 | * http://www.adafruit.com/products/1651 9 | * Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341 10 | * https://www.adafruit.com/product/2478 11 | * 2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket - ILI9341 12 | * https://www.adafruit.com/product/1770 13 | * 2.2" 18-bit color TFT LCD display with microSD card breakout - ILI9340 14 | * https://www.adafruit.com/product/1770 15 | * TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers 16 | * https://www.adafruit.com/product/3315 17 | * 18 | * These displays use SPI to communicate, 4 or 5 pins are required 19 | * to interface (RST is optional). 20 | * 21 | * Adafruit invests time and resources providing this open source code, 22 | * please support Adafruit and open-source hardware by purchasing 23 | * products from Adafruit! 24 | * 25 | * 26 | * This library depends on 27 | * Adafruit_GFX being present on your system. Please make sure you have 28 | * installed the latest version before using this library. 29 | * 30 | * Written by Limor "ladyada" Fried for Adafruit Industries. 31 | * 32 | * BSD license, all text here must be included in any redistribution. 33 | * 34 | */ 35 | 36 | #ifndef _ADAFRUIT_ILI9341H_ 37 | #define _ADAFRUIT_ILI9341H_ 38 | 39 | #include "Adafruit_GFX.h" 40 | #include "Arduino.h" 41 | #include "Print.h" 42 | #include 43 | #include 44 | 45 | #define ILI9341_TFTWIDTH 240 ///< ILI9341 max TFT width 46 | #define ILI9341_TFTHEIGHT 320 ///< ILI9341 max TFT height 47 | 48 | #define ILI9341_NOP 0x00 ///< No-op register 49 | #define ILI9341_SWRESET 0x01 ///< Software reset register 50 | #define ILI9341_RDDID 0x04 ///< Read display identification information 51 | #define ILI9341_RDDST 0x09 ///< Read Display Status 52 | 53 | #define ILI9341_SLPIN 0x10 ///< Enter Sleep Mode 54 | #define ILI9341_SLPOUT 0x11 ///< Sleep Out 55 | #define ILI9341_PTLON 0x12 ///< Partial Mode ON 56 | #define ILI9341_NORON 0x13 ///< Normal Display Mode ON 57 | 58 | #define ILI9341_RDMODE 0x0A ///< Read Display Power Mode 59 | #define ILI9341_RDMADCTL 0x0B ///< Read Display MADCTL 60 | #define ILI9341_RDPIXFMT 0x0C ///< Read Display Pixel Format 61 | #define ILI9341_RDIMGFMT 0x0D ///< Read Display Image Format 62 | #define ILI9341_RDSELFDIAG 0x0F ///< Read Display Self-Diagnostic Result 63 | 64 | #define ILI9341_INVOFF 0x20 ///< Display Inversion OFF 65 | #define ILI9341_INVON 0x21 ///< Display Inversion ON 66 | #define ILI9341_GAMMASET 0x26 ///< Gamma Set 67 | #define ILI9341_DISPOFF 0x28 ///< Display OFF 68 | #define ILI9341_DISPON 0x29 ///< Display ON 69 | 70 | #define ILI9341_CASET 0x2A ///< Column Address Set 71 | #define ILI9341_PASET 0x2B ///< Page Address Set 72 | #define ILI9341_RAMWR 0x2C ///< Memory Write 73 | #define ILI9341_RAMRD 0x2E ///< Memory Read 74 | 75 | #define ILI9341_PTLAR 0x30 ///< Partial Area 76 | #define ILI9341_VSCRDEF 0x33 ///< Vertical Scrolling Definition 77 | #define ILI9341_MADCTL 0x36 ///< Memory Access Control 78 | #define ILI9341_VSCRSADD 0x37 ///< Vertical Scrolling Start Address 79 | #define ILI9341_PIXFMT 0x3A ///< COLMOD: Pixel Format Set 80 | 81 | #define ILI9341_FRMCTR1 \ 82 | 0xB1 ///< Frame Rate Control (In Normal Mode/Full Colors) 83 | #define ILI9341_FRMCTR2 0xB2 ///< Frame Rate Control (In Idle Mode/8 colors) 84 | #define ILI9341_FRMCTR3 \ 85 | 0xB3 ///< Frame Rate control (In Partial Mode/Full Colors) 86 | #define ILI9341_INVCTR 0xB4 ///< Display Inversion Control 87 | #define ILI9341_DFUNCTR 0xB6 ///< Display Function Control 88 | 89 | #define ILI9341_PWCTR1 0xC0 ///< Power Control 1 90 | #define ILI9341_PWCTR2 0xC1 ///< Power Control 2 91 | #define ILI9341_PWCTR3 0xC2 ///< Power Control 3 92 | #define ILI9341_PWCTR4 0xC3 ///< Power Control 4 93 | #define ILI9341_PWCTR5 0xC4 ///< Power Control 5 94 | #define ILI9341_VMCTR1 0xC5 ///< VCOM Control 1 95 | #define ILI9341_VMCTR2 0xC7 ///< VCOM Control 2 96 | 97 | #define ILI9341_RDID1 0xDA ///< Read ID 1 98 | #define ILI9341_RDID2 0xDB ///< Read ID 2 99 | #define ILI9341_RDID3 0xDC ///< Read ID 3 100 | #define ILI9341_RDID4 0xDD ///< Read ID 4 101 | 102 | #define ILI9341_GMCTRP1 0xE0 ///< Positive Gamma Correction 103 | #define ILI9341_GMCTRN1 0xE1 ///< Negative Gamma Correction 104 | // #define ILI9341_PWCTR6 0xFC 105 | 106 | // Color definitions 107 | #define ILI9341_BLACK 0x0000 ///< 0, 0, 0 108 | #define ILI9341_NAVY 0x000F ///< 0, 0, 123 109 | #define ILI9341_DARKGREEN 0x03E0 ///< 0, 125, 0 110 | #define ILI9341_DARKCYAN 0x03EF ///< 0, 125, 123 111 | #define ILI9341_MAROON 0x7800 ///< 123, 0, 0 112 | #define ILI9341_PURPLE 0x780F ///< 123, 0, 123 113 | #define ILI9341_OLIVE 0x7BE0 ///< 123, 125, 0 114 | #define ILI9341_LIGHTGREY 0xC618 ///< 198, 195, 198 115 | #define ILI9341_DARKGREY 0x7BEF ///< 123, 125, 123 116 | #define ILI9341_BLUE 0x001F ///< 0, 0, 255 117 | #define ILI9341_GREEN 0x07E0 ///< 0, 255, 0 118 | #define ILI9341_CYAN 0x07FF ///< 0, 255, 255 119 | #define ILI9341_RED 0xF800 ///< 255, 0, 0 120 | #define ILI9341_MAGENTA 0xF81F ///< 255, 0, 255 121 | #define ILI9341_YELLOW 0xFFE0 ///< 255, 255, 0 122 | #define ILI9341_WHITE 0xFFFF ///< 255, 255, 255 123 | #define ILI9341_ORANGE 0xFD20 ///< 255, 165, 0 124 | #define ILI9341_GREENYELLOW 0xAFE5 ///< 173, 255, 41 125 | #define ILI9341_PINK 0xFC18 ///< 255, 130, 198 126 | 127 | /**************************************************************************/ 128 | /*! 129 | @brief Class to manage hardware interface with ILI9341 chipset (also seems to 130 | work with ILI9340) 131 | */ 132 | /**************************************************************************/ 133 | 134 | class Adafruit_ILI9341 : public Adafruit_SPITFT { 135 | public: 136 | Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK, 137 | int8_t _RST = -1, int8_t _MISO = -1); 138 | Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _RST = -1); 139 | #if !defined(ESP8266) 140 | Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs = -1, 141 | int8_t rst = -1); 142 | #endif // end !ESP8266 143 | Adafruit_ILI9341(tftBusWidth busWidth, int8_t d0, int8_t wr, int8_t dc, 144 | int8_t cs = -1, int8_t rst = -1, int8_t rd = -1); 145 | 146 | void begin(uint32_t freq = 0); 147 | void setRotation(uint8_t r); 148 | void invertDisplay(bool i); 149 | void scrollTo(uint16_t y); 150 | void setScrollMargins(uint16_t top, uint16_t bottom); 151 | 152 | // Transaction API not used by GFX 153 | void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); 154 | 155 | uint8_t readcommand8(uint8_t reg, uint8_t index = 0); 156 | }; 157 | 158 | #endif // _ADAFRUIT_ILI9341H_ 159 | -------------------------------------------------------------------------------- /examples/touchpaint_featherwing/touchpaint_featherwing.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is our touchscreen painting example for the Adafruit TFT FeatherWing 3 | ----> http://www.adafruit.com/products/3315 4 | 5 | Check out the links above for our tutorials and wiring diagrams 6 | 7 | Adafruit invests time and resources providing this open source code, 8 | please support Adafruit and open-source hardware by purchasing 9 | products from Adafruit! 10 | 11 | Written by Limor Fried/Ladyada for Adafruit Industries. 12 | MIT license, all text above must be included in any redistribution 13 | ****************************************************/ 14 | 15 | #include // Core graphics library 16 | #include // Hardware-specific library 17 | 18 | // If using the rev 1 with STMPE resistive touch screen controller uncomment this line: 19 | //#include 20 | // If using the rev 2 with TSC2007, uncomment this line: 21 | #include 22 | 23 | #ifdef ESP8266 24 | #define STMPE_CS 16 25 | #define TFT_CS 0 26 | #define TFT_DC 15 27 | #define SD_CS 2 28 | #elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32C6) 29 | #define STMPE_CS 6 30 | #define TFT_CS 7 31 | #define TFT_DC 8 32 | #define SD_CS 5 33 | #elif defined(ESP32) && !defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2) 34 | #define STMPE_CS 32 35 | #define TFT_CS 15 36 | #define TFT_DC 33 37 | #define SD_CS 14 38 | #elif defined(TEENSYDUINO) 39 | #define TFT_DC 10 40 | #define TFT_CS 4 41 | #define STMPE_CS 3 42 | #define SD_CS 8 43 | #elif defined(ARDUINO_STM32_FEATHER) 44 | #define TFT_DC PB4 45 | #define TFT_CS PA15 46 | #define STMPE_CS PC7 47 | #define SD_CS PC5 48 | #elif defined(ARDUINO_NRF52832_FEATHER) /* BSP 0.6.5 and higher! */ 49 | #define TFT_DC 11 50 | #define TFT_CS 31 51 | #define STMPE_CS 30 52 | #define SD_CS 27 53 | #elif defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) 54 | #define TFT_DC P5_4 55 | #define TFT_CS P5_3 56 | #define STMPE_CS P3_3 57 | #define SD_CS P3_2 58 | #else 59 | // Anything else, defaults! 60 | #define STMPE_CS 6 61 | #define TFT_CS 9 62 | #define TFT_DC 10 63 | #define SD_CS 5 64 | #endif 65 | 66 | 67 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 68 | 69 | #if defined(_ADAFRUIT_STMPE610H_) 70 | Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); 71 | #elif defined(_ADAFRUIT_TSC2007_H) 72 | // If you're using the TSC2007 there is no CS pin needed, so instead its an IRQ! 73 | #define TSC_IRQ STMPE_CS 74 | Adafruit_TSC2007 ts = Adafruit_TSC2007(); // newer rev 2 touch contoller 75 | #else 76 | #error("You must have either STMPE or TSC2007 headers included!") 77 | #endif 78 | 79 | // This is calibration data for the raw touch data to the screen coordinates 80 | // For STMPE811/STMPE610 81 | #define STMPE_TS_MINX 3800 82 | #define STMPE_TS_MAXX 100 83 | #define STMPE_TS_MINY 100 84 | #define STMPE_TS_MAXY 3750 85 | // For TSC2007 86 | #define TSC_TS_MINX 300 87 | #define TSC_TS_MAXX 3800 88 | #define TSC_TS_MINY 185 89 | #define TSC_TS_MAXY 3700 90 | // we will assign the calibration values on init 91 | int16_t min_x, max_x, min_y, max_y; 92 | 93 | // Size of the color selection boxes and the paintbrush size 94 | #define BOXSIZE 40 95 | #define PENRADIUS 3 96 | int oldcolor, currentcolor; 97 | 98 | void setup(void) { 99 | Serial.begin(115200); 100 | //while (!Serial); 101 | 102 | delay(10); 103 | Serial.println("FeatherWing TFT Demo sketch"); 104 | 105 | #if defined(_ADAFRUIT_STMPE610H_) 106 | if (!ts.begin()) { 107 | Serial.println("Couldn't start STMPE touchscreen controller"); 108 | while (1) delay(100); 109 | } 110 | min_x = STMPE_TS_MINX; max_x = STMPE_TS_MAXX; 111 | min_y = STMPE_TS_MINY; max_y = STMPE_TS_MAXY; 112 | #else 113 | if (! ts.begin(0x48, &Wire)) { 114 | Serial.println("Couldn't start TSC2007 touchscreen controller"); 115 | while (1) delay(100); 116 | } 117 | min_x = TSC_TS_MINX; max_x = TSC_TS_MAXX; 118 | min_y = TSC_TS_MINY; max_y = TSC_TS_MAXY; 119 | pinMode(TSC_IRQ, INPUT); 120 | #endif 121 | 122 | Serial.println("Touchscreen started"); 123 | 124 | tft.begin(); 125 | tft.fillScreen(ILI9341_BLACK); 126 | 127 | // make the color selection boxes 128 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 129 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 130 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 131 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 132 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 133 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 134 | 135 | // select the current color 'red' 136 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 137 | currentcolor = ILI9341_RED; 138 | } 139 | 140 | void loop() { 141 | #if defined(TSC_IRQ) 142 | if (digitalRead(TSC_IRQ)) { 143 | // IRQ pin is high, nothing to read! 144 | return; 145 | } 146 | #endif 147 | TS_Point p = ts.getPoint(); 148 | 149 | Serial.print("X = "); Serial.print(p.x); 150 | Serial.print("\tY = "); Serial.print(p.y); 151 | Serial.print("\tPressure = "); Serial.print(p.z); 152 | if (((p.x == 0) && (p.y == 0)) || (p.z < 10)) return; // no pressure, no touch 153 | 154 | // Scale from ~0->4000 to tft.width using the calibration #'s 155 | p.x = map(p.x, min_x, max_x, 0, tft.width()); 156 | p.y = map(p.y, min_y, max_y, 0, tft.height()); 157 | Serial.print(" -> "); Serial.print(p.x); Serial.print(", "); Serial.println(p.y); 158 | 159 | 160 | 161 | if (p.y < BOXSIZE) { 162 | oldcolor = currentcolor; 163 | 164 | if (p.x < BOXSIZE) { 165 | currentcolor = ILI9341_RED; 166 | tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 167 | } else if (p.x < BOXSIZE*2) { 168 | currentcolor = ILI9341_YELLOW; 169 | tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 170 | } else if (p.x < BOXSIZE*3) { 171 | currentcolor = ILI9341_GREEN; 172 | tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 173 | } else if (p.x < BOXSIZE*4) { 174 | currentcolor = ILI9341_CYAN; 175 | tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 176 | } else if (p.x < BOXSIZE*5) { 177 | currentcolor = ILI9341_BLUE; 178 | tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 179 | } else if (p.x < BOXSIZE*6) { 180 | currentcolor = ILI9341_MAGENTA; 181 | tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); 182 | } 183 | 184 | if (oldcolor != currentcolor) { 185 | if (oldcolor == ILI9341_RED) 186 | tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); 187 | if (oldcolor == ILI9341_YELLOW) 188 | tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); 189 | if (oldcolor == ILI9341_GREEN) 190 | tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); 191 | if (oldcolor == ILI9341_CYAN) 192 | tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); 193 | if (oldcolor == ILI9341_BLUE) 194 | tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); 195 | if (oldcolor == ILI9341_MAGENTA) 196 | tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); 197 | } 198 | } 199 | 200 | if (((p.y-PENRADIUS) > 0) && ((p.y+PENRADIUS) < tft.height())) { 201 | tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); 202 | } 203 | } -------------------------------------------------------------------------------- /examples/graphicstest_pyportal/graphicstest_pyportal.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | GFX example for the Adafruit PyPortal. 3 | https://www.adafruit.com/product/4116 4 | ****************************************************/ 5 | 6 | #include "Adafruit_GFX.h" 7 | #include "Adafruit_ILI9341.h" 8 | 9 | #define TFT_D0 34 // Data bit 0 pin (MUST be on PORT byte boundary) 10 | #define TFT_WR 26 // Write-strobe pin (CCL-inverted timer output) 11 | #define TFT_DC 10 // Data/command pin 12 | #define TFT_CS 11 // Chip-select pin 13 | #define TFT_RST 24 // Reset pin 14 | #define TFT_RD 9 // Read-strobe pin 15 | #define TFT_BACKLIGHT 25 16 | 17 | // ILI9341 with 8-bit parallel interface: 18 | Adafruit_ILI9341 tft = Adafruit_ILI9341(tft8bitbus, TFT_D0, TFT_WR, TFT_DC, TFT_CS, TFT_RST, TFT_RD); 19 | 20 | void setup() { 21 | Serial.begin(9600); 22 | //while(!Serial); 23 | Serial.println("ILI9341 Test!"); 24 | 25 | // Turn on backlight (required on PyPortal) 26 | pinMode(TFT_BACKLIGHT, OUTPUT); 27 | digitalWrite(TFT_BACKLIGHT, HIGH); 28 | 29 | tft.begin(); 30 | 31 | // read diagnostics (optional but can help debug problems) 32 | uint8_t x = tft.readcommand8(ILI9341_RDMODE); 33 | Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); 34 | x = tft.readcommand8(ILI9341_RDMADCTL); 35 | Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); 36 | x = tft.readcommand8(ILI9341_RDPIXFMT); 37 | Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); 38 | x = tft.readcommand8(ILI9341_RDIMGFMT); 39 | Serial.print("Image Format: 0x"); Serial.println(x, HEX); 40 | x = tft.readcommand8(ILI9341_RDSELFDIAG); 41 | Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 42 | 43 | Serial.println(F("Benchmark Time (microseconds)")); 44 | delay(10); 45 | Serial.print(F("Screen fill ")); 46 | Serial.println(testFillScreen()); 47 | delay(500); 48 | 49 | Serial.print(F("Text ")); 50 | Serial.println(testText()); 51 | delay(3000); 52 | 53 | Serial.print(F("Lines ")); 54 | Serial.println(testLines(ILI9341_CYAN)); 55 | delay(500); 56 | 57 | Serial.print(F("Horiz/Vert Lines ")); 58 | Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); 59 | delay(500); 60 | 61 | Serial.print(F("Rectangles (outline) ")); 62 | Serial.println(testRects(ILI9341_GREEN)); 63 | delay(500); 64 | 65 | Serial.print(F("Rectangles (filled) ")); 66 | Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); 67 | delay(500); 68 | 69 | Serial.print(F("Circles (filled) ")); 70 | Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); 71 | 72 | Serial.print(F("Circles (outline) ")); 73 | Serial.println(testCircles(10, ILI9341_WHITE)); 74 | delay(500); 75 | 76 | Serial.print(F("Triangles (outline) ")); 77 | Serial.println(testTriangles()); 78 | delay(500); 79 | 80 | Serial.print(F("Triangles (filled) ")); 81 | Serial.println(testFilledTriangles()); 82 | delay(500); 83 | 84 | Serial.print(F("Rounded rects (outline) ")); 85 | Serial.println(testRoundRects()); 86 | delay(500); 87 | 88 | Serial.print(F("Rounded rects (filled) ")); 89 | Serial.println(testFilledRoundRects()); 90 | delay(500); 91 | 92 | Serial.println(F("Done!")); 93 | 94 | } 95 | 96 | 97 | void loop(void) { 98 | for(uint8_t rotation=0; rotation<4; rotation++) { 99 | tft.setRotation(rotation); 100 | testText(); 101 | delay(1000); 102 | } 103 | } 104 | 105 | unsigned long testFillScreen() { 106 | unsigned long start = micros(); 107 | tft.fillScreen(ILI9341_BLACK); 108 | yield(); 109 | tft.fillScreen(ILI9341_RED); 110 | yield(); 111 | tft.fillScreen(ILI9341_GREEN); 112 | yield(); 113 | tft.fillScreen(ILI9341_BLUE); 114 | yield(); 115 | tft.fillScreen(ILI9341_BLACK); 116 | yield(); 117 | return micros() - start; 118 | } 119 | 120 | unsigned long testText() { 121 | tft.fillScreen(ILI9341_BLACK); 122 | unsigned long start = micros(); 123 | tft.setCursor(0, 0); 124 | tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); 125 | tft.println(F("Hello World!")); 126 | tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); 127 | tft.println(1234.56); 128 | tft.setTextColor(ILI9341_RED); tft.setTextSize(3); 129 | tft.println(0xDEADBEEF, HEX); 130 | tft.println(); 131 | tft.setTextColor(ILI9341_GREEN); 132 | tft.setTextSize(5); 133 | tft.println(F("Groop")); 134 | tft.setTextSize(2); 135 | tft.println(F("I implore thee,")); 136 | tft.setTextSize(1); 137 | tft.println(F("my foonting turlingdromes.")); 138 | tft.println(F("And hooptiously drangle me")); 139 | tft.println(F("with crinkly bindlewurdles,")); 140 | tft.println(F("Or I will rend thee")); 141 | tft.println(F("in the gobberwarts")); 142 | tft.println(F("with my blurglecruncheon,")); 143 | tft.println(F("see if I don't!")); 144 | return micros() - start; 145 | } 146 | 147 | unsigned long testLines(uint16_t color) { 148 | unsigned long start, t; 149 | int x1, y1, x2, y2, 150 | w = tft.width(), 151 | h = tft.height(); 152 | 153 | tft.fillScreen(ILI9341_BLACK); 154 | yield(); 155 | 156 | x1 = y1 = 0; 157 | y2 = h - 1; 158 | start = micros(); 159 | for(x2=0; x20; i-=6) { 244 | i2 = i / 2; 245 | start = micros(); 246 | tft.fillRect(cx-i2, cy-i2, i, i, color1); 247 | t += micros() - start; 248 | // Outlines are not included in timing results 249 | tft.drawRect(cx-i2, cy-i2, i, i, color2); 250 | yield(); 251 | } 252 | 253 | return t; 254 | } 255 | 256 | unsigned long testFilledCircles(uint8_t radius, uint16_t color) { 257 | unsigned long start; 258 | int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; 259 | 260 | tft.fillScreen(ILI9341_BLACK); 261 | start = micros(); 262 | for(x=radius; x10; i-=5) { 316 | start = micros(); 317 | tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, 318 | tft.color565(0, i*10, i*10)); 319 | t += micros() - start; 320 | tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, 321 | tft.color565(i*10, i*10, 0)); 322 | yield(); 323 | } 324 | 325 | return t; 326 | } 327 | 328 | unsigned long testRoundRects() { 329 | unsigned long start; 330 | int w, i, i2, 331 | cx = tft.width() / 2 - 1, 332 | cy = tft.height() / 2 - 1; 333 | 334 | tft.fillScreen(ILI9341_BLACK); 335 | w = min(tft.width(), tft.height()); 336 | start = micros(); 337 | for(i=0; i20; i-=6) { 354 | i2 = i / 2; 355 | tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); 356 | yield(); 357 | } 358 | 359 | return micros() - start; 360 | } 361 | -------------------------------------------------------------------------------- /examples/graphicstest/graphicstest.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is our GFX example for the Adafruit ILI9341 Breakout and Shield 3 | ----> http://www.adafruit.com/products/1651 4 | 5 | Check out the links above for our tutorials and wiring diagrams 6 | These displays use SPI to communicate, 4 or 5 pins are required to 7 | interface (RST is optional) 8 | Adafruit invests time and resources providing this open source code, 9 | please support Adafruit and open-source hardware by purchasing 10 | products from Adafruit! 11 | 12 | Written by Limor Fried/Ladyada for Adafruit Industries. 13 | MIT license, all text above must be included in any redistribution 14 | ****************************************************/ 15 | 16 | 17 | #include "SPI.h" 18 | #include "Adafruit_GFX.h" 19 | #include "Adafruit_ILI9341.h" 20 | 21 | // For the Adafruit shield, these are the default. 22 | #define TFT_DC 9 23 | #define TFT_CS 10 24 | 25 | // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC 26 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 27 | // If using the breakout, change pins as desired 28 | //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); 29 | 30 | void setup() { 31 | Serial.begin(9600); 32 | Serial.println("ILI9341 Test!"); 33 | 34 | tft.begin(); 35 | 36 | // read diagnostics (optional but can help debug problems) 37 | uint8_t x = tft.readcommand8(ILI9341_RDMODE); 38 | Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); 39 | x = tft.readcommand8(ILI9341_RDMADCTL); 40 | Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); 41 | x = tft.readcommand8(ILI9341_RDPIXFMT); 42 | Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); 43 | x = tft.readcommand8(ILI9341_RDIMGFMT); 44 | Serial.print("Image Format: 0x"); Serial.println(x, HEX); 45 | x = tft.readcommand8(ILI9341_RDSELFDIAG); 46 | Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 47 | 48 | Serial.println(F("Benchmark Time (microseconds)")); 49 | delay(10); 50 | Serial.print(F("Screen fill ")); 51 | Serial.println(testFillScreen()); 52 | delay(500); 53 | 54 | Serial.print(F("Text ")); 55 | Serial.println(testText()); 56 | delay(3000); 57 | 58 | Serial.print(F("Lines ")); 59 | Serial.println(testLines(ILI9341_CYAN)); 60 | delay(500); 61 | 62 | Serial.print(F("Horiz/Vert Lines ")); 63 | Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); 64 | delay(500); 65 | 66 | Serial.print(F("Rectangles (outline) ")); 67 | Serial.println(testRects(ILI9341_GREEN)); 68 | delay(500); 69 | 70 | Serial.print(F("Rectangles (filled) ")); 71 | Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); 72 | delay(500); 73 | 74 | Serial.print(F("Circles (filled) ")); 75 | Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); 76 | 77 | Serial.print(F("Circles (outline) ")); 78 | Serial.println(testCircles(10, ILI9341_WHITE)); 79 | delay(500); 80 | 81 | Serial.print(F("Triangles (outline) ")); 82 | Serial.println(testTriangles()); 83 | delay(500); 84 | 85 | Serial.print(F("Triangles (filled) ")); 86 | Serial.println(testFilledTriangles()); 87 | delay(500); 88 | 89 | Serial.print(F("Rounded rects (outline) ")); 90 | Serial.println(testRoundRects()); 91 | delay(500); 92 | 93 | Serial.print(F("Rounded rects (filled) ")); 94 | Serial.println(testFilledRoundRects()); 95 | delay(500); 96 | 97 | Serial.println(F("Done!")); 98 | 99 | } 100 | 101 | 102 | void loop(void) { 103 | for(uint8_t rotation=0; rotation<4; rotation++) { 104 | tft.setRotation(rotation); 105 | testText(); 106 | delay(1000); 107 | } 108 | } 109 | 110 | unsigned long testFillScreen() { 111 | unsigned long start = micros(); 112 | tft.fillScreen(ILI9341_BLACK); 113 | yield(); 114 | tft.fillScreen(ILI9341_RED); 115 | yield(); 116 | tft.fillScreen(ILI9341_GREEN); 117 | yield(); 118 | tft.fillScreen(ILI9341_BLUE); 119 | yield(); 120 | tft.fillScreen(ILI9341_BLACK); 121 | yield(); 122 | return micros() - start; 123 | } 124 | 125 | unsigned long testText() { 126 | tft.fillScreen(ILI9341_BLACK); 127 | unsigned long start = micros(); 128 | tft.setCursor(0, 0); 129 | tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); 130 | tft.println("Hello World!"); 131 | tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); 132 | tft.println(1234.56); 133 | tft.setTextColor(ILI9341_RED); tft.setTextSize(3); 134 | tft.println(0xDEADBEEF, HEX); 135 | tft.println(); 136 | tft.setTextColor(ILI9341_GREEN); 137 | tft.setTextSize(5); 138 | tft.println("Groop"); 139 | tft.setTextSize(2); 140 | tft.println("I implore thee,"); 141 | tft.setTextSize(1); 142 | tft.println("my foonting turlingdromes."); 143 | tft.println("And hooptiously drangle me"); 144 | tft.println("with crinkly bindlewurdles,"); 145 | tft.println("Or I will rend thee"); 146 | tft.println("in the gobberwarts"); 147 | tft.println("with my blurglecruncheon,"); 148 | tft.println("see if I don't!"); 149 | return micros() - start; 150 | } 151 | 152 | unsigned long testLines(uint16_t color) { 153 | unsigned long start, t; 154 | int x1, y1, x2, y2, 155 | w = tft.width(), 156 | h = tft.height(); 157 | 158 | tft.fillScreen(ILI9341_BLACK); 159 | yield(); 160 | 161 | x1 = y1 = 0; 162 | y2 = h - 1; 163 | start = micros(); 164 | for(x2=0; x20; i-=6) { 249 | i2 = i / 2; 250 | start = micros(); 251 | tft.fillRect(cx-i2, cy-i2, i, i, color1); 252 | t += micros() - start; 253 | // Outlines are not included in timing results 254 | tft.drawRect(cx-i2, cy-i2, i, i, color2); 255 | yield(); 256 | } 257 | 258 | return t; 259 | } 260 | 261 | unsigned long testFilledCircles(uint8_t radius, uint16_t color) { 262 | unsigned long start; 263 | int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; 264 | 265 | tft.fillScreen(ILI9341_BLACK); 266 | start = micros(); 267 | for(x=radius; x10; i-=5) { 321 | start = micros(); 322 | tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, 323 | tft.color565(0, i*10, i*10)); 324 | t += micros() - start; 325 | tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, 326 | tft.color565(i*10, i*10, 0)); 327 | yield(); 328 | } 329 | 330 | return t; 331 | } 332 | 333 | unsigned long testRoundRects() { 334 | unsigned long start; 335 | int w, i, i2, 336 | cx = tft.width() / 2 - 1, 337 | cy = tft.height() / 2 - 1; 338 | 339 | tft.fillScreen(ILI9341_BLACK); 340 | w = min(tft.width(), tft.height()); 341 | start = micros(); 342 | for(i=0; i20; i-=6) { 359 | i2 = i / 2; 360 | tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); 361 | yield(); 362 | } 363 | 364 | return micros() - start; 365 | } -------------------------------------------------------------------------------- /examples/graphicstest_featherwing/graphicstest_featherwing.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is our GFX example for the Adafruit ILI9341 TFT FeatherWing 3 | ----> http://www.adafruit.com/products/3315 4 | 5 | Check out the links above for our tutorials and wiring diagrams 6 | 7 | Adafruit invests time and resources providing this open source code, 8 | please support Adafruit and open-source hardware by purchasing 9 | products from Adafruit! 10 | 11 | Written by Limor Fried/Ladyada for Adafruit Industries. 12 | MIT license, all text above must be included in any redistribution 13 | ****************************************************/ 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | #ifdef ESP8266 20 | #define STMPE_CS 16 21 | #define TFT_CS 0 22 | #define TFT_DC 15 23 | #define SD_CS 2 24 | #elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32C6) 25 | #define STMPE_CS 6 26 | #define TFT_CS 7 27 | #define TFT_DC 8 28 | #define SD_CS 5 29 | #elif defined(ESP32) && !defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2) 30 | #define STMPE_CS 32 31 | #define TFT_CS 15 32 | #define TFT_DC 33 33 | #define SD_CS 14 34 | #elif defined(TEENSYDUINO) 35 | #define TFT_DC 10 36 | #define TFT_CS 4 37 | #define STMPE_CS 3 38 | #define SD_CS 8 39 | #elif defined(ARDUINO_STM32_FEATHER) 40 | #define TFT_DC PB4 41 | #define TFT_CS PA15 42 | #define STMPE_CS PC7 43 | #define SD_CS PC5 44 | #elif defined(ARDUINO_NRF52832_FEATHER) /* BSP 0.6.5 and higher! */ 45 | #define TFT_DC 11 46 | #define TFT_CS 31 47 | #define STMPE_CS 30 48 | #define SD_CS 27 49 | #elif defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) 50 | #define TFT_DC P5_4 51 | #define TFT_CS P5_3 52 | #define STMPE_CS P3_3 53 | #define SD_CS P3_2 54 | #else 55 | // Anything else, defaults! 56 | #define STMPE_CS 6 57 | #define TFT_CS 9 58 | #define TFT_DC 10 59 | #define SD_CS 5 60 | #endif 61 | 62 | 63 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 64 | 65 | void setup() { 66 | Serial.begin(115200); 67 | 68 | delay(10); 69 | Serial.println("FeatherWing TFT Test!"); 70 | 71 | tft.begin(); 72 | 73 | // read diagnostics (optional but can help debug problems) 74 | uint8_t x = tft.readcommand8(ILI9341_RDMODE); 75 | Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); 76 | x = tft.readcommand8(ILI9341_RDMADCTL); 77 | Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); 78 | x = tft.readcommand8(ILI9341_RDPIXFMT); 79 | Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); 80 | x = tft.readcommand8(ILI9341_RDIMGFMT); 81 | Serial.print("Image Format: 0x"); Serial.println(x, HEX); 82 | x = tft.readcommand8(ILI9341_RDSELFDIAG); 83 | Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 84 | 85 | Serial.println(F("Benchmark Time (microseconds)")); 86 | delay(10); 87 | Serial.print(F("Screen fill ")); 88 | Serial.println(testFillScreen()); 89 | delay(500); 90 | 91 | Serial.print(F("Text ")); 92 | Serial.println(testText()); 93 | delay(3000); 94 | 95 | Serial.print(F("Lines ")); 96 | Serial.println(testLines(ILI9341_CYAN)); 97 | delay(500); 98 | 99 | Serial.print(F("Horiz/Vert Lines ")); 100 | Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); 101 | delay(500); 102 | 103 | Serial.print(F("Rectangles (outline) ")); 104 | Serial.println(testRects(ILI9341_GREEN)); 105 | delay(500); 106 | 107 | Serial.print(F("Rectangles (filled) ")); 108 | Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); 109 | delay(500); 110 | 111 | Serial.print(F("Circles (filled) ")); 112 | Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); 113 | 114 | Serial.print(F("Circles (outline) ")); 115 | Serial.println(testCircles(10, ILI9341_WHITE)); 116 | delay(500); 117 | 118 | Serial.print(F("Triangles (outline) ")); 119 | Serial.println(testTriangles()); 120 | delay(500); 121 | 122 | Serial.print(F("Triangles (filled) ")); 123 | Serial.println(testFilledTriangles()); 124 | delay(500); 125 | 126 | Serial.print(F("Rounded rects (outline) ")); 127 | Serial.println(testRoundRects()); 128 | delay(500); 129 | 130 | Serial.print(F("Rounded rects (filled) ")); 131 | Serial.println(testFilledRoundRects()); 132 | delay(500); 133 | 134 | Serial.println(F("Done!")); 135 | 136 | } 137 | 138 | 139 | void loop(void) { 140 | for(uint8_t rotation=0; rotation<4; rotation++) { 141 | tft.setRotation(rotation); 142 | testText(); 143 | delay(1000); 144 | } 145 | } 146 | 147 | unsigned long testFillScreen() { 148 | unsigned long start = micros(); 149 | tft.fillScreen(ILI9341_BLACK); 150 | yield(); 151 | tft.fillScreen(ILI9341_RED); 152 | yield(); 153 | tft.fillScreen(ILI9341_GREEN); 154 | yield(); 155 | tft.fillScreen(ILI9341_BLUE); 156 | yield(); 157 | tft.fillScreen(ILI9341_BLACK); 158 | yield(); 159 | return micros() - start; 160 | } 161 | 162 | unsigned long testText() { 163 | tft.fillScreen(ILI9341_BLACK); 164 | unsigned long start = micros(); 165 | tft.setCursor(0, 0); 166 | tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); 167 | tft.println("Hello World!"); 168 | tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); 169 | tft.println(1234.56); 170 | tft.setTextColor(ILI9341_RED); tft.setTextSize(3); 171 | tft.println(0xDEADBEEF, HEX); 172 | tft.println(); 173 | tft.setTextColor(ILI9341_GREEN); 174 | tft.setTextSize(5); 175 | tft.println("Groop"); 176 | tft.setTextSize(2); 177 | tft.println("I implore thee,"); 178 | tft.setTextSize(1); 179 | tft.println("my foonting turlingdromes."); 180 | tft.println("And hooptiously drangle me"); 181 | tft.println("with crinkly bindlewurdles,"); 182 | tft.println("Or I will rend thee"); 183 | tft.println("in the gobberwarts"); 184 | tft.println("with my blurglecruncheon,"); 185 | tft.println("see if I don't!"); 186 | return micros() - start; 187 | } 188 | 189 | unsigned long testLines(uint16_t color) { 190 | unsigned long start, t; 191 | int x1, y1, x2, y2, 192 | w = tft.width(), 193 | h = tft.height(); 194 | 195 | tft.fillScreen(ILI9341_BLACK); 196 | yield(); 197 | 198 | x1 = y1 = 0; 199 | y2 = h - 1; 200 | start = micros(); 201 | for(x2=0; x20; i-=6) { 286 | i2 = i / 2; 287 | start = micros(); 288 | tft.fillRect(cx-i2, cy-i2, i, i, color1); 289 | t += micros() - start; 290 | // Outlines are not included in timing results 291 | tft.drawRect(cx-i2, cy-i2, i, i, color2); 292 | yield(); 293 | } 294 | 295 | return t; 296 | } 297 | 298 | unsigned long testFilledCircles(uint8_t radius, uint16_t color) { 299 | unsigned long start; 300 | int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; 301 | 302 | tft.fillScreen(ILI9341_BLACK); 303 | start = micros(); 304 | for(x=radius; x10; i-=5) { 358 | start = micros(); 359 | tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, 360 | tft.color565(0, i*10, i*10)); 361 | t += micros() - start; 362 | tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, 363 | tft.color565(i*10, i*10, 0)); 364 | yield(); 365 | } 366 | 367 | return t; 368 | } 369 | 370 | unsigned long testRoundRects() { 371 | unsigned long start; 372 | int w, i, i2, 373 | cx = tft.width() / 2 - 1, 374 | cy = tft.height() / 2 - 1; 375 | 376 | tft.fillScreen(ILI9341_BLACK); 377 | w = min(tft.width(), tft.height()); 378 | start = micros(); 379 | for(i=0; i20; i-=6) { 396 | i2 = i / 2; 397 | tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); 398 | yield(); 399 | } 400 | 401 | return micros() - start; 402 | } -------------------------------------------------------------------------------- /Adafruit_ILI9341.cpp: -------------------------------------------------------------------------------- 1 | /*! 2 | * @file Adafruit_ILI9341.cpp 3 | * 4 | * @mainpage Adafruit ILI9341 TFT Displays 5 | * 6 | * @section intro_sec Introduction 7 | * 8 | * This is the documentation for Adafruit's ILI9341 driver for the 9 | * Arduino platform. 10 | * 11 | * This library works with the Adafruit 2.8" Touch Shield V2 (SPI) 12 | * http://www.adafruit.com/products/1651 13 | * 14 | * Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341 15 | * https://www.adafruit.com/product/2478 16 | * 17 | * 2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket - ILI9341 18 | * https://www.adafruit.com/product/1770 19 | * 20 | * 2.2" 18-bit color TFT LCD display with microSD card breakout - ILI9340 21 | * https://www.adafruit.com/product/1770 22 | * 23 | * TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers 24 | * https://www.adafruit.com/product/3315 25 | * 26 | * These displays use SPI to communicate, 4 or 5 pins are required 27 | * to interface (RST is optional). 28 | * 29 | * Adafruit invests time and resources providing this open source code, 30 | * please support Adafruit and open-source hardware by purchasing 31 | * products from Adafruit! 32 | * 33 | * @section dependencies Dependencies 34 | * 35 | * This library depends on 36 | * Adafruit_GFX being present on your system. Please make sure you have 37 | * installed the latest version before using this library. 38 | * 39 | * @section author Author 40 | * 41 | * Written by Limor "ladyada" Fried for Adafruit Industries. 42 | * 43 | * @section license License 44 | * 45 | * BSD license, all text here must be included in any redistribution. 46 | * 47 | */ 48 | 49 | #include "Adafruit_ILI9341.h" 50 | #ifndef ARDUINO_STM32_FEATHER 51 | #include "pins_arduino.h" 52 | #if !defined(RASPI) && !defined(ARDUINO_UNOR4_MINIMA) && \ 53 | !defined(ARDUINO_UNOR4_WIFI) 54 | #include "wiring_private.h" 55 | #endif 56 | #endif 57 | #include 58 | 59 | #if defined(ARDUINO_ARCH_ARC32) || defined(ARDUINO_MAXIM) 60 | #define SPI_DEFAULT_FREQ 16000000 61 | // Teensy 3.0, 3.1/3.2, 3.5, 3.6 62 | #elif defined(__MK20DX128__) || defined(__MK20DX256__) || \ 63 | defined(__MK64FX512__) || defined(__MK66FX1M0__) 64 | #define SPI_DEFAULT_FREQ 40000000 65 | #elif defined(__AVR__) || defined(TEENSYDUINO) 66 | #define SPI_DEFAULT_FREQ 8000000 67 | #elif defined(ESP8266) || defined(ESP32) 68 | #define SPI_DEFAULT_FREQ 40000000 69 | #elif defined(RASPI) 70 | #define SPI_DEFAULT_FREQ 80000000 71 | #elif defined(ARDUINO_ARCH_STM32F1) 72 | #define SPI_DEFAULT_FREQ 36000000 73 | #else 74 | #define SPI_DEFAULT_FREQ 24000000 ///< Default SPI data clock frequency 75 | #endif 76 | 77 | #define MADCTL_MY 0x80 ///< Bottom to top 78 | #define MADCTL_MX 0x40 ///< Right to left 79 | #define MADCTL_MV 0x20 ///< Reverse Mode 80 | #define MADCTL_ML 0x10 ///< LCD refresh Bottom to top 81 | #define MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order 82 | #define MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order 83 | #define MADCTL_MH 0x04 ///< LCD refresh right to left 84 | 85 | /**************************************************************************/ 86 | /*! 87 | @brief Instantiate Adafruit ILI9341 driver with software SPI 88 | @param cs Chip select pin # 89 | @param dc Data/Command pin # 90 | @param mosi SPI MOSI pin # 91 | @param sclk SPI Clock pin # 92 | @param rst Reset pin # (optional, pass -1 if unused) 93 | @param miso SPI MISO pin # (optional, pass -1 if unused) 94 | */ 95 | /**************************************************************************/ 96 | Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t mosi, 97 | int8_t sclk, int8_t rst, int8_t miso) 98 | : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, cs, dc, mosi, sclk, 99 | rst, miso) {} 100 | 101 | /**************************************************************************/ 102 | /*! 103 | @brief Instantiate Adafruit ILI9341 driver with hardware SPI using the 104 | default SPI peripheral. 105 | @param cs Chip select pin # (OK to pass -1 if CS tied to GND). 106 | @param dc Data/Command pin # (required). 107 | @param rst Reset pin # (optional, pass -1 if unused). 108 | */ 109 | /**************************************************************************/ 110 | Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t rst) 111 | : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, cs, dc, rst) {} 112 | 113 | #if !defined(ESP8266) 114 | /**************************************************************************/ 115 | /*! 116 | @brief Instantiate Adafruit ILI9341 driver with hardware SPI using 117 | a specific SPI peripheral (not necessarily default). 118 | @param spiClass Pointer to SPI peripheral (e.g. &SPI or &SPI1). 119 | @param dc Data/Command pin # (required). 120 | @param cs Chip select pin # (optional, pass -1 if unused and 121 | CS is tied to GND). 122 | @param rst Reset pin # (optional, pass -1 if unused). 123 | */ 124 | /**************************************************************************/ 125 | Adafruit_ILI9341::Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs, 126 | int8_t rst) 127 | : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, spiClass, cs, dc, 128 | rst) {} 129 | #endif // end !ESP8266 130 | 131 | /**************************************************************************/ 132 | /*! 133 | @brief Instantiate Adafruit ILI9341 driver using parallel interface. 134 | @param busWidth If tft16 (enumeration in Adafruit_SPITFT.h), is a 135 | 16-bit interface, else 8-bit. 136 | @param d0 Data pin 0 (MUST be a byte- or word-aligned LSB of a 137 | PORT register -- pins 1-n are extrapolated from this). 138 | @param wr Write strobe pin # (required). 139 | @param dc Data/Command pin # (required). 140 | @param cs Chip select pin # (optional, pass -1 if unused and CS 141 | is tied to GND). 142 | @param rst Reset pin # (optional, pass -1 if unused). 143 | @param rd Read strobe pin # (optional, pass -1 if unused). 144 | */ 145 | /**************************************************************************/ 146 | Adafruit_ILI9341::Adafruit_ILI9341(tftBusWidth busWidth, int8_t d0, int8_t wr, 147 | int8_t dc, int8_t cs, int8_t rst, int8_t rd) 148 | : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, busWidth, d0, wr, dc, 149 | cs, rst, rd) {} 150 | 151 | // clang-format off 152 | static const uint8_t PROGMEM initcmd[] = { 153 | 0xEF, 3, 0x03, 0x80, 0x02, 154 | 0xCF, 3, 0x00, 0xC1, 0x30, 155 | 0xED, 4, 0x64, 0x03, 0x12, 0x81, 156 | 0xE8, 3, 0x85, 0x00, 0x78, 157 | 0xCB, 5, 0x39, 0x2C, 0x00, 0x34, 0x02, 158 | 0xF7, 1, 0x20, 159 | 0xEA, 2, 0x00, 0x00, 160 | ILI9341_PWCTR1 , 1, 0x23, // Power control VRH[5:0] 161 | ILI9341_PWCTR2 , 1, 0x10, // Power control SAP[2:0];BT[3:0] 162 | ILI9341_VMCTR1 , 2, 0x3e, 0x28, // VCM control 163 | ILI9341_VMCTR2 , 1, 0x86, // VCM control2 164 | ILI9341_MADCTL , 1, 0x48, // Memory Access Control 165 | ILI9341_VSCRSADD, 1, 0x00, // Vertical scroll zero 166 | ILI9341_PIXFMT , 1, 0x55, 167 | ILI9341_FRMCTR1 , 2, 0x00, 0x18, 168 | ILI9341_DFUNCTR , 3, 0x08, 0x82, 0x27, // Display Function Control 169 | 0xF2, 1, 0x00, // 3Gamma Function Disable 170 | ILI9341_GAMMASET , 1, 0x01, // Gamma curve selected 171 | ILI9341_GMCTRP1 , 15, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, // Set Gamma 172 | 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00, 173 | ILI9341_GMCTRN1 , 15, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, // Set Gamma 174 | 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, 175 | ILI9341_SLPOUT , 0x80, // Exit Sleep 176 | ILI9341_DISPON , 0x80, // Display on 177 | 0x00 // End of list 178 | }; 179 | // clang-format on 180 | 181 | /**************************************************************************/ 182 | /*! 183 | @brief Initialize ILI9341 chip 184 | Connects to the ILI9341 over SPI and sends initialization procedure commands 185 | @param freq Desired SPI clock frequency 186 | */ 187 | /**************************************************************************/ 188 | void Adafruit_ILI9341::begin(uint32_t freq) { 189 | 190 | if (!freq) 191 | freq = SPI_DEFAULT_FREQ; 192 | initSPI(freq); 193 | 194 | if (_rst < 0) { // If no hardware reset pin... 195 | sendCommand(ILI9341_SWRESET); // Engage software reset 196 | delay(150); 197 | } 198 | 199 | uint8_t cmd, x, numArgs; 200 | const uint8_t *addr = initcmd; 201 | while ((cmd = pgm_read_byte(addr++)) > 0) { 202 | x = pgm_read_byte(addr++); 203 | numArgs = x & 0x7F; 204 | sendCommand(cmd, addr, numArgs); 205 | addr += numArgs; 206 | if (x & 0x80) 207 | delay(150); 208 | } 209 | 210 | _width = ILI9341_TFTWIDTH; 211 | _height = ILI9341_TFTHEIGHT; 212 | } 213 | 214 | /**************************************************************************/ 215 | /*! 216 | @brief Set origin of (0,0) and orientation of TFT display 217 | @param m The index for rotation, from 0-3 inclusive 218 | */ 219 | /**************************************************************************/ 220 | void Adafruit_ILI9341::setRotation(uint8_t m) { 221 | rotation = m % 4; // can't be higher than 3 222 | switch (rotation) { 223 | case 0: 224 | m = (MADCTL_MX | MADCTL_BGR); 225 | _width = ILI9341_TFTWIDTH; 226 | _height = ILI9341_TFTHEIGHT; 227 | break; 228 | case 1: 229 | m = (MADCTL_MV | MADCTL_BGR); 230 | _width = ILI9341_TFTHEIGHT; 231 | _height = ILI9341_TFTWIDTH; 232 | break; 233 | case 2: 234 | m = (MADCTL_MY | MADCTL_BGR); 235 | _width = ILI9341_TFTWIDTH; 236 | _height = ILI9341_TFTHEIGHT; 237 | break; 238 | case 3: 239 | m = (MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR); 240 | _width = ILI9341_TFTHEIGHT; 241 | _height = ILI9341_TFTWIDTH; 242 | break; 243 | } 244 | 245 | sendCommand(ILI9341_MADCTL, &m, 1); 246 | } 247 | 248 | /**************************************************************************/ 249 | /*! 250 | @brief Enable/Disable display color inversion 251 | @param invert True to invert, False to have normal color 252 | */ 253 | /**************************************************************************/ 254 | void Adafruit_ILI9341::invertDisplay(bool invert) { 255 | sendCommand(invert ? ILI9341_INVON : ILI9341_INVOFF); 256 | } 257 | 258 | /**************************************************************************/ 259 | /*! 260 | @brief Scroll display memory 261 | @param y How many pixels to scroll display by 262 | */ 263 | /**************************************************************************/ 264 | void Adafruit_ILI9341::scrollTo(uint16_t y) { 265 | uint8_t data[2]; 266 | data[0] = y >> 8; 267 | data[1] = y & 0xff; 268 | sendCommand(ILI9341_VSCRSADD, (uint8_t *)data, 2); 269 | } 270 | 271 | /**************************************************************************/ 272 | /*! 273 | @brief Set the height of the Top and Bottom Scroll Margins 274 | @param top The height of the Top scroll margin 275 | @param bottom The height of the Bottom scroll margin 276 | */ 277 | /**************************************************************************/ 278 | void Adafruit_ILI9341::setScrollMargins(uint16_t top, uint16_t bottom) { 279 | // TFA+VSA+BFA must equal 320 280 | if (top + bottom <= ILI9341_TFTHEIGHT) { 281 | uint16_t middle = ILI9341_TFTHEIGHT - (top + bottom); 282 | uint8_t data[6]; 283 | data[0] = top >> 8; 284 | data[1] = top & 0xff; 285 | data[2] = middle >> 8; 286 | data[3] = middle & 0xff; 287 | data[4] = bottom >> 8; 288 | data[5] = bottom & 0xff; 289 | sendCommand(ILI9341_VSCRDEF, (uint8_t *)data, 6); 290 | } 291 | } 292 | 293 | /**************************************************************************/ 294 | /*! 295 | @brief Set the "address window" - the rectangle we will write to RAM with 296 | the next chunk of SPI data writes. The ILI9341 will automatically wrap 297 | the data as each row is filled 298 | @param x1 TFT memory 'x' origin 299 | @param y1 TFT memory 'y' origin 300 | @param w Width of rectangle 301 | @param h Height of rectangle 302 | */ 303 | /**************************************************************************/ 304 | void Adafruit_ILI9341::setAddrWindow(uint16_t x1, uint16_t y1, uint16_t w, 305 | uint16_t h) { 306 | static uint16_t old_x1 = 0xffff, old_x2 = 0xffff; 307 | static uint16_t old_y1 = 0xffff, old_y2 = 0xffff; 308 | 309 | uint16_t x2 = (x1 + w - 1), y2 = (y1 + h - 1); 310 | if (x1 != old_x1 || x2 != old_x2) { 311 | writeCommand(ILI9341_CASET); // Column address set 312 | SPI_WRITE16(x1); 313 | SPI_WRITE16(x2); 314 | old_x1 = x1; 315 | old_x2 = x2; 316 | } 317 | if (y1 != old_y1 || y2 != old_y2) { 318 | writeCommand(ILI9341_PASET); // Row address set 319 | SPI_WRITE16(y1); 320 | SPI_WRITE16(y2); 321 | old_y1 = y1; 322 | old_y2 = y2; 323 | } 324 | writeCommand(ILI9341_RAMWR); // Write to RAM 325 | } 326 | 327 | /**************************************************************************/ 328 | /*! 329 | @brief Read 8 bits of data from ILI9341 configuration memory. NOT from RAM! 330 | This is highly undocumented/supported, it's really a hack but kinda 331 | works? 332 | @param commandByte The command register to read data from 333 | @param index The byte index into the command to read from 334 | @return Unsigned 8-bit data read from ILI9341 register 335 | */ 336 | /**************************************************************************/ 337 | uint8_t Adafruit_ILI9341::readcommand8(uint8_t commandByte, uint8_t index) { 338 | uint8_t data = 0x10 + index; 339 | sendCommand(0xD9, &data, 1); // Set Index Register 340 | return Adafruit_SPITFT::readcommand8(commandByte); 341 | } 342 | -------------------------------------------------------------------------------- /examples/pictureEmbed/dragon.h: -------------------------------------------------------------------------------- 1 | #define DRAGON_WIDTH 110 2 | #define DRAGON_HEIGHT 70 3 | 4 | const PROGMEM uint16_t dragonBitmap[DRAGON_WIDTH * DRAGON_HEIGHT] = { 5 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 6 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 7 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 8 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 9 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 10 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 11 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 12 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 13 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 14 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 15 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 16 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 17 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 18 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 19 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 20 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 21 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 22 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 23 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 24 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 25 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 26 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 27 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 28 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 29 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 30 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 31 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 32 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 33 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 34 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 35 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 36 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 37 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 38 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 39 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 40 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 41 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 42 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 43 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 44 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 45 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 46 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X8C10, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 47 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 48 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 49 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 0XAC92, 0XFFFF, 50 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 51 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 52 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 53 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 54 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 55 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 56 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 57 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 58 | 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XB431, 0XA1C9, 0XAA4B, 0XFFFF, 0XFFFF, 59 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 60 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 61 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 0X9A2A, 0X9044, 62 | 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 63 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 64 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 65 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 66 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 67 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 68 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 69 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 70 | 0XFFFF, 0XFFFF, 0XDEFB, 0XB3B0, 0XA148, 0XB865, 0XC066, 0XC066, 0XAA4B, 71 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 72 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 73 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAB2E, 0X9864, 74 | 0XA865, 0XAAAC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 75 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAC92, 76 | 0X728B, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 77 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 78 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 79 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 80 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 81 | 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 0XAB2E, 0XAA4B, 0XAA4B, 0XAA4B, 0XA3AF, 82 | 0XB431, 0XB431, 0XB431, 0XA411, 0XA8E6, 0XD086, 0XB865, 0X7043, 0XA865, 83 | 0XD086, 0XAA4B, 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 84 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 85 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XA8E6, 86 | 0X9864, 0XC066, 0XD086, 0XB493, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 87 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 0X830D, 88 | 0X80C5, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 89 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 90 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 91 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 92 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 93 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB431, 0XC066, 0XD086, 0XD086, 0XD086, 94 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XB865, 0X9864, 95 | 0XC066, 0XD086, 0XB8E7, 0XB493, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 96 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 97 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XA1C9, 98 | 0XB865, 0X9864, 0XD086, 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 99 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAD14, 0X71A8, 100 | 0X9864, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 101 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 102 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 103 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 104 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 105 | 0XFFFF, 0XDEFB, 0XBDF7, 0XBD14, 0XA411, 0XB431, 0XB148, 0XD086, 0XC066, 106 | 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XD086, 0XA865, 107 | 0XB865, 0XD086, 0XD086, 0XB1CA, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 108 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 109 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB3B0, 110 | 0XB865, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XBD14, 0XFFFF, 111 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 0X932D, 0X78C5, 112 | 0XA865, 0XD086, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 113 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 114 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 115 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 116 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 117 | 0XDEFB, 0XAB2E, 0XA0C6, 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 118 | 0XB865, 0X78C5, 0X4208, 0X2104, 0X8947, 0X9864, 0X9864, 0X9864, 0XD086, 119 | 0XD086, 0XA865, 0X9864, 0XD086, 0XB865, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 120 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 121 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 122 | 0XB148, 0XC066, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 123 | 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB493, 0X89A8, 0X9044, 124 | 0XB865, 0XD086, 0XD086, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 125 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 126 | 0XFFFF, 0X7B8E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 127 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 128 | 0XFFFF, 0XFFFF, 0XAD14, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 129 | 0XFFFF, 0XB431, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 130 | 0X9864, 0XD086, 0XD086, 0XD086, 0XAA4B, 0X9A2A, 0XC066, 0XD086, 0XD086, 131 | 0XD086, 0XD086, 0XC066, 0X9044, 0X9864, 0X9864, 0X9044, 0XCE18, 0XFFFF, 132 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 133 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 134 | 0XB3B0, 0XC066, 0XB865, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 135 | 0XD086, 0XD086, 0XD086, 0XAAAC, 0XBD96, 0XAD14, 0XAAAC, 0X8044, 0X9864, 136 | 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XB431, 0XFFFF, 0XFFFF, 0XFFFF, 137 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 138 | 0XFFFF, 0XFFFF, 0XB3B0, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 139 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 140 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD96, 0XB8E7, 0XB431, 0XEF7D, 0XFFFF, 141 | 0XFFFF, 0XFFFF, 0XA32E, 0X9864, 0X9864, 0XAA4B, 0XAA4B, 0X9147, 0XB865, 142 | 0X9044, 0XD086, 0XA865, 0XD086, 0XC066, 0XC066, 0XD086, 0XD086, 0XD086, 143 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 144 | 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 145 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 146 | 0XDE9A, 0XB148, 0XD086, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 147 | 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0XA865, 0X9864, 148 | 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA148, 0XFFFF, 0XFFFF, 149 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 150 | 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XC066, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 151 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 152 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 153 | 0XA865, 0XAB2E, 0XBD96, 0XEF7D, 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 154 | 0XFFFF, 0XDEFB, 0XB1CA, 0XD086, 0XD086, 0X9864, 0X822A, 0XBDF7, 0XB493, 155 | 0XB148, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 156 | 0XD086, 0XD086, 0XD086, 0XAA4B, 0XBD14, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 157 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 158 | 0XFFFF, 0XB431, 0XB865, 0XD086, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 159 | 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0XC066, 0XA865, 0X9864, 160 | 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB3B0, 161 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 162 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCD96, 0XC066, 0XD086, 0XAA4B, 0XFFFF, 163 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 164 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 165 | 0XDE9A, 0XB865, 0XD086, 0XD086, 0XD086, 0XA865, 0X9147, 0X9C92, 0XFFFF, 166 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 0X80C5, 0X5822, 0X5A08, 0XDEFB, 167 | 0XFFFF, 0XFFFF, 0XCE79, 0XA0C6, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 168 | 0X9044, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XAB2E, 0XFFFF, 169 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 170 | 0XFFFF, 0XEF7D, 0XAA4B, 0XD086, 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, 171 | 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0XA865, 0XD086, 0X9864, 0X9864, 172 | 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 173 | 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 174 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 0XD086, 175 | 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 176 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 177 | 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XC066, 0XD086, 0XB865, 0X8044, 0X82AB, 178 | 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XAC92, 0XA3AF, 0X92AC, 179 | 0XAB2E, 0XAA4B, 0XA1C9, 0X9864, 0XB865, 0XA865, 0XC066, 0XD086, 0XD086, 180 | 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XB1CA, 0XBD14, 181 | 0X9CF3, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 182 | 0XFFFF, 0XFFFF, 0XCE18, 0XA8E6, 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 183 | 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0XC066, 0XD086, 0X9864, 0X9864, 184 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 185 | 0XD086, 0XD086, 0XD086, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 186 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 187 | 0XD086, 0XD086, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 188 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 189 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB3B0, 0XD086, 0XA865, 190 | 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 191 | 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 0X8044, 0X4822, 0X9044, 0X9044, 192 | 0XD086, 0XD086, 0XD086, 0XD086, 0X8044, 0X9864, 0XD086, 0XD086, 0XD086, 193 | 0XAA4B, 0XCE18, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 194 | 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XC066, 0XD086, 0XC066, 0XA865, 0XD086, 195 | 0XD086, 0XD086, 0XA865, 0X9864, 0XA865, 0XD086, 0XC066, 0X9864, 0X9864, 196 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 197 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9044, 0X3986, 0XCE79, 198 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 199 | 0XD086, 0XD086, 0XC066, 0XD086, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 200 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 201 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 202 | 0XB431, 0XC066, 0X90C6, 0XAA4B, 0XAA4B, 0XAA4B, 0XAA4B, 0X99C9, 0X9864, 203 | 0X9864, 0X9864, 0X6843, 0X6843, 0X5822, 0X4822, 0X7043, 0X9044, 0XC066, 204 | 0X9864, 0X7043, 0XC066, 0XB865, 0XD086, 0X7043, 0X8044, 0XC066, 0XD086, 205 | 0XD086, 0XD086, 0XD086, 0XC066, 0XB431, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 206 | 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAB2E, 0XD086, 0XD086, 0XC066, 0XA865, 207 | 0XD086, 0XD086, 0X9864, 0X9044, 0XC066, 0XD086, 0XC066, 0X9864, 0XA865, 208 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 209 | 0XB865, 0X9864, 0X9864, 0X9864, 0X9044, 0X6843, 0X6843, 0X8044, 0X7B0C, 210 | 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 211 | 0XB8E7, 0XD086, 0X9864, 0XC066, 0X9864, 0XD086, 0XAA4B, 0XFFFF, 0XFFFF, 212 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 213 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 214 | 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XA8E6, 0XCE18, 0XFFFF, 0XFFFF, 0XFFFF, 215 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XA148, 0XD086, 0XD086, 0XD086, 0XD086, 216 | 0XB148, 0XBD14, 0X9A2A, 0XD086, 0X9864, 0X9864, 0X6843, 0XD086, 0XC066, 217 | 0XC066, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0XA865, 0XEF7D, 0XFFFF, 218 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB1CA, 0XD086, 0XD086, 0XD086, 219 | 0X9864, 0XC066, 0X9864, 0X9864, 0XD086, 0XD086, 0XC066, 0X9864, 0XA865, 220 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0X9864, 221 | 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 0XA1C9, 222 | 0XDE9A, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 223 | 0XDE9A, 0XB8E7, 0XD086, 0XD086, 0X9864, 0XD086, 0X9864, 0XD086, 0XAA4B, 224 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 225 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 226 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XCE18, 0XFFFF, 227 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 0XC066, 228 | 0XD086, 0XAAAC, 0XEF7D, 0XFFFF, 0X932D, 0XB865, 0XB865, 0XC066, 0X7043, 229 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB148, 0XEF7D, 0XBD14, 0XA148, 230 | 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 0XD086, 231 | 0XD086, 0X8044, 0X9864, 0XA865, 0XD086, 0XD086, 0XC066, 0X9864, 0XA865, 232 | 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 233 | 0XB865, 0X9864, 0X9864, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 234 | 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 235 | 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 0XD086, 0XC066, 0XA865, 0XD086, 0X9864, 236 | 0XD086, 0XA0C6, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 237 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 238 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X8C10, 0XB431, 0XEF7D, 0XFFFF, 239 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 240 | 0XD086, 0XA1C9, 0X80C5, 0XEF7D, 0XFFFF, 0XB431, 0XD086, 0XB865, 0X9864, 241 | 0X8044, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XAA4B, 0XFFFF, 242 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 0XD086, 243 | 0XD086, 0XD086, 0XA865, 0XB865, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 244 | 0X9864, 0X9044, 0X9864, 0X9864, 0XC066, 0XD086, 0XD086, 0XB865, 0X9864, 245 | 0X9864, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 246 | 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 247 | 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 248 | 0XD086, 0X9864, 0XD086, 0X9864, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 249 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 250 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB148, 251 | 0XA1C9, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 252 | 0XFFFF, 0XBDF7, 0XD086, 0XBD14, 0XEF7D, 0XFFFF, 0XFFFF, 0XA148, 0XD086, 253 | 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 254 | 0XC066, 0XB431, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 255 | 0XAA4B, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XC066, 0X7043, 256 | 0X9864, 0XA865, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0X9864, 257 | 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 258 | 0XD086, 0XD086, 0XAAAC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 259 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XA32E, 0XAA4B, 0XAA4B, 0XAA4B, 0XAB2E, 260 | 0X9044, 0XD086, 0XA865, 0X9864, 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 261 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 262 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XBDF7, 0XDEFB, 0XFFFF, 0XFFFF, 263 | 0XFFFF, 0XB431, 0XB865, 0XAC92, 0XFFFF, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 264 | 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0X8947, 0XEF7D, 0XFFFF, 0XFFFF, 0XEF7D, 265 | 0X9044, 0XD086, 0XD086, 0XB865, 0XB865, 0X9864, 0XD086, 0XD086, 0XD086, 266 | 0XD086, 0XD086, 0XD086, 0XD086, 0XA0C6, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 267 | 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 268 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 269 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 270 | 0XD086, 0XD086, 0XD086, 0XA8E6, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 271 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 272 | 0XFFFF, 0XCE18, 0XC066, 0XD086, 0XA1C9, 0XB431, 0XD086, 0XD086, 0XB493, 273 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 274 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAB2E, 0XB865, 275 | 0XB3B0, 0XFFFF, 0XFFFF, 0X9AAC, 0XB865, 0XA148, 0XFFFF, 0X9AAC, 0XCD96, 276 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 277 | 0XFFFF, 0XAA4B, 0XB865, 0X9864, 0X9864, 0X8044, 0X9044, 0X8044, 0XD086, 278 | 0XD086, 0XD086, 0XD086, 0XD086, 0XA1C9, 0X90C6, 0XD086, 0XB3B0, 0XFFFF, 279 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 280 | 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 281 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 282 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 283 | 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XB3B0, 0XAA4B, 0X9864, 0X9864, 0XA1C9, 284 | 0XAB2E, 0XBD96, 0XFFFF, 0XAA4B, 0XD086, 0XD086, 0XB493, 0XFFFF, 0XAB2E, 285 | 0XC066, 0XAAAC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 286 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 287 | 0XFFFF, 0X8947, 0X9864, 0X9A2A, 0XFFFF, 0X9864, 0XD086, 0XA148, 0XEF7D, 288 | 0XA8E6, 0XB431, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 289 | 0XFFFF, 0XFFFF, 0XCE79, 0XC066, 0XD086, 0XD086, 0XD086, 0X9044, 0X7043, 290 | 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XFFFF, 0XFFFF, 0XBD14, 291 | 0X92AC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XB865, 292 | 0XB865, 0XD086, 0XD086, 0X8044, 0X6843, 0X9864, 0X9864, 0X9864, 0X9864, 293 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 294 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XBD96, 0XFFFF, 295 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB431, 0XB865, 0XD086, 0XD086, 0XD086, 296 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9147, 0XA865, 0XD086, 0XC066, 0XCE79, 297 | 0XFFFF, 0XFFFF, 0XCD96, 0X7926, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 298 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 299 | 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XC066, 0X9CF3, 0XC066, 0XD086, 300 | 0X8A2A, 0X8947, 0XD086, 0XBD14, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 301 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAD14, 0XC066, 0XD086, 0XD086, 0XD086, 302 | 0X9864, 0X9864, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 0XDEFB, 303 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 304 | 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 305 | 0XD086, 0XD086, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 306 | 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 307 | 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XD086, 0XD086, 0XD086, 308 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 309 | 0XA148, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 310 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 311 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 0XD086, 0X71A8, 312 | 0XD086, 0XD086, 0X9044, 0XD086, 0X9864, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 313 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB865, 0XA865, 0XA865, 314 | 0XD086, 0XD086, 0X7043, 0X9864, 0X9044, 0XA865, 0XD086, 0XD086, 0XD086, 315 | 0XD086, 0XA8E6, 0XB493, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 316 | 0XFFFF, 0X9864, 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 317 | 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 318 | 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, 319 | 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XA0C6, 0XD086, 320 | 0XD086, 0XD086, 0XA865, 0X80C5, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 321 | 0XD086, 0XC066, 0X8B8E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 322 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 323 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XD086, 324 | 0XD086, 0X9864, 0XA865, 0XA865, 0XC066, 0XD086, 0XA8E6, 0XEF7D, 0XFFFF, 325 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAAAC, 0XD086, 326 | 0XD086, 0XC066, 0X9864, 0X8044, 0XA865, 0X9044, 0XC066, 0X8044, 0XD086, 327 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9A2A, 0XFFFF, 0XFFFF, 0XFFFF, 328 | 0XFFFF, 0XFFFF, 0XEF7D, 0XA865, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 329 | 0X9864, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 330 | 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, 331 | 0X9864, 0X9864, 0X9864, 0XC066, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 332 | 0X9864, 0XD086, 0XD086, 0X90C6, 0XCE79, 0XFFFF, 0XFFFF, 0X9C92, 0X9864, 333 | 0XD086, 0XD086, 0XD086, 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 334 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 335 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 336 | 0XEF7D, 0XA0C6, 0XD086, 0XD086, 0XB865, 0X9864, 0XD086, 0XB1CA, 0XDE9A, 337 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 338 | 0XAA4B, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X7043, 0XA865, 0X9044, 339 | 0X9044, 0XD086, 0XD086, 0XD086, 0XD086, 0XB1CA, 0XB431, 0X82AB, 0XFFFF, 340 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 0XA865, 0XC066, 0XD086, 0XD086, 341 | 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0XC066, 0XD086, 0XD086, 342 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 343 | 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X7043, 0X8044, 0XDEFB, 0XFFFF, 344 | 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0XA32E, 0XFFFF, 0XFFFF, 0XFFFF, 345 | 0XFFFF, 0X728B, 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0XFFFF, 0XFFFF, 346 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 347 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 348 | 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAA4B, 0XD086, 0XD086, 0XB865, 0X90C6, 349 | 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 350 | 0XFFFF, 0XC515, 0X9044, 0XC066, 0XD086, 0XD086, 0XD086, 0X9864, 0X8044, 351 | 0XC066, 0X8044, 0X9044, 0XC066, 0XD086, 0XD086, 0XD086, 0XBDF7, 0XFFFF, 352 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0X6926, 0XC066, 0XD086, 353 | 0XD086, 0XD086, 0X9044, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 354 | 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 355 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA8E6, 0XAAAC, 0XB431, 0X8410, 356 | 0X8C71, 0XFFFF, 0XFFFF, 0XFFFF, 0XAAAC, 0XD086, 0XD086, 0XA865, 0XA32E, 357 | 0XB431, 0XB431, 0X8947, 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, 0XC066, 358 | 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 359 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 360 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB431, 0XD086, 0XD086, 361 | 0XD086, 0XB8E7, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 362 | 0XFFFF, 0XFFFF, 0XFFFF, 0XA0C6, 0XD086, 0XA865, 0X9864, 0X9864, 0X9864, 363 | 0X9044, 0X9044, 0XA865, 0X9864, 0XA865, 0X9864, 0XD086, 0XD086, 0XD086, 364 | 0XB3B0, 0XFFFF, 0XEF7D, 0XBDF7, 0XB431, 0XAAAC, 0XA148, 0XA865, 0XD086, 365 | 0XD086, 0XD086, 0XC066, 0XD086, 0XB865, 0X9044, 0X9864, 0X9864, 0XC066, 366 | 0XD086, 0XD086, 0XD086, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 367 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB8E7, 0XB493, 0XEF7D, 0XFFFF, 368 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 369 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 370 | 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 371 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 372 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAAAC, 373 | 0XD086, 0XD086, 0XD086, 0XD086, 0XB3B0, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 374 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XB865, 0XD086, 0XD086, 0XD086, 375 | 0XD086, 0XD086, 0X8044, 0X9864, 0XB865, 0X8044, 0XC066, 0X6843, 0XD086, 376 | 0XD086, 0X9864, 0XA0C6, 0X99C9, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 377 | 0XD086, 0XD086, 0XD086, 0XD086, 0X8044, 0XB865, 0XD086, 0XC066, 0XA865, 378 | 0XD086, 0XA865, 0X9864, 0X9864, 0XD086, 0XD086, 0XB865, 0X9864, 0XC066, 379 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB1CA, 0XDEFB, 0XFFFF, 380 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 381 | 0XDEFB, 0XAB2E, 0X9864, 0XC066, 0XD086, 0XC066, 0X9864, 0X89A8, 0XA865, 382 | 0XD086, 0XD086, 0XD086, 0XA865, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 383 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 384 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 385 | 0XFFFF, 0XAA4B, 0XD086, 0XD086, 0XD086, 0XD086, 0XA148, 0XFFFF, 0XFFFF, 386 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBDF7, 0XD086, 0XD086, 387 | 0XD086, 0XD086, 0XD086, 0XD086, 0X7043, 0XC066, 0X6843, 0XD086, 0X7043, 388 | 0XC066, 0X9044, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 389 | 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XD086, 0X9864, 0XB865, 0XB865, 390 | 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XC066, 391 | 0XD086, 0XA865, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9C92, 392 | 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 393 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 0XBDF7, 0XCE79, 0XEF7D, 394 | 0XAAAC, 0XD086, 0XD086, 0XD086, 0XD086, 0XA1C9, 0XFFFF, 0XFFFF, 0XFFFF, 395 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 396 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 397 | 0XFFFF, 0XFFFF, 0XFFFF, 0XA148, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 398 | 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCD96, 399 | 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X6843, 0X9044, 0X9864, 400 | 0XA865, 0XA865, 0X9044, 0XB865, 0XD086, 0XD086, 0XB865, 0X9864, 0X8044, 401 | 0XC066, 0XD086, 0XD086, 0XB865, 0XD086, 0XA865, 0X9044, 0XD086, 0XB865, 402 | 0XB865, 0XB865, 0XA865, 0XD086, 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 403 | 0XD086, 0XA865, 0X9864, 0XB865, 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, 404 | 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XA1C9, 405 | 0XAB2E, 0XBD14, 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 406 | 0XB493, 0XB148, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XBD14, 0XFFFF, 407 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 408 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 409 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0XD086, 410 | 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 411 | 0XFFFF, 0XA148, 0XD086, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 412 | 0X9864, 0X9864, 0X7043, 0X9864, 0XD086, 0XD086, 0XA865, 0X9864, 0XB865, 413 | 0XD086, 0X9864, 0XD086, 0XC066, 0X7043, 0XD086, 0XD086, 0X9864, 0XC066, 414 | 0XA865, 0XD086, 0X9864, 0XD086, 0XC066, 0XA865, 0XD086, 0XA865, 0XC066, 415 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9044, 0X9864, 416 | 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 417 | 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0X9864, 0X9864, 418 | 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA1C9, 419 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 420 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 421 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XC066, 0XA865, 422 | 0XD086, 0XD086, 0XD086, 0XD086, 0XAD14, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 423 | 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 424 | 0XD086, 0X9044, 0X8044, 0X9864, 0XA865, 0XD086, 0XA865, 0X9864, 0XC066, 425 | 0XD086, 0XD086, 0XA865, 0XC066, 0XC066, 0XA865, 0X9864, 0XD086, 0XA865, 426 | 0XC066, 0XD086, 0X9864, 0XD086, 0X9864, 0XD086, 0XD086, 0XB865, 0XB865, 427 | 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 428 | 0XD086, 0X9864, 0X8044, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 429 | 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 430 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 431 | 0XB8E7, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 432 | 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X0547, 0X0547, 433 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0XB865, 434 | 0XD086, 0X31C3, 0XC066, 0XD086, 0XD086, 0X9864, 0XB865, 0X2305, 0X0547, 435 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X9864, 0XD086, 0XD086, 0XD086, 436 | 0XD086, 0XD086, 0XD086, 0X6843, 0X9864, 0XA865, 0XB865, 0X9864, 0XC066, 437 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XA865, 0XD086, 0X9864, 438 | 0XD086, 0X9864, 0XD086, 0XD086, 0XA865, 0XC066, 0X9864, 0XD086, 0XD086, 439 | 0XD086, 0XC066, 0XA865, 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 440 | 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X8044, 0X8044, 0XD086, 0XD086, 441 | 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 442 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 443 | 0XD086, 0X8145, 0X0C66, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 444 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 445 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 446 | 0X8145, 0XD086, 0X9105, 0X0506, 0X80E5, 0XD086, 0XD086, 0X9864, 0XD086, 447 | 0X9864, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X80E5, 0XD086, 448 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X8044, 0XB865, 0X9864, 0XB865, 449 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0X9864, 0XD086, 450 | 0XD086, 0X9864, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 451 | 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 0X9864, 0XD086, 0XD086, 452 | 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0X7043, 0X9864, 0XA865, 453 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0XD086, 454 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 455 | 0XD086, 0XC066, 0X59E5, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 456 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 457 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 458 | 0X0547, 0X2305, 0XB865, 0XD086, 0X2305, 0X0547, 0X1B65, 0XD086, 0XD086, 459 | 0XB865, 0XB865, 0X9864, 0X6985, 0X1B65, 0X0547, 0X0547, 0X0547, 0X0547, 460 | 0X0C05, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0X8044, 0X9864, 461 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 462 | 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 463 | 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 0XA865, 464 | 0XA865, 0XD086, 0XD086, 0XA865, 0X9864, 0XC066, 0XD086, 0XD086, 0X9864, 465 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 466 | 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 467 | 0XD086, 0XD086, 0X80E5, 0X0C05, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 468 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 469 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 470 | 0X0547, 0X0547, 0X0547, 0X1B65, 0XC066, 0X8044, 0X04A6, 0X0547, 0X0547, 471 | 0X80E5, 0XD086, 0XD086, 0X9864, 0XA865, 0XD086, 0XD086, 0X1AC4, 0X0405, 472 | 0X0547, 0X0547, 0X4285, 0XC066, 0X9864, 0X9864, 0X9864, 0X9864, 0X8044, 473 | 0XA865, 0XD086, 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 474 | 0X7043, 0XC066, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 475 | 0XD086, 0XD086, 0XA865, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 476 | 0XD086, 0XB865, 0X8044, 0XD086, 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, 477 | 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 478 | 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 479 | 0XD086, 0XA865, 0X59E5, 0X0BA5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 480 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 481 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 482 | 0X0547, 0X0547, 0X0547, 0X0506, 0X3264, 0X98A5, 0X7145, 0X04A6, 0X0547, 483 | 0X0547, 0X0547, 0X1BC5, 0XC066, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 484 | 0X9864, 0XD086, 0X7145, 0X4984, 0X80A4, 0XD086, 0XD086, 0XD086, 0XD086, 485 | 0XD086, 0X9864, 0X7043, 0X9864, 0X9864, 0XB865, 0X9864, 0XD086, 0XD086, 486 | 0XD086, 0X8044, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0XA865, 487 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 488 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X8044, 0XC066, 0XD086, 0XD086, 489 | 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, 490 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0XA865, 0X9864, 491 | 0X6985, 0X4285, 0X1B65, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 492 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 493 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 494 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0X0445, 0X0547, 495 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4A25, 0XD086, 0XD086, 0XD086, 496 | 0X9864, 0X9864, 0XC066, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 497 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 498 | 0XD086, 0XB865, 0X9864, 0X4822, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 499 | 0X6843, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 500 | 0XD086, 0XC066, 0X9864, 0X8044, 0X9864, 0X9864, 0X9864, 0X8044, 0XD086, 501 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 502 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 503 | 0XA8C5, 0X32C5, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 504 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 505 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 506 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 507 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4A25, 508 | 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0XB865, 0XD086, 0X9864, 0X9864, 509 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 510 | 0XD086, 0X9864, 0XA865, 0XB865, 0XD086, 0X8044, 0XD086, 0XD086, 0XD086, 511 | 0XD086, 0XD086, 0X6843, 0XD086, 0X9044, 0X9864, 0X9044, 0X9864, 0XB865, 512 | 0X9864, 0X9864, 0XB865, 0XA865, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 513 | 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 514 | 0XC066, 0X9864, 0XA865, 0X9864, 0X9044, 0XA865, 0XD086, 0XD086, 0XD086, 515 | 0XD086, 0XD086, 0XD086, 0XD086, 0X98A5, 0X32C5, 0X0547, 0X0547, 0X0547, 516 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 517 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 518 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 519 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 520 | 0X0547, 0X0547, 0X32C5, 0XC066, 0XD086, 0XD086, 0XD086, 0XB865, 0X9864, 521 | 0X8044, 0X9864, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 522 | 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XA865, 0X9864, 0X9864, 0XA865, 523 | 0X9864, 0X9044, 0X9864, 0XD086, 0X6843, 0X9864, 0XC066, 0XA865, 0XD086, 524 | 0XD086, 0XB865, 0X8044, 0X7043, 0XB865, 0XD086, 0X9864, 0X9864, 0X9864, 525 | 0X9864, 0X9864, 0XA865, 0XB865, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 526 | 0XD086, 0XD086, 0X9044, 0XD086, 0XD086, 0XC066, 0XA865, 0XC066, 0X9864, 527 | 0X9864, 0X9044, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X80E5, 528 | 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 529 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 530 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 531 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 532 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4285, 0XD086, 0XD086, 0XD086, 533 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 534 | 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0X7043, 0XD086, 535 | 0X8044, 0X9044, 0XD086, 0XD086, 0X9044, 0X9864, 0X6843, 0XD086, 0XD086, 536 | 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XB865, 0XA865, 537 | 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X6985, 538 | 0X04A6, 0X4A25, 0X80A4, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 539 | 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X9864, 0X8044, 0X9864, 0XC066, 540 | 0XD086, 0XD086, 0XC066, 0X6985, 0X0C66, 0X0547, 0X0547, 0X0547, 0X0547, 541 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 542 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 543 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 544 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4A25, 545 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 546 | 0XD086, 0XD086, 0XA865, 0X9044, 0XB865, 0XA865, 0X9864, 0X9044, 0X9864, 547 | 0XB865, 0X9044, 0XC066, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 0XA865, 548 | 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0X9864, 549 | 0XB865, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 550 | 0X4A25, 0X0506, 0X0547, 0X0547, 0X1BC5, 0XA8C5, 0XD086, 0XD086, 0XB865, 551 | 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 552 | 0XD086, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XB865, 0X32C5, 0X0547, 553 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 554 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 555 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 556 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 557 | 0X0547, 0X0506, 0X8145, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 558 | 0XA865, 0XD086, 0XD086, 0XB865, 0XB865, 0XD086, 0XB865, 0X8044, 0XB865, 559 | 0XA865, 0X8044, 0XA865, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X9864, 560 | 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X8044, 0X7043, 561 | 0X7043, 0XC066, 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 562 | 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0X2305, 563 | 0X32C5, 0X6944, 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XD086, 0XD086, 564 | 0X9864, 0XD086, 0XD086, 0X9864, 0XB865, 0XB865, 0XD086, 0XC066, 0XB865, 565 | 0XD086, 0X7145, 0X0C66, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 566 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 567 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 568 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 569 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0XB865, 0XD086, 0XD086, 0XD086, 570 | 0XD086, 0XD086, 0XA865, 0XC066, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 571 | 0X9044, 0XB865, 0X9044, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 0XD086, 572 | 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XB865, 0XA865, 0XD086, 0XB865, 573 | 0XB865, 0XD086, 0XD086, 0XB865, 0X9864, 0X7043, 0XD086, 0XD086, 0XD086, 574 | 0XD086, 0XD086, 0XD086, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 575 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X2305, 0X0BA5, 0X0BA5, 0X7145, 576 | 0X9864, 0X90A4, 0X58E3, 0XD086, 0XB865, 0XB865, 0XD086, 0X9864, 0XD086, 577 | 0XD086, 0X1A63, 0XA8C5, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 0X0547, 578 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 579 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 580 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 581 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X32C5, 0XD086, 582 | 0XD086, 0XD086, 0XD086, 0XA865, 0X90A4, 0X4183, 0X6985, 0X5924, 0X9044, 583 | 0XD086, 0XB865, 0XB865, 0X9044, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 584 | 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XA8C5, 0X1B65, 0X0405, 585 | 0X0405, 0X9044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 586 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X4A25, 0X0547, 0X0547, 0X0547, 587 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 588 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X1AC4, 0XD086, 0XD086, 589 | 0X9864, 0XD086, 0XD086, 0X4285, 0X04A6, 0X59E5, 0X9864, 0X4224, 0X0547, 590 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 591 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 592 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 593 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 594 | 0X0506, 0X98A5, 0XD086, 0XD086, 0X22C4, 0X0506, 0X0547, 0X0547, 0X0547, 595 | 0X2305, 0XD086, 0XA865, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 596 | 0XD086, 0X9864, 0XD086, 0XD086, 0X9044, 0XD086, 0XB865, 0X6985, 0X04A6, 597 | 0X0547, 0X0547, 0X0547, 0X90A4, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 598 | 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 0X0BA5, 599 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 600 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 601 | 0X22C4, 0XA865, 0X9044, 0X9864, 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 602 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 603 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 604 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 605 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 606 | 0X0547, 0X0547, 0X0547, 0X4A25, 0XD086, 0X98A5, 0X0506, 0X0547, 0X0547, 607 | 0X0547, 0X0506, 0X4183, 0X9864, 0X9044, 0XB865, 0XD086, 0XD086, 0XD086, 608 | 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 0X7145, 0X0BA5, 0X0405, 0X04A6, 609 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X32C5, 0XD086, 0XD086, 0XD086, 610 | 0XD086, 0XD086, 0XD086, 0X9044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 611 | 0XD086, 0XD086, 0X90A4, 0X4285, 0X04A6, 0X0547, 0X0547, 0X0547, 0X0547, 612 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 613 | 0X0547, 0X0547, 0X0405, 0XD086, 0XD086, 0X9864, 0XD086, 0X6985, 0X0547, 614 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 615 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 616 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 617 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 618 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X1B65, 0XD086, 0X4A25, 0X0547, 619 | 0X0547, 0X0547, 0X0547, 0X4A25, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 620 | 0XD086, 0X8145, 0X0B64, 0XD086, 0XD086, 0XA865, 0X32C5, 0X0547, 0X0547, 621 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X2305, 622 | 0X98A5, 0XC066, 0X9864, 0X9864, 0X9864, 0XC066, 0X9864, 0XA865, 0XD086, 623 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X80E5, 0X59E5, 624 | 0X0C05, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 625 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0XC066, 0XD086, 0X9044, 0XD086, 626 | 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 627 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 628 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 629 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 630 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X98A5, 631 | 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X59E5, 0XD086, 0XB865, 0XB865, 632 | 0XD086, 0XD086, 0XA8C5, 0X0C66, 0X0506, 0X98A5, 0XD086, 0X90A4, 0X0547, 633 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 634 | 0X0547, 0X0547, 0X0506, 0X70E4, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 635 | 0X9864, 0X9864, 0X9864, 0X9044, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 636 | 0XD086, 0XD086, 0XC066, 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 637 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X68E4, 0X9044, 638 | 0X9864, 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 639 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 640 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 641 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 642 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 643 | 0X0445, 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X90A4, 0XA865, 644 | 0X9044, 0XD086, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 0X32C5, 0XD086, 645 | 0X4A25, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 646 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X7145, 0X9864, 0X9864, 647 | 0XA865, 0XA865, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 648 | 0XD086, 0X90A4, 0X80E5, 0XC066, 0XD086, 0X7145, 0X0547, 0X0547, 0X0547, 649 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 650 | 0X9864, 0XD086, 0X9864, 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 651 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 652 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 653 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 654 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 655 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X80E5, 656 | 0XD086, 0XB865, 0XB865, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 0X0547, 657 | 0X0506, 0X9044, 0X04A6, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 658 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 659 | 0X0547, 0X0547, 0X4285, 0XB865, 0XA865, 0X9864, 0XC066, 0XD086, 0XA865, 660 | 0XC066, 0XD086, 0XC066, 0X0C05, 0X0547, 0X0445, 0X4285, 0X58E3, 0X0547, 661 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 662 | 0X0547, 0X0547, 0X9864, 0XD086, 0X9864, 0XD086, 0X4285, 0X0547, 0X0547, 663 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 664 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 665 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 666 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 667 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 668 | 0X0547, 0X9864, 0XD086, 0X9864, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 669 | 0X0547, 0X0547, 0X0547, 0X0405, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 670 | 0X0405, 0X04A6, 0X2305, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 671 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X80E5, 0X9864, 0X9864, 0X9864, 672 | 0X8044, 0XB865, 0XD086, 0XD086, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, 673 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 674 | 0X0547, 0X0547, 0X0547, 0X4285, 0XA865, 0X7043, 0XB865, 0XD086, 0X2305, 675 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 676 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 677 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 678 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 679 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 680 | 0X0547, 0X0547, 0X2365, 0X9864, 0XB865, 0XB865, 0XA8C5, 0X0C66, 0X0547, 681 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 682 | 0X0506, 0X70A4, 0XA865, 0X8044, 0XD086, 0X7145, 0X0506, 0X0547, 0X0547, 683 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0X3224, 0XD086, 0XD086, 684 | 0XC066, 0X9864, 0XC066, 0XD086, 0XD086, 0X4A25, 0X0547, 0X0547, 0X0547, 685 | 0X0547, 0X0547, 0X0547, 0X1B65, 0X32C5, 0X68E4, 0X2365, 0X0547, 0X0547, 686 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X9864, 0XD086, 0X9864, 0XD086, 687 | 0XC066, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 688 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 689 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 690 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 691 | 0X0547, 0X2305, 0X6985, 0X59E5, 0X22C4, 0X0445, 0X0547, 0X0547, 0X0547, 692 | 0X0547, 0X0547, 0X0547, 0X0C66, 0XA8C5, 0XA865, 0XA865, 0XD086, 0X2305, 693 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 694 | 0X0547, 0X0547, 0X0BA5, 0X0C05, 0X0C66, 0X9044, 0XD086, 0XD086, 0X8145, 695 | 0X04A6, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C05, 0XB865, 0XC066, 696 | 0X9864, 0X9044, 0XA865, 0XD086, 0XD086, 0XD086, 0X4A25, 0X0547, 0X0547, 697 | 0X0547, 0X0547, 0X0547, 0X0547, 0X22C4, 0X70E4, 0XB865, 0X9864, 0XC066, 698 | 0X2365, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X5924, 0X9864, 699 | 0XA865, 0XD086, 0X9864, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 700 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 701 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 702 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 703 | 0X0547, 0X0547, 0X0547, 0X3224, 0X22C4, 0X9864, 0XA865, 0XC066, 0X6985, 704 | 0X0BA5, 0X0506, 0X0547, 0X0506, 0X32C5, 0XB865, 0XD086, 0XD086, 0XD086, 705 | 0X80E5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 706 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C05, 0X4A25, 707 | 0X80E5, 0XD086, 0XB865, 0X4A25, 0X0BA5, 0X22C4, 0X6985, 0X90A4, 0X9864, 708 | 0X9864, 0X9864, 0X9044, 0XD086, 0XD086, 0XD086, 0XB865, 0X2305, 0X0547, 709 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0X0547, 0X1B04, 710 | 0XC066, 0XD086, 0XC066, 0X4285, 0X0506, 0X0547, 0X0547, 0X0547, 0X4A25, 711 | 0XD086, 0XD086, 0XD086, 0XD086, 0X59E5, 0X0547, 0X0547, 0X0547, 0X0547, 712 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 713 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 714 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 715 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X7043, 0XA865, 716 | 0XD086, 0XD086, 0XB865, 0X7043, 0X6843, 0X9864, 0XD086, 0XD086, 0XD086, 717 | 0XD086, 0XD086, 0X1B65, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 718 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X32C5, 0X3264, 0X6985, 719 | 0X59E5, 0X04A6, 0X0547, 0X4A25, 0XC066, 0X9864, 0XA865, 0XD086, 0XD086, 720 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X6985, 0X04A6, 721 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 722 | 0X0C66, 0X59E5, 0X6883, 0X9864, 0X9864, 0XD086, 0X98A5, 0X4285, 0X32C5, 723 | 0X6944, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X2305, 0X0547, 0X0547, 724 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 725 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 726 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 727 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X32C5, 0X6985, 0X6944, 728 | 0XC066, 0XC066, 0X9864, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 729 | 0XD086, 0XD086, 0XD086, 0XA865, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 730 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X80E5, 0X9864, 731 | 0X9864, 0XD086, 0XD086, 0XB865, 0X6985, 0X6985, 0X9044, 0XD086, 0XD086, 732 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X59E5, 0X0C05, 733 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 734 | 0X0506, 0X6985, 0XA865, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0XB865, 735 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X6985, 736 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 737 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 738 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 739 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X3264, 0X7145, 740 | 0X6985, 0X9864, 0X9044, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 0XD086, 741 | 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X90A4, 0X6985, 0X4285, 742 | 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 743 | 0X2305, 0X04A6, 0X90A4, 0XC066, 0X9864, 0X9044, 0X9864, 0X9864, 0X9864, 744 | 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X58E3, 0X3264, 745 | 0X1B65, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 746 | 0X0547, 0X0547, 0X4224, 0X4224, 0X3264, 0X7043, 0X4A25, 0X32C5, 0X49C4, 747 | 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 748 | 0XD086, 0XD086, 0X7145, 0X1B65, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 749 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 750 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 751 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 752 | 0X04A6, 0X0547, 0X0547, 0X04A6, 0X80E5, 0XD086, 0XD086, 0XD086, 0XD086, 753 | 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X7145, 0X49C4, 0XB865, 0XD086, 754 | 0XD086, 0XD086, 0X9044, 0X9864, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, 755 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0X5883, 0XA865, 0XD086, 0XD086, 756 | 0XC066, 0X9864, 0X7145, 0X6985, 0X3264, 0X80E5, 0X7145, 0X32C5, 0X70E4, 757 | 0XD086, 0XD086, 0XD086, 0X68E4, 0X4285, 0X04A6, 0X0547, 0X0547, 0X0547, 758 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X0547, 0X0547, 0X0547, 0X0506, 759 | 0X6985, 0X9864, 0XD086, 0XD086, 0XA865, 0X9864, 0XD086, 0XD086, 0XD086, 760 | 0XB865, 0X80E5, 0X80A4, 0XC066, 0XD086, 0XD086, 0X58E3, 0X32C5, 0X0547, 761 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 762 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 763 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 764 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X90A4, 0XA865, 0XA865, 0XD086, 765 | 0XD086, 0XD086, 0X6985, 0X0BA5, 0X0405, 0X22C4, 0X0C05, 0X0547, 0X0547, 766 | 0X0C66, 0X7145, 0XC066, 0XD086, 0X70A4, 0X4285, 0X58E3, 0X0506, 0X0547, 767 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X59E5, 0XA865, 0X9044, 768 | 0X9864, 0X4A25, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 769 | 0X0547, 0X0547, 0X1B65, 0X98A5, 0XD086, 0X9044, 0X7145, 0X8044, 0X04A6, 770 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 771 | 0X1BC5, 0X7145, 0X9864, 0XD086, 0X98A5, 0X2305, 0X0506, 0X0506, 0X32C5, 772 | 0X6985, 0X32C5, 0X04A6, 0X0547, 0X0547, 0X0C05, 0X5984, 0XA865, 0X9864, 773 | 0X9864, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 774 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 775 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 776 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X49C4, 0X59E5, 0X22C4, 777 | 0X70E4, 0X9864, 0X7145, 0X1B65, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 778 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0X0405, 0X0506, 0X0547, 0X0506, 779 | 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X2264, 780 | 0X0506, 0X0506, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 781 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X0405, 0X0445, 0X0547, 782 | 0X0C66, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 783 | 0X0547, 0X0506, 0X90A4, 0X80E5, 0X4224, 0X3224, 0X0506, 0X0547, 0X0547, 784 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 785 | 0X0405, 0X0547, 0X0506, 0X1A03, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 786 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 787 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 788 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0B64, 789 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 790 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 791 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 792 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 793 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 794 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 795 | 0X0547, 0X0547, 0X0547, 0X04A6, 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 796 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 797 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 798 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 799 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 800 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 801 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 802 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 803 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 804 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 805 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 806 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 807 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 808 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 809 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 810 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 811 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 812 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 813 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 814 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 815 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 816 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 817 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 818 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 819 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 820 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 821 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 822 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 823 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 824 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 825 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 826 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 827 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 828 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 829 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 830 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 831 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 832 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 833 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 834 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 835 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 836 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 837 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 838 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 839 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 840 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 841 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 842 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 843 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 844 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 845 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 846 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 847 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 848 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 849 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 850 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 851 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 852 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 853 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 854 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 855 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 856 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 857 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 858 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 859 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 860 | 0X0547, 0X0547, 0X0547, 0X0547, 0X0547}; 861 | --------------------------------------------------------------------------------