Forum Rule: Always post complete source code & details to reproduce any issue!
Page 16 of 16 FirstFirst ... 6 14 15 16
Results 376 to 388 of 388

Thread: Teensy APA102 POV Poi / Pixel Poi Build. Tutorial

  1. #376
    Senior Member mortonkopf's Avatar
    Join Date
    Apr 2013
    Location
    London, uk
    Posts
    911
    @abrownnm - sorry, but I haven't used that abstraction of the poi code so can't help with that. However, have you run your setup with just using the firstlight Fastled example in the examples dropdown? I know it sounds odd, but always good to go right back to basics at this point, to just doublecheck that all lads are working as should. Run examples>FastLed>firstlight with your lads type and led number, and your pins as they are for the poi project. This will give you confidence to discount wiring as an issue.

  2. #377
    Junior Member
    Join Date
    Jun 2019
    Posts
    11
    Quote Originally Posted by mortonkopf View Post
    @abrownnm - sorry, but I haven't used that abstraction of the poi code so can't help with that. However, have you run your setup with just using the firstlight Fastled example in the examples dropdown? I know it sounds odd, but always good to go right back to basics at this point, to just doublecheck that all lads are working as should. Run examples>FastLed>firstlight with your lads type and led number, and your pins as they are for the poi project. This will give you confidence to discount wiring as an issue.
    Yeah,

    This is Invisibug's version. I tried yours and got the same error as post #55 and couldn't seem to remedy as described.

    So, I am not totally helpless. I got a basic image to show up on the poi after tinkering around with it tonight. Used a simple red heart repeated and got that to do what I expected and flash what looked like proper colors..stuck it in the tube, held onto the wires and waved it fast enough to see one replication of the image. Pretty rudimentary, but it felt like a breakthrough after all the time with nothing really working out.

    Still a bit confused at why certain images seem to work and what each setting I am toying with does.. some run smooth and some seem to just freeze up after a second or two. Followed a few tips from reading the thread and went from there.

    I was toying with the speed of the processor after reading that it doesn't run well at certain speed (i.e 24Mhz) and that was having varying effects dependent upon the image. Seemed a bit random to me. Keeping all else the same, sometimes wouldn't run at a starting 180 Mhz or 16Mhz for example, but I got it to tun at 2Mhz then ramped up to 180Mhz and it seemed to work then. Not sure what all the settings do, Also played around with Optimization settings. Any advice here for a Teensy in general, specifically the 3.6 is appreciated.

    I think now that I have a bit of confidence that I can at least get an image up I am going to start securing parts and doing my solders to make more reliable connections and pretty much build the whole thing so I can spin it up for testing live in a more realistic way without worrying about all the wires and bare components hanging about.

    Any advice on generally getting this working smoother that you all have found would be cool, settings you use, any caps or resistors that are crucial if any, the sizing you chose etc..

    @Invisibug

    I'll send over the code I got to work ( at least partially in the morning and maybe we can compare what changed that worked?

    Also, the next step for me once I get the images running smooth would be learning how to set up phases of different images using your code so I can test that out..Perhaps you have a code setup with multiple switching images that you use which I can utilize as a template?

    Then, I can worry about coding for the switching button, and wiring up the cutoff properly on my circuit.. haven't looked too much into those yet beyond basic wiring up.

    Sorry if I am asking too much of you all, I am just really excited to get this going. I am sure I could eventually struggle through it on my own with what's out there already (and I've been doing a ton of research) but your help is super beneficial to getting to the point quickly.

    Thanks again!

  3. #378
    Senior Member
    Join Date
    Sep 2015
    Location
    Taiwan, Asai. (Traditional Chinese)
    Posts
    158
    @abrownmn : freezing sounds like a power supply bug,
    if you have your image squeezed, you can adjust settings yourself for a good effect.
    I recommend at a speed that repeats letters "ABCD..." less than 40 units a second, and compact pictures "a face, pikachu or something" not more than 20 units/second.

    if you need a switch button for changing image, that was far more coding to do, you can start from using a POV automatically change picture ~8 second or something ,
    than turn that work to a button. I suggest Timer ISR (I use flexitimer 2 library ) for button management.

  4. #379
    Senior Member
    Join Date
    Sep 2015
    Location
    Taiwan, Asai. (Traditional Chinese)
    Posts
    158
    Sorry to interrupt, sharing my work on POV

    Here's my latest POV, 36 pixels with Teensy LC setup, surely it should run well with Teensy 3.6 I think? I'll do that later in JULY.
    I've completed adding on nrf24 module into my POV and achieved wireless synchronize, while MTP cannot be used with it due to lack of RAM

    Using time splice hybrid with rest and radio listening, I achieved a radio-active (can be wake by other prop) state with only <800uA current in total,
    a typical nRF on radio listening took ~14mA alone.
    which is good as it can stay in power for more than 60 days with 18650, usually 1~2 day is enough.

    completed item video on FB
    Last edited by Po Ting; 06-13-2019 at 04:21 PM.

  5. #380
    Senior Member mortonkopf's Avatar
    Join Date
    Apr 2013
    Location
    London, uk
    Posts
    911
    Quote Originally Posted by Po Ting View Post
    completed item video on FB
    @po ting, these look great.

  6. #381
    Senior Member mortonkopf's Avatar
    Join Date
    Apr 2013
    Location
    London, uk
    Posts
    911
    well, this is my barebones code:

    Code:
    /*
    *This sketch outputs images to persistence of vision led strips
    *It uses FastLed to drive APA102 leds, sending colour values from
    *arrays held in flash memory (designated by 'const'). You need to
    *set the number of slices you have made your image into,
    *e.g. bmp image of 60 pixels high by 150 wide
    * would give 60 num_leds and
    * 150 slices (number of slices you have made your image into)
    */
    
    #include "FastLED.h"
    
    #define NUM_LEDS 60
    #define DATA_PIN 2
    #define CLOCK_PIN 3
    CRGB leds[NUM_LEDS];
    int numberOfSlices = 150;
    
    void setup() {
    
    delay(200);
      FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN>(leds, NUM_LEDS);
    }
    
    const unsigned int array1[] = { 0x000100, 0x000100, 0x000100, 0x000100, 0x000100, 0x000100, /*etc .. add your values here*/}; //end of array
    
    const unsigned int array2[] = { /*different image output from the tool goes here if additional images wanted - just rename array1[] to another name, any name will do*/}; //end of array
    
    void loop() {
    PoiSonic(8000,array1);
    //PoiSonic(2000, array2); 
    /*first value is time to show the image, second value is array of colour values to use*/
    /*put other code for patterns and more arrays here*/
    }
    
    void PoiSonic(unsigned long time, const unsigned int array[]){
    unsigned long currentTime = millis();
     while (millis()< currentTime + (time)) {
    
    int f= numberOfSlices;
    int z; //a counter
    int j=NUM_LEDS;
    
        for (int x=0;x<f;x++){
         for(z=NUM_LEDS;z>0;z--){
           leds[z-1]=array[x+((j-z)*f)];}
         FastLED.show();
         delayMicroseconds(40); //may need to increase / decrease depending on spin rate
         }       
        delayMicroseconds(1000); //may need to increase / decrease depending on spin rate
       }
     }
    the simplest way to add different patterns and images and make a play set is to just the functions in loop. you can go as complicated as you like with coding a set, but just writing some maths patterns, giving each pattern a function and then listing them, is a simple way to go.

    you can write a function with a length of run time added as a variable that is passed as you go through the loop, this way you can reuse the same pattern again later, but just pass it a different time to run for.

    eg, write a function that displays bouncing dots for an amount of time, in your loop you would list the functions
    untested code:
    Code:
    void bouncing(unsigned long time);
    
    void bouncing(unsigned long time) {
    unsigned long currentTime = millis();
    while (millis()< currentTime + (time)) {
    for(int i = 0; i < NUM_LEDS; i++) {
        leds[i] = CRGB(255,255,255);
        leds[NUM_LEDS - 1 - i] = CRGB(255,255,255);
        FastLED.show();
        leds[i] = CRGB::Black;
        leds[NUM_LEDS - 1 - i] = CRGB::Black;
        FastLED.show();}
        }
    }
    
    in the loop you just list 
    bouncing(5000);
    after you poisonic routine

  7. #382
    Junior Member
    Join Date
    Jun 2019
    Posts
    11
    Quote Originally Posted by Po Ting View Post
    Sorry to interrupt, sharing my work on POV

    Here's my latest POV, 36 pixels with Teensy LC setup, surely it should run well with Teensy 3.6 I think? I'll do that later in JULY.
    I've completed adding on nrf24 module into my POV and achieved wireless synchronize, while MTP cannot be used with it due to lack of RAM

    Using time splice hybrid with rest and radio listening, I achieved a radio-active (can be wake by other prop) state with only <800uA current in total,
    a typical nRF on radio listening took ~14mA alone.
    which is good as it can stay in power for more than 60 days with 18650, usually 1~2 day is enough.

    completed item video on FB
    Congrats man!

    Those look really great, thanks for the advice as well.

  8. #383
    Junior Member
    Join Date
    Jun 2019
    Posts
    11
    Hello Again,

    So I wanted to start getting some real data and tests in before searching for more help here. A co-worker hooked the setup to a scope and it appears like we are getting some dirty data utilizing SPI and it's causing issues with freezing and inconsistency.

    Maybe I am missing something simple here about how everything should be setup. Do I need to add caps, resistors anywhere in particular to help with this? I am doubtful it's a power issue, but possible? The wires were fairly long for the data and clock line, perhaps this leads to more issues than I'd expect? Hopefully someone here can chime in and shed some light on what's going on. Let me know what you all think.

    See attached scope captures and sketch.

    First set of captures were taken at 120MHz core clock and 2MHz SPI clock rate
    Second set of captures were taken at 120MHz core clock and 12MHz SPI clock rate
    The green trace is SCK (Clock) and the yellow trace is MOSI (Data from Teensy to LED strip)
    The attached image was used to create the array in the sketch.


    Click image for larger version. 

Name:	2MHz 1.png 
Views:	8 
Size:	48.2 KB 
ID:	16817
    Click image for larger version. 

Name:	2MHZ 2.png 
Views:	8 
Size:	27.3 KB 
ID:	16818

    Click image for larger version. 

Name:	12 MHz 2.png 
Views:	7 
Size:	29.6 KB 
ID:	16819
    Click image for larger version. 

Name:	12MHz 1.png 
Views:	11 
Size:	51.7 KB 
ID:	16820

    The code used is below.

    Code:
    /*
    *This sketch outputs images to persistence of vision led strips
    *It uses FastLed to drive APA102 leds, sending colour values from
    *arrays held in flash memory (designated by 'const'). You need to
    *set the number of slices you have made your image into,
    *e.g. bmp image of 60 pixels high by 150 wide
    * would give 60 num_leds and
    * 150 slices (number of slices you have made your image into)
    */
    
    #include "FastLED.h"
    
    #define NUM_LEDS 64
    #define DATA_PIN 11
    #define CLOCK_PIN 13
    CRGB leds[NUM_LEDS];
    int numberOfSlices = 64;
    
    void setup() {
    
    delay(200);
      FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, BGR, DATA_RATE_MHZ(12)>(leds, NUM_LEDS);
      FastLED.setBrightness( 30 );
    }
    
    const unsigned int array1[] = { 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2222, 0xcb2126, 0xcc2027, 0xcc2027, 0xcc2127, 0xcc2127, 0xcc2027, 0xcc2127, 0xcd2127, 0xcd1f26, 0xc61c1c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xce2424, 0xcd1f26, 0xcb2127, 0xcb2126, 0xcb2127, 0xcc2226, 0xcb2126, 0xcb2128, 0xcd2328, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc91f27, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2227, 0xca202a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2225, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0xc61c2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc61c1c, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xaa0000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2328, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xaa0000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xca202a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2127, 0xcc2222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd01c26, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd01c26, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc61c1c, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd01c26, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd42a2a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd42a2a, 0xcc2128, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2127, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2027, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2127, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2327, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2228, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2128, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2126, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xaa0000, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2328, 0x000000, 0x000000, 0xcd232a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd1f26, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0x000000, 0x000000, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2127, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2027, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2225, 0xce1f28, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xaa0000, 0x000000, 0x000000, 0xcc222a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2226, 0x000000, 0x000000, 0xcc2227, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2028, 0x000000, 0x000000, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0x000000, 0x000000, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xc61c1c, 0xc61c1c, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xce1e24, 0xce1e24, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd23c41, 0xde6e72, 0xe79799, 0xeaa3a5, 0xe99da0, 0xe17e82, 0xd5474c, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2225, 0xca2028, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xdb6267, 0xeeb6b8, 0xfae8e9, 0xffffff, 0xffffff, 0xffffff, 0xfcf2f2, 0xf1c4c5, 0xde7074, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0xcc2225, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd1363b, 0xefb8ba, 0xffffff, 0xffffff, 0xffffff, 0xfbeff0, 0xf9e4e5, 0xfcf1f1, 0xffffff, 0xffffff, 0xffffff, 0xf0bfc0, 0xd1353a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2128, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd1353a, 0xf6d6d7, 0xffffff, 0xffffff, 0xedafb1, 0xd9595d, 0xd0343a, 0xce2b30, 0xd1373c, 0xdb6267, 0xf2c6c7, 0xffffff, 0xffffff, 0xf4d0d1, 0xcf2d33, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2226, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2228, 0xefbabc, 0xffffff, 0xfefafa, 0xde7175, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd242a, 0xedb1b3, 0xffffff, 0xffffff, 0xe89d9f, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2128, 0xcc2226, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xda5e62, 0xffffff, 0xffffff, 0xe4898d, 0xcc2127, 0xcc2228, 0xdf7377, 0xe38488, 0xd03136, 0xcc2127, 0xcc2127, 0xcc2127, 0xd03238, 0xfbecec, 0xffffff, 0xfcf4f4, 0xd64c51, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2228, 0xd01c26, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xedb2b4, 0xffffff, 0xf8e2e3, 0xce292f, 0xcc2127, 0xe89b9e, 0xffffff, 0xffffff, 0xecacaf, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xeeb4b6, 0xffffff, 0xffffff, 0xe59093, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xca2025, 0x000000, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xf8e1e2, 0xffffff, 0xebaaac, 0xcc2127, 0xd23a40, 0xfdf7f7, 0xffffff, 0xffffff, 0xf5d3d5, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xe99ea1, 0xffffff, 0xffffff, 0xeba7a9, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd42a2a, 0x000000, 0xcc2027, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xfaebec, 0xffffff, 0xe58f92, 0xcc2127, 0xd85459, 0xffffff, 0xffffff, 0xffffff, 0xedb2b4, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xeba6a9, 0xffffff, 0xffffff, 0xeaa5a8, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2228, 0x000000, 0x000000, 0xcc2225, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xf8e0e1, 0xffffff, 0xe99ea1, 0xcc2127, 0xd5494e, 0xfefcfc, 0xffffff, 0xffffff, 0xdf7579, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xf1c1c3, 0xffffff, 0xffffff, 0xe69295, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0x000000, 0x000000, 0xaa0000, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xecacaf, 0xffffff, 0xf8e1e1, 0xd03136, 0xcd262c, 0xf8e1e1, 0xffffff, 0xfdf5f5, 0xd23b40, 0xcc2127, 0xcc2127, 0xcc2127, 0xcf2e34, 0xfaebec, 0xffffff, 0xfefcfc, 0xdb6166, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xaa0000, 0x000000, 0x000000, 0x000000, 0xcb2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd64e53, 0xfefcfc, 0xffffff, 0xe27f82, 0xce2b31, 0xfcf0f1, 0xffffff, 0xf2c8ca, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xde7175, 0xffffff, 0xffffff, 0xf5d5d6, 0xcf2e34, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xdf7477, 0xfaeaeb, 0xd95a5f, 0xd9585c, 0xffffff, 0xffffff, 0xf1c2c4, 0xcc2127, 0xcc2127, 0xcc2127, 0xd03136, 0xf8dfe0, 0xffffff, 0xffffff, 0xe17c7f, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xca202a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd03339, 0xcc2228, 0xe69497, 0xffffff, 0xffffff, 0xfffdfd, 0xe28386, 0xd23d42, 0xd9595d, 0xf4cfd0, 0xffffff, 0xffffff, 0xf3cacb, 0xcd272d, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2227, 0xc61c2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xf2c6c7, 0xffffff, 0xfdf6f7, 0xfefcfc, 0xffffff, 0xfdf8f8, 0xffffff, 0xffffff, 0xffffff, 0xf4d1d2, 0xd1393e, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2126, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd03237, 0xfbeded, 0xffffff, 0xefbbbd, 0xda5e62, 0xf4d1d2, 0xfefbfb, 0xfef9f9, 0xf7dbdc, 0xe58f92, 0xcf2c32, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2027, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2026, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xd9585c, 0xffffff, 0xffffff, 0xe48a8d, 0xcc2127, 0xcc2329, 0xd33f44, 0xd33f44, 0xcd262c, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2226, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2129, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xe38689, 0xffffff, 0xffffff, 0xd8555a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xcc222a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc222a, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xe9a1a4, 0xffffff, 0xf8e2e3, 0xce2b30, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2126, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd42a2a, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xeaa4a6, 0xffffff, 0xe4888b, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2227, 0xcb2127, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2126, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xeba9ab, 0xf9e6e6, 0xce2b31, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xcc2222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd42a2a, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xe28083, 0xdb6367, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2027, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd232a, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2227, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2026, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2228, 0xce1f28, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2222, 0xcd2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2026, 0xd42a2a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xca2028, 0xcc2227, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xca2028, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2222, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xcc222a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2226, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2127, 0xc61c1c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2027, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2226, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd2328, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2028, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2127, 0xcc2227, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcb2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcd2028, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2228, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcb2127, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcd1f26, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2227, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2028, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2127, 0xcc2027, 0xaa0000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xaa0000, 0xcc2126, 0xcc2127, 0xcc2127, 0xcc2127, 0xce2424, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd01c26, 0xcc2127, 0xcc2127, 0xcc2226, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcc2027, 0xcc2226, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd42a2a, 0xcc2228, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, }; //end of array 
    //const unsigned int array2[] = { /*different image output from the tool goes here if additional images wanted - just rename array1[] to another name, any name will do*/}; //end of array
    
    void loop() {
    PoiSonic(8000,array1);
    //PoiSonic(2000, array2); 
    /*first value is time to show the image, second value is array of colour values to use*/
    /*put other code for patterns and more arrays here*/
    }
    
    void PoiSonic(unsigned long time, const unsigned int array[]){
    unsigned long currentTime = millis();
     while (millis()< currentTime + (time)) {
    
    int f= numberOfSlices;
    int z; //a counter
    int j=NUM_LEDS;
    
        for (int x=0;x<f;x++){
         for(z=NUM_LEDS;z>0;z--){
           leds[z-1]=array[x+((j-z)*f)];}
         FastLED.show();
         delayMicroseconds(40); //may need to increase / decrease depending on spin rate
         }       
        delayMicroseconds(1000); //may need to increase / decrease depending on spin rate
       }
     }

  9. #384
    Senior Member
    Join Date
    Sep 2015
    Location
    Taiwan, Asai. (Traditional Chinese)
    Posts
    158
    @abrownmn : did you meet any problem using with the hardwares?

    Not sure if cap/resistors matter,
    I did add a 47uF between my power battery
    teensy have enough cap on the board
    and apa102 were pretty robust and don't need extra cap to work fine,

    adding some 470R between apa102 data<-teensy MOSI and CLK<-teensy SCK would help protect the Teensy,
    as sometimes mis-shorting Vdd and dat pin on the apa102-strip could lead to damage of Teensy chip, if you power the apa102 with 5V or directly with lithium battery(4.2V)
    (though I didn't add in my design anyway)

  10. #385
    Junior Member
    Join Date
    Nov 2019
    Posts
    4
    I'm starting a similar project and I just read through the whole thread - great stuff!

    Since I'm using a whole lot of LEDs (1200 WS2812Bs - not using them for POI but the underlying coding principles are similar) and a large BMP (1,200x15,000px) I'm trying to get as much speed as possible out of my setup.

    Below is the code I'm using (adapted from mortonkopf's post #223):

    The things I changed are:

    - int paintSpeed =50; -> int paintSpeed =1;
    - uint8_t povidx = 0; -> uint16_t povidx = 0; (to be able to use more than 256 LEDs)

    Further things to try:
    - remove all serial.prints
    - upgrade from Teensy 3.2 to 3.6 (has anyone tried this on 4.0?)

    Also I'm rethinking my choice of LEDs, the WS2813's dead pixel resistance is very appealing for mounted installations. Perhaps the upgraded PWM speed (2000 vs 400Hz) would have an improvement to speed as well...?

    Any other suggestions? I only need about 60leds/meter.


    Code:
    /*
      This code uses the T3.6 onboard sd card slot, BMP stored on the card are light painted using a cheap strip of ws2811 leds using FastLed
      code derived from lightpainting sketch:
      https://forum.pjrc.com/threads/24535-OctoWS2811-POV-reading-BMP-from-SD-card
      and this post:
      ------> https://forum.pjrc.com/threads/40871-Teensy-6-5-SDFat-BMP-file-read-fail
    */
    
    #include <SPI.h>
    #include <SD.h>
    #include <FastLED.h>
    
    // set up variables using the SD utility library functions:
    Sd2Card card;
    SdVolume volume;
    SdFile root;
    
    
    File bmpFile;
    const int chipSelect = 10;
    
    // you can remove all Serial.print when you have your paint staff
    // set up, this is just for debug
    
    int bmpWidth, bmpHeight;
    uint8_t bmpDepth, bmpImageoffset;
    #define BUFFPIXEL 2048
    
    unsigned int Color(byte b, byte r, byte g); //placed here to avoid compiler error
    
    // How many leds in your strip?
    #define NUM_LEDS 1150
    
    #define DATA_PIN 2 //the pin that Led strip is attached to
    CRGB leds[NUM_LEDS];
    int paintSpeed = 1; //adjust this to vary image refresh rate
    
    
    
    void setup(void) {
      Serial.begin(9600);
      FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
      FastLED.setBrightness(1);
    
      //test our led strip - you can remove this to the comment line "// if you dont get ..."
      for (int x = 0; x < NUM_LEDS; x++) {
        leds[x] = CRGB::Green;
      }
      FastLED.show();
      delay(500);
      for (int x = 0; x < NUM_LEDS; x++) {
        leds[x] = CRGB::Red;
      }
      FastLED.show();
      delay(500);
      for (int x = 0; x < NUM_LEDS; x++) {
        leds[x] = CRGB::Blue;
      }
      FastLED.show();
      delay(500);
      for (int x = 0; x < NUM_LEDS; x++) {
        leds[x] = CRGB::Black;
      }
      FastLED.show();
      delay(500);
      // if you dont get all leds lighting red then going off, check your wiring
    
      Serial.println("init");
      delay(500);
      Serial.print("Initializing SD card...");
    
      if (!SD.begin(chipSelect)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("SD OK!");
    
    }
    void loop() {
    
      bmpDraw("1.bmp");//example filename
    }
    
    //////////////////Function to read BMP and send to Led strip a row at a time/////////////////////
    void bmpDraw(char* filename) {
    
      File   bmpFile;
      int      bmpWidth, bmpHeight;   // W+H in pixels
      uint8_t  bmpDepth;              // Bit depth (currently must report 24)
      uint32_t bmpImageoffset;        // Start of image data in file
      uint32_t rowSize;               // Not always = bmpWidth; may have padding
      uint8_t  sdbuffer[3 * BUFFPIXEL]; // pixel in buffer (R+G+B per pixel)
      uint32_t povbuffer[BUFFPIXEL];  // pixel out buffer (16-bit per pixel)//////mg/////this needs to be 24bit per pixel////////
      uint32_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer
      boolean  goodBmp = false;       // Set to true on valid header parse
      boolean  flip    = true;        // BMP is stored bottom-to-top
      int      w, h, row, col;
      int  r, g, b;
      uint32_t pos = 0, startTime = millis();
      uint16_t  povidx = 0;
      boolean  first = true;
    
    
      // Open requested file on SD card
      bmpFile = SD.open(filename);
      Serial.println(filename);
      // Parse BMP header
      if (read16(bmpFile) == 0x4D42) { // BMP signature
        Serial.print("File size: ");
        Serial.println(read32(bmpFile));
        (void)read32(bmpFile); // Read & ignore creator bytes
        bmpImageoffset = read32(bmpFile); // Start of image data
        Serial.print("Image Offset: ");
        Serial.println(bmpImageoffset, DEC);
        // Read DIB header
        Serial.print("Header size: ");
        Serial.println(read32(bmpFile));
        bmpWidth  = read32(bmpFile);
        bmpHeight = read32(bmpFile);
        if (read16(bmpFile) == 1) { // # planes -- must be '1'
          bmpDepth = read16(bmpFile); // bits per pixel
          Serial.print("Bit Depth: "); Serial.println(bmpDepth);
          if ((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
    
            goodBmp = true; // Supported BMP format -- proceed!
            Serial.print("Image size: ");
            Serial.print(bmpWidth);
            Serial.print('x');
            Serial.println(bmpHeight);
    
            // BMP rows are padded (if needed) to 4-byte boundary
            rowSize = (bmpWidth * 3 + 3) & ~3;
    
            // If bmpHeight is negative, image is in top-down order.
            // This is not canon but has been observed in the wild.
            if (bmpHeight < 0) {
              bmpHeight = -bmpHeight;
              flip      = false;
            }
    
            w = bmpWidth;
            h = bmpHeight;
    
            for (row = 0; row < h; row++) {
              if (flip) // Bitmap is stored bottom-to-top order (normal BMP)
                pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
              else     // Bitmap is stored top-to-bottom
                pos = bmpImageoffset + row * rowSize;
              if (bmpFile.position() != pos) { // Need seek?
                bmpFile.seek(pos);
                buffidx = sizeof(sdbuffer); // Force buffer reload
              }
    
              for (col = 0; col < w; col++) { // For each column...
                // read more pixel data
                if (buffidx >= sizeof(sdbuffer)) {
                  povidx = 0;
                  bmpFile.read(sdbuffer, sizeof(sdbuffer));
                  buffidx = 0; // Set index to beginning
                }
                // set pixel
                r = sdbuffer[buffidx++];
                g = sdbuffer[buffidx++];
                b = sdbuffer[buffidx++];
                Serial.print(r); Serial.print(" "); Serial.print(g); Serial.print(" "); Serial.println(b);
                //we need to output BRG 24bit colour//
                povbuffer[povidx++] = (b << 16) + (g << 8) + r;
              }
    
              for (int i = 0; i < NUM_LEDS; i++) {
                leds[i] = povbuffer[i];
              }
              FastLED.show();
              delay(paintSpeed);// change the delay time depending effect required
            } // end scanline
    
          } // end goodBmp
        }
      }//end of IF BMP
      Serial.println();
    
      bmpFile.close();
    }
    
    //*************Support Funcitons****************//
    // These read 16- and 32-bit types from the SD card file.
    // BMP data is stored little-endian, Arduino is little-endian too.
    // May need to reverse subscript order if porting elsewhere.
    uint16_t read16(File& f) {
      uint16_t result;
      ((uint8_t *)&result)[0] = f.read(); // LSB
      ((uint8_t *)&result)[1] = f.read(); // MSB
      return result;
    }
    uint32_t read32(File& f) {
      uint32_t result;
      ((uint8_t *)&result)[0] = f.read(); // LSB
      ((uint8_t *)&result)[1] = f.read();
      ((uint8_t *)&result)[2] = f.read();
      ((uint8_t *)&result)[3] = f.read(); // MSB
      return result;
    }

    Are there any other speed improvements that can be made? As a last resort perhaps updating two pixels at once instead of one?

  11. #386
    Senior Member
    Join Date
    Sep 2015
    Location
    Taiwan, Asai. (Traditional Chinese)
    Posts
    158
    @Janezek

    I suggest using octows2812 library, available at PJRC website libraries
    which splices your LED chain into 8 parallel chains and uses DMA for maxima speed

    but you'll need more setup on hardware connection , more wires to solder but shouldn't be a problem

  12. #387
    Junior Member
    Join Date
    Nov 2019
    Posts
    4
    Thank you I'll give it a shot, I already have a OctoWS adapter lying around somewhere.

    Any ideas perhaps about how to achieve an exact refresh rate, for example 25 lines of bitmap per second? I'm trying to sync the animation to music.

  13. #388
    Senior Member
    Join Date
    Sep 2015
    Location
    Taiwan, Asai. (Traditional Chinese)
    Posts
    158
    I use some of a elapsed microseconds and use other things to do that,
    and check if time is favored or not before FastLED.show(), or DMAshow(), whatever draws the LED
    this part of my

    Code:
    unsigned long targetmicros = 0;
    elapsedMicros nowmicros;
    all other variables are accordingly, with my lines below my Frame Per Second "FPS" was pretty stable and precise, also can be change any time of the program by my function "setFPS(unsigned int fps)"
    Code:
    void setFPS(unsigned int fps) {
      setfps = fps;
      FPSchecker = (setfps > FPSlimits);
      if (FPSchecker) {
        screen = (1000000 / setfps) - 4;
        targetmicros = nowmicros + screen;
      }
    }
    Code:
     
    
     if (FPSchecker) {
        while (nowmicros < targetmicros) {
          //
          delayMicroseconds(1);
        }
        targetmicros = nowmicros  + screen;
      }
    FastLED.show();
    hope this helps, you can write function that works like this.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •