noel2022.py

Created by andreanx

Created on December 24, 2022

21 KB


#image converted on TI-Planet
#tiplanet.org/img2calc

#the image drawing function
#- rle : image RLE-compressed data
#- w : width of image
#- pal : palette of colors to use with image
#- zoomx : horizontal zoom
#- zoomy : vertical zoom
#- itransp : index of 1 transparent color in palette or -1 if none
def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1, itransp=-1):
  i, x = 0, 0
  x0, y0 = int(x0), int(y0)
  nvals = len(pal)
  nbits = 0
  nvals -= 1
  while(nvals):
    nvals >>= 1
    nbits += 1
  maskval = (1 << nbits) - 1
  maskcnt = (0xFF >> nbits >> 1) << nbits
  while i<len(rle):
    v = rle[i]
    mv = v & maskval
    c = (v & maskcnt) >> nbits
    if (v & 0b10000000 or nbits == 8):
      i += 1
      c |= rle[i] << (7 - nbits + (nbits == 8))
    c = c + 1
    while c:
      cw = min(c, w - x)
      if mv != itransp:
        fill_rect(x0 + x*zoomx, y0, cw*zoomx, zoomy, pal[mv])
      c -= cw
      x = (x + cw) % w
      y0 += x == 0 and zoomy
    i += 1


#palette for your image
#31 RGB-888 colors
palette = (
"#000000","#808070","#506858","#a89080","#e09470","#e0bc88","#905828","#e8ac50","#503428","#e04c28","#783c20","#60c450","#7074f0","#183828","#308040","#b07840","#d0c440","#003400","#106c18","#181810","#209020","#c05858","#f0e4e0","#4814a0","#005000","#c01010","#d09088","#68b868","#48c428","#70dcf0","#00a0d0",
)

#your image data
#320x90 RLE-5 pixels
image = (
b'\xa0\b\xe1\0\xc0N\xa1\1\xa0N\2A"\x80\5\3\x81\3\3\xa0>\3\xc1\1\3\xc0\4\2\x81\1\xa0\3\3\xc1\3\3\1C\4\3\xa0=\x81\4\3\x80\3"\xe1\0\xe0\1\3\xa1\4\3\1\x83\1\4%\3\xe0<\1\xe2\0\x81\1\3\1\3\1\3\1\3\xc1\1\3\xc0\1\2A"#\xe1\4\3\1\3\1\3\1\x83\1\4\5\4%\3\xa0<\1\xa2\1\1\2\1\3\1\x83\2\1\3\1\3\xe1\0\3@B\xe1\6\3\1\xe3\0$\5$%\4\3\x80<\xe2\1\1\2\1\3\1\xc3\2\1\3\1\3\xc1\a\3\1\3\1\3\1\xe3\0\4\5\4\3!\4%$\xe0;\x82\2\1\2\1\3\1\xc3\2\1\3\xc1\b\3\1\xe3\0\4\5\4\1\6\a\6\b\4\5\4\3\xe0;B\b\6\a\xe2\0\1\2\1\3\1\xc3\2\1\3\1\3\1\3\xc1\5\3\1\3\1\3\1\3\1C$\5\4H\6H%\4\3\xc0;"H\6\b\xe2\0\1\2\1\3\1\xc3\2\1\3\x81\a\3\1\3\1C$\5\4\t\n\xa8\1\2\5\4\1\xa0,\v\xe0\16\2\f\n\xa8\1B\1\2\1\3\1\xc3\2\1\3\1\3\1\3\xc1\4\3\1\3\1\3\1\3\1CD\1\b\n\xa8\1\n\f\4\5\4\3\x80,\v\xe0\16\b\n\xa8\1\n\tB\1\2\1\3\1\xc3\2\1\3\x81\6\3\1\x83\1\4\5\4\1\xe8\0*\xe8\0\n\2\4\5\4\3\xe0\17\1\2\xa0\32\v@+\0\r\x80\16\x88\2\n\bB\1\2\1\3\1\xc3\2\1\3\1\3\1\3\xc1\3\3\1\3\1\3\1\x83\1\4\5\4\1(\n(J\x88\1\2\4\5\1\xa0\17\1\0\1\2\0\1\x80\32\v\0+\16\r\xa0\16\b\n\xa8\2B\1\2\1\3\1\xc3\2\1\3\x81\5\3\1\x83\1\4\5\4\1\f\n\b*\b*(\n\xe8\0\4\5\4\3\xe0\16\1\xa2\1\1\x80\32\v.M\x80\16\x88\1\n\x88\1\n\fB\1\2\1\3\1\xc3\2\1\3\1\3\1\3\xc1\2\3\1\3\1\3\1\x83\1\4\5\4\1\b\n(*\bJ\x88\1\n\t\4\5\4\3\xa0\r#\xa0\1\1\2\xc0\32\v\0\v\16\xed\0\xe0\r\b\nH\n\b\n\xe8\0\n\bB\1\2\1\3\1\xc3\2\1\3\x81\4\3\1\xe3\0$\5\4\1\xe8\0J\bJ\b\n\xe8\0\n\2\4\5\1\xe0\16\1\0\1\2\0\1\xe0\31\xeb\0N\r\x80\16\b\nH\n\x88\2B\1\2\1\3\1\xc3\2\1\3\1\3\1\3\xc1\1\3\1\3\1\3\1\xe3\0\4\5\4\3\a\6(\n\bJ\bJ\b*\x88\1\2$\3\xe0\nC\xc0\2\1\xa2\1\1\xc0\31\x8b\1.M\xc0\r\b\n(*\b\n\xc8\1\6\a"\1\2\1\3\1\xc3\2\1\3\x81\3\3\1\xe3\0\4\5\4\3\b\6(\n\xc6\2*\x88\1\2\5\4\3\xe0\16\1\2\xe0\31+\16K\16\v.\r\xe0\r\b\n(*\b\n\xe8\0\nH\6\b"\1\2\1\3\1\xc3\2\1\3\1\3\1\3A\3\1\3\1\3\1\xe3\0\4\5\4\3\x88\1\n/\6/\6/\6\17\6*\b\n(\6\a\4\5\4\3\xe0\aC\xe0\3#\xa0\1\1\2\x80\32+.+N-\xc0\r\b\n(*\b\n\b\n\b*\xa8\1"\1\2\1\3\1\xc3\2\1\3\x81\2\3\1\xe3\0\4\5\4\1\x88\1*\xc6\2*\b\nH\6\2\4\5\1\xc0\1\1\xc0\3\xe3\0\xe0\a\1\2\xe0\31\xab\1N\xed\0\0-\xc0\f\b\n(*\bJ\bJ\xa8\1"\1\2\1\3\1\xc3\2\1\3\1\3\1\3\1\3\1\3\1\xe3\0D\1\t\n\b*\b*/\6/\6/\6\17\6*\b\n\x88\1\2\4\5\3\xe0\0\x81\1\3 \xe3\0\xe0\6C\xc0\2\1\2\xc0\31+\16\xab\1N\xed\0\xe0\f\b\n(*\bJ\bJ(\n(\n\t"\1\2\1\3\1\xc3\2\1\3\x81\1\3\1\xe3\0\4\5\4\1\b\n(*\b*/\6/\6/\6\17\6*\b\n\b\n\xe8\0\2$\3\x80\1\1\xc0\f\1\2\xc0\31\v\16K.\vN\x8d\1\xe0\f\b\n(*\bJ\bJ\bJ(\n\b"\1\2\1\3\1\xc3\2\1\3\1\3\1\3\1\xe3\0\4\5\4\1\xe8\0J\b*\xc6\2*\bJH\n\f\4\5\1\3 \x81\1\3\x80\6\xe3\0\xc0\4\1\2\x80\31\v\0\x8b\1\16\v.M\16-\x80\r\b\n(*\bJ\bJ\bJ\x88\1"\1\2\1\3\1\xc3\2\1\3\1\3\1\xe3\0\4\5\4\1H\n\bJ\b*/\6/\6/\6\17\6*\b\n\b\n\b\n(\n\2\4\5C \1\xc0\1\xe3\0\xa0\1\x83\1\x80\a\1\2\xa0\31+\16+N\vN-\16-\xe0\f\b\n(*\bJ\bJ\bJ\b*H"\1\2\1\3\1\xa3\4\4\5\4\1\f\n\b*\b\n\b\n\b*\xc6\2*\bJ\b\n\xe8\0\2\4\5\1@\1\xc0\f\1\2\x80\17\20\xc0\tK\16\v\16\v\xce\1\xed\0\xe0\f\b\n(*\bJ\bJ\b\n\b\n\bJ\b\n\f"\1\2\1\3\1\xe3\3D\3\b\n\bJ\bJ\bJ\bJ\bJ\bJ\bJ\b*\xe8\0\2\4\5\3 \1\xc0\f\1\2\xa0\16\2\5P\5\xa0\t\v\16+\16+N\r\16-\16M\xc0\f\b\n(*\bJ\bJ\bJ\bJ(\n\b\xe2\0\1\3\1\xc3\3$\3\1H*(\n\b\n\bJ\bJ\b*(*(*(*H\n\t\1\4\5#\1C\xe0\v\1\2\xa0\16\1\5P\5\xa0\t\16\xab\1\16\r\xae\1-\xe0\f\xe8\1\n(*(\n\b\n(*\x88\1\xe2\0\1\3\1\xc3\3A\2\x88\t\6\3\4#\1\xe3\0\0\3\x80\v\1\2\xc0\16\21\20\22\20\xa0\tK\16K\x8e\1\r\16\x8d\1\xe0\t\22\xa0\2\xe8\6\xe2\0\1#\xa4\2\3\xc1\f\3\1C\x80\v\1\2\xc0\16\23\24\v\xa0\t\v\16\v\16\x8b\1.M.\xed\0\xc0\t\24\v\xa0\2\xe8\6\6\a\6\xca\3\x81\1\xe3\f\xe0\n\1\2\xa0\5\x95\1\x80\b\21\22\21\x80\t\16\xcb\1.\r.\xed\0.-\xa0\t\21\22\21\x80\2(\n\b\xea\4\b\nH\6\xe8\0\t\xa8\1\f\xe8\0\n\6\a\6"!\x83\1\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\xa0\n\1\2\x80\5\25\x96\1\25\xa0\a\21\22\v\21\27\30\xc0\b\xeb\1\x8e\1\xad\2\xe0\b\22\v1\30\xe0\1\xea\6H*\6\n\6\xea\0\6\n\6*\b*\6\xea\0"!C\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4#\xe0\t\1\2\xe0\4\25\xd6\1\25\xe0\6\x131+\21\xa0\tK\xce\1\xcd\2\xc0\b1+\21\x80\2\xea\0\xc6\3\xaa\2(\xa6\3\b\xca\1\t*"!\3\xa4\v\3\xc0\t\1\2\xc0\4\25\x96\2\25\xe0\6\23\30\v\21\30\21\xe0\b\x8b\1.\v.\xed\0\16-NM\xc0\b\21\v\21\30\21\xe0\1\xe8\0\6*\6*F*\6*\6\xe8\2\x8a\1\'\6\5\a\17J\b\xea\2\f\n\2\1\3\x84\v\xc0\t\1\2\xa0\4\25\23V3\x96\1\25\xa0\6\21\23\31\21\v\x141\x80\b\xcb\1\16+\16\xed\0.-.-\xe0\b\21\v\21\v\x141\xc0\1\xea\0\6*\6\n\6\17\6\17\6\n\6*\6\xaa\2(\6/\6\n\'\6\'\17\6/\b*\xe6\1\n\b\x8a\1\6\a\6\x8a\1\t\xca\1\f\xaa\1\6\a\6\xaa\1\t\xca\1\fJ\6\xc0\t\1\2\xa0\4\25\23V3\xf6\0\32\25\x80\x061\22+\24\v\22\v1\xc0\a+\16+N\v.-\16\x8d\1\16\xed\0\xa0\b1+\24\v\22\v\x181\xe0\0\xea\0\xc6\3\xaa\1\b\n\xe8\0&\17\6\n\xc6\1\17\6\b\n\xa6\2*\6\bJ\6\xaa\5\6\xaa\4\6\xe0\t\1\2\xe0\3\xa7\1\x96\1Z\25\xe0\x051\24\v\x1b1+\22\21\x80\b\16+\xae\2\x8d\2\xa0\b1\24\33\22\30\v\33\24\30\21\23\xe0\0\xea\0\6\n&O\6O&\n\6\xaa\2(\xe6\0\n\'\6\'\17F\b\nF\xea\1\b\6\b\n&\b\n&J&\n\b&\b\n&\b\n\6J\6\n\b&\b\n \b\n\x80\f\1\2\x80\4\x87\1\xb6\1:\25\x80\6\v\22\21\30\v\x1b1\v\x80\b\16\0\16K.-.\xed\1\16M\x80\b\23\22\24NT\21\23\x80\1\xe8\0\6\n\17\6O\6O\6\17\n\6\xe8\2\x8a\1\'\6\'\17J\b\x8a\1\xa6\1J\b\n\6\b\n\x86\2\n\b\6\b\n\17\b\n/\6\17F\n\b\6\b\n\0\b\n\xa0\f\1\2\xa0\4\25\xf6\1Z\25\xe0\5\22\30\24<\30\22\v\24\20\22\xe0\a\16+\16\v\16\v.\r\16\xad\1\16M\16\r\16\r\16\xc0\a\21\v8\v\338\24\22\23\x80\1\xea\0&\17\6O\6O\6\17&\x8a\2H\6/\6\n\'\6\'\17\6/\b\nF\n\6\2\1\t\1\2\6\n(\n\b*\a\17\'\17\'\17\a\17\n(\n\b\n\17\'\17\a\17F\n(\n\b\n\xc0\f\1\2\xc0\4\25V:\26Z\25\xe0\5Q\16\33\v\21\25\v\33\30\22\21\xa0\a\x8b\1\xee\0\xed\1\16\x8d\1\16\r\16\r\xc0\a\22\30\v\34\30\22\v4\22\30\x80\1\xea\0\6/\6O\6O\6/\6\xaa\2(&\17\6\n\'\6\'\17\6\17\6\b*&\n\6\1I\1\6*\b*\6\n\a\17\'\17\'\17\a\17\6\n\b*\a\17\'\17\a\17\6/\6\n\b*\xe0\f\1\2\xe0\4\25\xda\1\25\x80\x0612\16\17\22\33\22\16\22\30\21\x80\a\v\16\xab\1.\xed\1\16\x8d\2\xa0\aQ\33\v1\v\33\218\21\xe0\0J\b\xc6\3(\xea\1(\3F\n\x86\2\b\nF\n\6\2\t\6\t\2\6\n\6\b\n\17\6\n\a\17\'\17\'\17\a\17&\b\n\'\17\'\17\a\17\6\17F\b\n\x80\r\1\2\xe0\4\xf9\1\xa0\6\21\22\x142\17\24\v\30\22\24\22\21\xe0\6\xab\1\16\v.M\16\r.\xad\1\16\xcd\1\x80\a\21\x141\24\v1\22\30\21\x80\1\xe8\0\6\n\17\6O\6O\6\17\n\6\xc8\2\3\4\xea\0\'\6\'\17J\b\x8a\1\6\1F\1\6*\b\xea\0\x8f\2\6*\b\n\xcf\1\6\x8a\1\b\n\x80\r\1\2\xc0\4\25\26\xb9\1:\25\xe0\5\30K\24+;K\21\xe0\6K\16\v\xee\0M\16-\16\xed\1\16\xad\1\xe0\6\21+\24+;K\24\21\xe0\0\xea\0\6\n\17\6O\6O\6\17\n\6\xaa\2\2#/\6\n\'\6\'\17\6/\b\nF\n\6\2\1\2\1\2\6\n\6\b\n&\n\a\17\'\17\'\17\a\17&\b\n\'\17\'\17\a\17\x86\1\b\n\xc2\1\xa0\v\1\2\xa0\4\x156\xfa\0\31:6\25\xa0\5\21\v\24+\33\22\33\21\24\33\22\30\22\21\xa0\6\v\16+\xee\0-\16\xed\0\16\x8d\2.\xad\1\xa0\6\21\v\24+\22\33\21\24\33\228\22\21@\xea\0\xc6\3\xaa\2\2\1#\17&/\6/&\17\6\b\nF\n\6\nF\n\6\n\6\b\n\17\6\n\a\17\'\17\'\17\a\17&\b\n\'\17\'\17\a\17\6/&\b\n\0"\xe0\0\2\x80\v\1\2\x80\4\25V\x136\32\31V:\25\xe0\x041\30\v\22\30\22K\22\35\x1b41\xc0\6\v\xae\1\x8d\6\xc0\5\x131\30\v\30\22K\22\v\x1b4\x121 \xea\5\x88\1!\4\5\xe6\2\b\n&*\6\nF\n\6\n\6\b\n\17\6\n\a\17\'\17\'\17\a\17&\b\n\'\17\'\17\a\17\6\17F\b\n\0"\x80\1\2\xe0\n\1\2\x80\4\x156\23V\4\32\x196:\25\x80\5\x1214\22\21\30\22\21\30\x141\22\xc0\6\x8e\1-\16M\16\r3-\23\xad\2\0M\x80\6\23\x121\v\24\21\30\22\21\30\24\30\21\30\22@\xe8\6\2\3\2\3\4\xea\2\b\x8a\1\6\nF\2\17*\b\xea\0\17\6/\6/\6\17\6*\b\n/\6/\6\17\6\x8a\1\b\n\0"\xe0\0B\xc0\n\1\2\xe0\3\x156\23\xf6\0\4\32\x196Z\25\xc0\4\21\v2\x181\x181\x181\22\v4\xe0\5\x8e\1\xcd\1N3\bS- -\0- \r\x80\6\23\21\v21\x181\x181\30\24\v4 \x88\1\x8a\5\b\2!\2\1\4\5\n\x86\2\n\b\nF\n\6\nF"\n\6\b\n\xc6\3\b\n\xe6\2\n\b\n\xe2\3\x80\t\1\2\xe0\3\x156\23\xb6\1\32\31\xfa\0\25\xc0\4\v\22\27\21\22T\21\22\24\22\21\22\t\24\33\21\xa0\6.\xe0\0-@\23&(\23\x80\2-\xc0\6\22\v\22\v\21T\21\22\24\22\x1124\33\21\0\b\n\b\xaa\4\xa8\1\xe2\0\1\3\4\xc6\1\n\6*\b\nF\n\6\nF\n\6\n\6\b\n\xc6\3\b\n\x86\3\b\n\x82\4\xa0\3\2@\2@\2\x80\3\1\2\xe0\3\x156\23\xf6\1\xfa\0\25\x80\4\21\24+\24+[+\x104\21\24\30\22\v\24\30\21\xc0\5\r\xc0\2\6(3\xa0\2\r\x80\6\21\22\24+\24+;K4\x182\30\22\v\24\x88\2\x8a\3\b\n(\2!B!\3\xa6\2\b\nF\n\6\nF\n\6\n\6\b\n\xc6\3\b\n\x86\3\b\n\x82\4\xa0\3\x82\2\x80\3\1\2\xe0\3\x156\23\xf6\0\x046\x9a\1\25\xa0\4\24+\24\33\x184\22\24+;\22\33\21\24\33\22\21\xc0\b\b\6\bS\x80\t\22\24+\24\33\21\v\22\24+;\22\16\33\21\24\33\22\xa8\6!"\1\3\4\5\4\xaa\2\b\x8a\1\6\nF\n\6*\b\xea\3\b\xaa\3\b\n\xe2\3\xc0\3\2@\2@\2\x80\3\1\2\xe0\3\25\xd6\1\x046\x9a\1\25\x80\4\21\30+4\21\30\22\30\22K\x1c4\33\22\v\31\30\22\xa0\bHS\xe0\b\21\30\22+4\21\22\30\22K\34T\33\22\v\34CA\xc8\4\x82\1!#\5\xa6\2\b\n&*\6\nF\n\6\n\6\b\n\xc6\3\b\n\x86\3\b\n\x82\4\xa0\3\2@\2@\2\x80\3\1\2\x80\4\25\xf6\1\x9a\1\25\xe0\3\21\v\34\24+;\24\22\r\36\22\24\v\x1c4\22\30T2\30\21\xe0\a\6\b3\b\23\xa0\b\21\24\30\22\24+\33\2482\24\v\x1c42\16\22\33\24\x84\2#!\xe8\2A\x82\1\1#\n\xe6\1\b\nF\n\6\nF\n\6\n\6\b\n\xc6\3\b\n\xa6\2\n\6\n\b\n\xe0\1\x82\1\xa0\4\x82\2\x80\3\1\2\x80\4\25\xf6\1\x9a\1\25\x80\4\21\30\22K\34\2282\xf4\0\22\x112\x112\30\21\x80\b\b\x93\1\xa0\b\21\x142\24+;\22\x112\24\v\x1c4\228RC$#\4\xe3\0\x84\1\1\xa8\1\2\1"!\2!\3\1\4\xc6\1*\b\nF\n\6\x8a\1\6*\bJ\6\n\xc6\2\b\n\x86\3\b\n\x80\2B\xc0\4\2@\2@\2\x80\3\1\2\xa0\4\25\x96\1\xba\1\25\xc0\4\21\24\27\x1141XR\25\21T\22Q\xa0\bS\bS\xa0\b\21\x182K\348RT\2282\21\22\5\xe3\2\x84\1\1\6\xe8\0B\1\3\1\2\1\3\4%\x8a\2\b\x8a\1\xc6\1*\b\xea\3\b\xaa\3\b\n\xe3\3\xe0\2C\1C\1C\1\x80\3\1\2\xc0\4\25\x9a\2\25\xe0\4\23\30\r\x182\xf1\0\xf8\0\23\x98\1\x113\x80\b\b\xf3\1\xa0\b\21R\x114\21X\xf2\08\xf4\0\21\4\5\3\xc4\1\x83\1\xe4\0\1\6(\2\1\xa2\1\1\3$%\xea\1\b\x8a\1\xc6\1*\b\x8a\3\4*\b\xaa\3\b\n$\3\4\x83\b\xa1\4\xe0\x045\x9a\x015\xa0\x051X\xf1\0\xf8\0\218Q\xe0\b\xb3\2\xa0\bQ8\22Q\xf8\0\21XQ\0\5\xc4\2\xe3\0D#\1\2A\2!\xe2\0\1\3$\5\xaf\5\b\n\xef\2\3/*\x8f\3*\xef\2\x83\2\x81\3\x83\3\4\3\xc4\2\xe3\2\x84\1\x95\1\4\3\4\x83\3\xa1\2Q\23C\xf1\0\x031\x83\t(3\xe3\x003\xe3\3\x81\3\xa3\2Q\4\3\4\xf1\0\4Q$#%D\xe3\0D\3\1C\xe4\0\3\2!\2!\3\2\1#\2\1\3\4\3\xa6\5\b\n\xc6\2\3\1\4\6*\x86\3*\xe6\2\x84\1\3\4C\1\3\xe1\3\xc3\2\4\3\xa4\6\3\4\xc3\2\xe1\3\3\1C\4\3\xa4\20\3\4C\1\3\xe1\3\xc3\2\4\3\x84\2%\3$\3\1\x83\1\4\3\1C\4\3!\xe2\0\1\3\1\2\1C"#\1&\xe8\4\n\b\n\b\n\b\n\b\n\b\n\b!\3\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\xe4\0\3\4\x83\2\1\3\xc1\4\xe3\2\4\3\xe4\1\3\4\xe3\2\xc1\4\3\1\x83\2\4\3\xe4\0\xe5\r\xe4\0\3\4\x83\2\1\3\xc1\4\xe3\2\4#\5\xe3\0A\x83\1!\3\xa1\1\xe2\0\1B!\2#\1\4\5\3\1\6\xe8\6\n\b\3\1\4\3\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\bE\xe4\1\xc3\1\1\3\xc1\5\xa3\5\xc1\5\3\1\xc3\1\xe4\1\xa5\17\xe4\1\xc3\1\1\3\xc1\5\xe3\1$\5\xc1\2\2!\2\1\xe2\0!"\1#"\1\3\4\3\4E\4\xe3\4\1\2\b\n\b\n\b\n\b\nA\3\4\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\xc5\1\x84\2\xc3\1\1\3\x81\6\xe3\1\x81\6\3\1\xc3\1\x84\2\xa5\21\x84\2\xc3\1\1\3\xa1\6\3\4%!\2\1\2!\2\1\xe2\0A"\xe1\0\2A\3\2!C\4E\4\3"\x88\1\2!C$\xe5\0\4\3\2\x88\1\3\1\2!\3\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b\n\b#\xa5\4\x84\2\xc3\2\1\3\1\3\xe1\t\3\1\3\1\xc3\2\x84\2\xe5\22\x84\2\xc3\2\1\3\1\3\xe1\3\2\1\3\5\4%\xe2\1\x81\1"\xe1\0\xe2\0A\2\1#\1\3\4%\4\3\xa8\4\6\3\xe4\0C\1"\1\3\4\3\xa4\1\xa3\1\x85\6\4\5\x84\2\3\4\x83\3\xa1\t\x83\3\4\3\x84\2\5\4\xa5\22\4\5\x84\2\3\4\x83\3\xc1\3\2\1#\4\5\4\5\xe1\1C"\1\2\1B!#\xe2\0\1\2!ED\2\xe8\3\6$\xe5\0\4A\2!\3\4\xe5\a\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\xe3\0\xa1\v\xe3\0\4\3\4\3\xc4\1\5\4\5\4\5\4\5\4\5\4\5\4\xe5\17\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\xe3\0\xe1\4\3\4\5\xe4\0\xc3\1D\3\xe1\0"!\2!\3\1\2A\3!\4\5\4\5\4\xe3\0$\xa5\3\4\xe5\0\3\1"\1\2\1#\xc5\b\4\5\xc4\2\3\4\3\4\xe3\0\xc1\2\xa3\2\1\3\xa1\1\3\1\xa3\2\xc1\2\xe3\0\4\3\4\3\xc4\2\5\4\xa5\21\4\5\xc4\2\3\4\3\4\xe3\0\xc1\2\xa3\2\1#$%\4\3\x84\2\3\1\2\xe1\0\2A\2A\2\1#\4\3\1$%\xe3\0\xc4\2\xa5\1$E\3\1\2!\2\1\4\3\4\x85\6\4\5\4\5\4\5\4\5\4\5\4\5\4\5D\3\4\3\4\3\4\xe3\0\xa1\1\xa3\v\xa1\1\xe3\0\4\3\4\3\4\3D\5\4\5\4\5\4\5\4\5\4\5\4\5\4\xe5\f\4\5\4\5\4\5\4\5\4\5\4\5\4\5D\3\4\3\4\3\4\xe3\0\xa1\1\xc3\4\5\4\3$E\3\xa4\1\3\xe1\0"!\2\xa1\1\3A#\4\3\4\5\4\5\4#\1\2\xe8\0\2\x83\1\xa4\1#$\3\1\2\1\2\1\2A\3\xe5\3\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\xe3\0\xa1\1\3\1\xc3\1\4\3\4\3\xe4\2\xa3\1\xe4\2\3\4\3\4\xc3\1\1\3\xa1\1\xe3\0\4\3\xc4\1\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\xa5\b\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\xe3\0\xa1\1\3\1\xc3\1\4\3\4\3\xe4\2\5\3!\4\5\4%D\3\xe1\2"\1\2\3\1#!#DE\4\1\x88\4\2\1C!\2!\2!\3\4\3\xc5\2\4\5\4\5\4\5\4\5\x84\4\3\4\3\4C\x81\1\3\1\xc3\1\4\3\xe4\n\3\4\xc3\1\1\3\x81\1C\4\3\4\3\x84\4\5\4\5\4\5\4\5\4\xc5\2$\xc5\2\4\5\4\5\4\5\4\5\x84\4\3\4\3\4C\x81\1\3\1\xc3\1\4\3\x84\5\1\2\1$\5$\3\x81\4\3\1\xa3\1D\5\4\xe5\0\1\xe8\3&$\1\3"!"!#\4\x85\3\4\5\x84\2\3\4\3\4\3\4\3\4\xc3\4\4\3\xa4\1\5\4\xa5\t\4\5\xa4\1\3\4\xc3\4\4\3\4\3\4\3\4\3\x84\2\5\4\x85\3\4#\4\x85\3\4\5\x84\2\3\4\3\4\3\4\3\4\xc3\4\4\3\xa4\1\5\4\xc5\3\xe3\0\1\2!#\xe1\4\xe3\0\4\3\x84\1\5\4\xe5\0$\x83\1$\xc5\2\3A"!\2A\4\xe5\0\4\5\4\5\4\5\4\5\x84\1\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3$\xe5\16$\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\x84\1\5\4\5\4\5\4\5\4\xe5\0\4#\4\xe5\0\4\5\4\5\4\5\4\5\x84\1\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3$\xa5\6\1\3\1#\1\3\xe1\4\3\1\xe3\0\x84\1\3D\5\4\x85\1\xc4\3%$\1\3\xe1\1#$\x85\1\4\5\4\5\4\5\xc4\3\5\4\xe5\30\4\5\xc4\3\5\4\5\4\5\4\x85\1$\xe3\0$\x85\1\4\5\4\5\4\5\xc4\3\5\4\xa5\v\2!\3$%\4\x81\4\3\1\3\1#\4\3D\3\4\3D\5\4\5\4\5\4\5D\xe3\2$#\xc1\1\3\1#D\5\4\5\4\5\x84\3\5\4\xa5\34\4\5\x84\3\5\4\5\4\5D\xe3\0D\5\4\5\4\5\x84\3\5\4\x85\r\2\1\2\1\3\4\xe5\0\4\xe1\3\xa3\1\x84\1\3\4#\xe4\0\5\4\5\xc4\1\1"\x88\1&\4\3\1\3A\3\1\3\1\x83\1$\3\4\3\4\3\4\3\4\3D\5\4\x85\a\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\5\4\5\4\5\4\5$\5\4\5\4\5\4\5\xc4\1\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\x85\a\4\5D\3\4\3\4\3\4\3\4\3$\xe3\1$\3\4\3\4\3\4\3\4\3D\5\4\x85\a\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\5\4\5\4B\1\3\1\4\5\4E\4\x81\2\3\1\3\1\3\1#\4\3\4\3$\5\xe4\0\xe3\0\xe4\2\3AH\6\1\4#\1\3\1\3\1\xe3\3D\5\4\x85\t\4\5\4\5\xc4\4C\xe4\0C\xc4\4\5\4\5\4\x85\t\4\5D\xe3\5D\5\4\x85\t\4\5\4\5\xc4\4\3B\1\2\1\3\4\5\4E\4\xc1\2\xe3\0\xa4\1E\4\5$\3\4\xe3\2A"\3\xc4\1\xa3\4\4\3D\5\4\5\4\5\4\5\4\5\4\5\4\xc5\3\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\3\4\3\4\3\4\3\4\3DA\xa4\1AD\3\4\3\4\3\4\3\4\3\4\3\4\3\xc4\1\5\4\5\4\5\4\5\4\5\4\5\4\xc5\3\4\5\4\5\4\5\4\5\4\5\4\5D\3\4\xa3\4\4\3D\5\4\5\4\5\4\5\4\5\4\5\4\xc5\3\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\3\4\3\4\3\4\3\4\3D!\2#\2\1\2\3\1$\5\4%\4\1\3\1\3\1\3\1\3\1\3\1\3\1#\xa4\1\xc5\1$\3\4\3\4C\xe1\2\3\xa4\1\x83\3\4\3\4\3\xc4\2\5\4\x85\5\4\5\4\5\4\5\x84\1\3\4\3\4\3\4\x83\4\4\1\xe3\0\1\4\x83\4\4\3\4\3\4\3\x84\1\5\4\5\4\5\4\x85\5\4\5\xc4\2\3\4\3\4\xe3\2\4\3\4\3\xc4\2\5\4\x85\5\4\5\4\5\4\5\x84\1\3\4\3\4\3\4\x83\4\2\1\3\4\3\1\2\1\3\1\4\5$\5\xe1\0\3\1\3\1\xa3\1\4\3\xe4\0\5\4\5\4\x85\1\xe4\1C!BA\xe3\3!\3\1\xe3\0\4\3\4\3\xc4\2\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\3\4\xa3\5\xe1\0\xa3\5\4\3\4\3\4\3\xc4\1\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\2\3\4\3\4\xe3\0\1\3\xa1\1\3\1\xe3\0\4\3\4\3\xc4\2\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\3\4\xe3\4"\3\4\5\4\3A\3\1\4\1\5\1\3\1\3\1\3\1\3\1\3\1#\4\3\4\3\xa4\1\5\4\5\4E\4\5\x84\2\3\1\2!"\x81\1\3\1\3\1\3\xc1\1\xe3\0\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\x84\6\3\4\3\4\3\4\xc3\2\4\5\4\xa5\2\3!\5#\5!\3\xa5\2\4\5\4\xc3\2\4\3\4\3\4\3\x84\6\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\xe3\0\xe1\0\xe3\0\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\x84\6\3\4\3\4\3\4\xc3\2\4\5\4\xa5\2\3"\1\3\4\5\4\1#\5\4\3\1\xc3\4\4\3\xe4\0\5\4\5\4\5\4\5\x84\1\xe3\0\1\3\xe1\0B\x81\3\xe3\5\4\3\4\3\x84\3\3\4\3\4\3\4\x83\1\4\3\4\3D\5\4\5\4\xa5\3C\5\3%\3\5C\xa5\3\4\5\4\5D\3\4\3\4\x83\1\4\3\4\3\4\3\x84\3\3\4\3\4\xa3\v\4\3\4\3\x84\3\3\4\3\4\3\4\x83\1\4\3\4\3D\5\4\5\4\xa5\3#B\3\4\3\4!\3\4E\3\1C\1\3\1\3\1\xe3\1\4\3\4\3\4\3\xe4\0\5\4\5\xe4\0\3\1\3\1\3\xe1\0B\x81\3\xa3\a\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\x83\1\4\3\4\3D\5\4\5\4\xc5\5\3%\3\xc5\5\4\5\4\5D\3\4\3\4\x83\1\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\xe3\f\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\x83\1\4\3\4\3D\5\4\5\4\x85\5B\1\2\3\4\3\1\3\4\xe5\0\4\1\x83\3\xa4\4\3\xc1\1\xe2\0\1B\xe1\1\xc3\1\4\3\4\3\4\5\4\x85\3\4\3\4\3\4\3\4\xc3\3\4\3\x84\1\5\4\xa5\5\3\xe5\0#!#\xe5\0\3\xa5\5\4\5\x84\1\3\4\xc3\3\4\3\4\3\4\3\4\x85\3\4\5\4\3\4\3\4\3$\3\4\3\4\5\4\x85\3\4\3\4\3\4\3\4\xc3\3\4\3\x84\1\5\4\xa5\5\3E\x82\1\3\1\3\2!\4\5\4E$\xc3\1\4\3\xa4\5\3\xa1\1"\1\xe2\0\1\2\xe1\0\xa3\1\4\3D\5\4\xc5\4\4\5\4\5D\3\4\xc3\1\4\3\x84\1\5\4\5\4\5\4\5\4\xa5\3\3\1\3\5#%\3\1%!%\1\3%#\5\3\1\3\xa5\3\4\5\4\5\4\5\4\5\x84\1\3\4\xc3\1\4\3D\5\4\5\4\xc5\4\4\5D\3$\5\4\xc5\4\4\5\4\5D\3\4\xc3\1\4\3\x84\1\5\4\5\4\5\4\5\4\xa5\3\3\1\3\5#%\3\xa2\1\1\3\1"\3$\xe5\0$\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\xc4\2\x81\4\3\1\xe3\0\4\3D\5\4\5\4\xc5\4\4\5\4\5\4\5\4\xc3\1\4\3\4\5\4\5\4\5\4\xa5\3#\xe5\0\3\1\3\5#%\3\1\3\5\3!\3\5\3\1\3%#\5\3\1\3\xe5\0#\xa5\3\4\5\4\5\4\5\4\3\4\xc3\1\4\5\4\5\4\5\4\xc5\4\4\5\4\5\4\3$\5\4\5\4\xc5\4\4\5\4\5\4\5\4\xc3\1\4\3\4\5\4\5\4\5\4\xa5\3#\xe5\0\3\1\3\5#%\3\1B\1B!"\1#\5\4E\xe4\0\x83\3\4\3\4\3\4\3\4\3\4\3\4\xa3\1!"\1B\1BA\3\1\xa3\1\4\3\x84\1\x85\5\4\5\x84\1\3\4C\4\3\xc4\1\5\4\xe5\2#\1\3\xa5\1\3!\x85\1\3\xe1\0\3\x85\1!\3\xa5\1\3\1#\xe5\2\4\5\xc4\1\3\4C\4\3\x84\1\5\4\x85\5\x84\1\3\xe4\0\x85\5\4\5\x84\1\3\4C\4\3\xc4\1\5\4\xe5\2#\1\3\xa5\1\3!\xe5\0BAB#!\3$E\4\3\4\3\4\x83\6\x81\1\xe2\0\xe1\0"A\3\1\3\1\xa3\1\x84\1\5\4\5\4\x85\3\4\5\4\5\4\5\4\5\4\5D\x83\1\4\3D\5\4\5\4\5\4\5\4\5\4\5\4\x85\2\3\5\3%\3\1\3\5\1\3E\xa1\1E\3\1\5\3\1\3%\3\5\3\x85\2\4\5\4\5\4\5\4\5\4\5\4\5D\3\4\x83\1D\5\4\5\4\5\4\5\4\5\4\x85\3\4\5\4\5D\3\xe4\0\5\4\5\4\x85\3\4\5\4\5\4\5\4\5\4\5D\x83\1\4\3D\5\4\5\4\5\4\5\4\5\4\5\4\x85\2\3\5\3%\3\1\3\5\1\3%BA\3\1\2\1#!\3\4\5\4\5\3\4\3\4\xa3\3\1\3\1\3\xa1\3"!"\x81\2\3\1\xa3\1\4\3\x84\1\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\x83\1\xc4\3\5\4\5\4\5\4\5\4\5\3\1\3\1\3\x85\1\3\1\3\5\1\3\xe1\0\3\1\5\3\1\3\x85\1\3\1\3\1\3\5\4\5\4\5\4\5\4\5\xc4\3\x83\1\4\3\4\3\xc4\1\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\x84\1\3\4#\x84\1\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\4\5\xc4\1\3\4\3\4\x83\1\xc4\3\5\4\5\4\5\4\5\4\5\3\1\3\1\3\x85\1\3\1\3\5B\1\2\1C!\3\4!\3$\5\4\1\xa3\1\1\3!\3\1\3\1\3\1\3\xc1\3\2\xe1\0\xa2\1\1"\xe1\0\3\1\3\1\xe3\0\x84\a\3\4\x83\2\4\3\4\3\4\3\xc4\3\5\3\1\3\5\3\5\4\5\4\5\3\1E\3\xa1\1\3E\1\3\5\4\5\4\5\3\5\3\1\3\5\xc4\3\3\4\3\4\3\4\x83\2\4\3\x84\a\3\xa4\a\3\4\x83\2\4\3\4\3\4\3\xc4\3\5\3\1\3\5\3\5\4\5\4\5\3\1E\x82\1!\3$\1\3\4\1\3!D\1\xe3\0\x84\2C\1#\xc1\3B!B\xc1\2\xa3\2\4\3\4\3\4\3\4\3\4\3\4\3\x84\2\3\4\3\4\3\4\x83\3\4\3\4\3\4\3\xc4\3\3\4\5\4C\1\5\4\1\3\xa1\1\3\1\4\5\1C\4\5\4\3\xc4\3\3\4\3\4\3\4\x83\3\4\3\4\3\4\3\x84\2\3\4\3\4\3\4\3\4\3\4\3\4\xe3\2\4\3\4\3\4\3\4\3\4\3\4\3\x84\2\3\4\3\4\3\4\x83\3\4\3\4\3\4\3\xc4\3\3\4\5\4C\1\5\4\1\x82\1\1\2\3$\3\1\3$\1#$\3\xc4\4C\xe1\1"\1\x82\1\xa1\1"\x81\2\x83\4\4\3\4\3\4\3\4\3\4\3\4\xc3\6\4\3\4\3\4\3\xa4\1A\3\4\3\1\4\3\4\1\3\xa1\2\3\1\4\3\4\1\3\4\3A\xa4\1\3\4\3\4\3\4\xc3\6\4\3\4\3\4\3\4\3\4\3\4\xa3\a\4\3\4\3\4\3\4\3\4\3\4\xc3\6\4\3\4\3\4\3\xa4\1A\3\4\3\1\4\3\4\1\3\1\xc2\1\1\3D#\xe4\0#\xc4\5CA\xe2\0!\x82\1!"\1B\xc1\2\xa3\17\4A#\4\3\1\4#\xa1\3#\4\1\3\4#A\4\xa3\37\4A#\4\3\1\4#A'
)

IMG_W, IMG_H = 320, 90
MSG = "\x4a\x6f\x79\x65\x75\x78\x20\x4e\x6f\x65\x6c\x20\x32\x30\x32\x32\x20\x2f\x20\x54\x49\x2d\x50\x6c\x61\x6e\x65\x74"

from kandinsky import set_pixel, get_pixel, fill_rect, draw_string
from ion import keydown

def esc_key():
  return keydown(5)

SCR_W, SCR_H = 320, 222
FONT_W, FONT_H = 11, 18

from random import randint
from math import cos

COLOR_BACK = (0, 12, 24)

fill_rect(0, 0, SCR_W, SCR_H, COLOR_BACK)
COLOR_BACK_GET = get_pixel(0, 0)
IMG_Y = SCR_H - IMG_H
draw_image(image, 0, IMG_Y, IMG_W, palette, zoomx=1, zoomy=1, itransp=0)
draw_string(MSG, (SCR_W - len(MSG)*FONT_W) // 2, (IMG_Y - FONT_H) // 2, (0, 11, 24), COLOR_BACK)

liste_flocons = []

while(not esc_key()):
  for flocon in liste_flocons:
    x, y, seed, x_i = flocon[:4]
    oldx, oldy, oldx_i = x, y, x_i
    if y < SCR_H - 1:
      newy = y + 1
      x += cos(seed / 20) / 2
      tries = [x, oldx]
      for v in (x + 1, x - 1, oldx + 1, oldx - 1):
        v_i = round(v)
        if v_i >= 0 and v_i < SCR_W: tries.append(v)
      for x in tries:
        x_i = round(x)
        if x_i < 0 or x_i >= SCR_W or get_pixel(x_i, newy) == COLOR_BACK_GET:
          y = newy
          break
    if y == oldy:
      liste_flocons.remove(flocon)
    else:
      if oldx_i >=0 and oldx_i < SCR_W: set_pixel(oldx_i, oldy, COLOR_BACK)
      if x_i >=0 and x_i < SCR_W: set_pixel(x_i, y, (255, 255, 255)) 
      flocon[:4] = x, y, seed + 1, x_i
  if randint(0,1):
    x = randint(0, SCR_W - 1)
    liste_flocons.append([x, 0, randint(0, SCR_W), x])