#!/usr/bin/ruby
# Copyright 2008 Richard Braakman <eligo@clueonic.net>
# See the COPYING file for details.
FRAGMENTS = {:arrays=>{"code"=>"template<typename T>\nclass Array {\n\n  private:\n\n    int size1, size2, size3;\n    T *elems;\n\n  public:\n\n    Array() : size1(0), size2(0), size3(0), elems(0) {}\n    ~Array() { deallocate_(); }\n\n    void dim(int sz1, int sz2 = 1, int sz3 = 1) {\n        deallocate_();\n        elems = new T [sz1 * sz2 * sz3] ();\n        size1 = sz1;\n        size2 = sz2;\n        size3 = sz3;\n    }\n\n    T & operator() (int i1) {\n        return elems[i1];\n    }\n\n    T & operator() (int i1, int i2) {\n        return elems[i1 * size2 + i2];\n    }\n\n    T & operator() (int i1, int i2, int i3) {\n        return elems[(i1 * size2 + i2) * size3 + i3];\n    }\n\n  private:\n\n    void deallocate_() {\n      delete[] elems;\n      elems = 0;\n    }\n};\n", "includes"=>[]}, :dirhandles=>{"code"=>"struct dirinfo {\n    DIR *dir;\n    char *pattern;\n    char *name;\n    struct dirent curdent;\n};\nstatic struct dirinfo dh[1024];\nstatic int32_t unused_dh() {\n    int i;\n    for (i = 1; i < 1024; i++) {\n      if (!dh[i].dir)\n        return i;\n    }\n    return 0;\n}\n", "includes"=>["sys/types.h", "dirent.h"]}, :basicfont=>{"code"=>"/* Vera.ttf Release 1.10, included with permission:\n\nCopyright (c) 2003 by Bitstream, Inc.\nAll Rights Reserved.\nBitstream Vera is a trademark of Bitstream, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the fonts accompanying this license (\"Fonts\") and associated\ndocumentation files (the \"Font Software\"), to reproduce and distribute\nthe Font Software, including without limitation the rights to use, copy,\nmerge, publish, distribute, and/or sell copies of the Font Software,\nand to permit persons to whom the Font Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright and trademark notices and this permission notice shall\nbe included in all copies of one or more of the Font Software typefaces.\n\nThe Font Software may be modified, altered, or added to, and in particular\nthe designs of glyphs or characters in the Fonts may be modified and\nadditional glyphs or characters may be added to the Fonts, only if the\nfonts are renamed to names not containing either the words \"Bitstream\"\nor the word \"Vera\".\n\nThis License becomes null and void to the extent applicable to Fonts\nor Font Software that has been modified and is distributed under the\n\"Bitstream Vera\" names.\n\nThe Font Software may be sold as part of a larger software package but no\ncopy of one or more of the Font Software typefaces may be sold by itself.\n\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL\nBITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,\nOR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT\nSOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.\n\nExcept as contained in this notice, the names of Gnome, the Gnome\nFoundation, and Bitstream Inc., shall not be used in advertising or\notherwise to promote the sale, use or other dealings in this Font\nSoftware without prior written authorization from the Gnome Foundation\nor Bitstream Inc., respectively. For further information, contact:\nfonts at gnome dot org.http://www.bitstream.com\n\n*/\n\nstatic const char fontbits[] = {\n0,1,0,0,0,17,1,0,0,4,0,16,79,83,47,50,\n180,95,244,99,0,0,235,112,0,0,0,86,80,67,76,84,\n209,138,94,151,0,0,235,200,0,0,0,54,99,109,97,112,\n164,195,232,160,0,0,177,108,0,0,3,88,99,118,116,32,\n255,211,29,57,0,0,30,252,0,0,1,252,102,112,103,109,\n231,180,241,196,0,0,38,96,0,0,0,139,103,97,115,112,\n0,7,0,7,0,1,1,72,0,0,0,12,103,108,121,102,\n12,116,65,207,0,0,38,236,0,0,138,126,104,100,109,120,\n52,240,33,14,0,0,236,0,0,0,21,72,104,101,97,100,\n221,132,162,208,0,1,1,84,0,0,0,54,104,104,101,97,\n16,69,8,111,0,0,235,76,0,0,0,36,104,109,116,120,\n9,198,142,178,0,0,180,196,0,0,4,48,107,101,114,110,\n220,82,213,153,0,0,189,160,0,0,45,138,108,111,99,97,\n243,203,210,61,0,0,187,132,0,0,2,26,109,97,120,112,\n5,71,6,58,0,0,235,44,0,0,0,32,110,97,109,101,\n217,188,200,181,0,0,1,28,0,0,29,223,112,111,115,116,\n180,90,47,187,0,0,184,244,0,0,2,142,112,114,101,112,\n59,7,241,0,0,0,32,248,0,0,5,104,0,0,0,22,\n1,14,0,1,0,0,0,0,0,0,0,58,0,0,0,1,\n0,0,0,0,0,1,0,19,0,58,0,1,0,0,0,0,\n0,2,0,5,0,95,0,1,0,0,0,0,0,3,0,19,\n0,58,0,1,0,0,0,0,0,4,0,19,0,58,0,1,\n0,0,0,0,0,5,0,12,0,100,0,1,0,0,0,0,\n0,6,0,23,0,77,0,1,0,0,0,0,0,7,0,48,\n0,173,0,1,0,0,0,0,0,8,0,14,8,108,0,1,\n0,0,0,0,0,11,0,24,9,131,0,1,0,0,0,0,\n0,13,9,19,0,112,0,3,0,1,4,9,0,0,0,116,\n9,155,0,3,0,1,4,9,0,1,0,38,10,15,0,3,\n0,1,4,9,0,2,0,10,10,89,0,3,0,1,4,9,\n0,3,0,38,10,15,0,3,0,1,4,9,0,4,0,38,\n10,15,0,3,0,1,4,9,0,5,0,24,10,99,0,3,\n0,1,4,9,0,6,0,46,10,53,0,3,0,1,4,9,\n0,7,0,96,10,245,0,3,0,1,4,9,0,8,0,28,\n26,115,0,3,0,1,4,9,0,11,0,48,28,161,0,3,\n0,1,4,9,0,13,18,38,10,123,67,111,112,121,114,105,\n103,104,116,32,40,99,41,32,50,48,48,51,32,98,121,32,\n66,105,116,115,116,114,101,97,109,44,32,73,110,99,46,32,\n65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,114,\n118,101,100,46,66,105,116,115,116,114,101,97,109,32,86,101,\n114,97,32,83,97,110,115,66,105,116,115,116,114,101,97,109,\n86,101,114,97,83,97,110,115,45,82,111,109,97,110,82,101,\n108,101,97,115,101,32,49,46,49,48,67,111,112,121,114,105,\n103,104,116,32,40,99,41,32,50,48,48,51,32,98,121,32,\n66,105,116,115,116,114,101,97,109,44,32,73,110,99,46,13,\n10,65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,\n114,118,101,100,46,13,10,66,105,116,115,116,114,101,97,109,\n32,86,101,114,97,32,105,115,32,97,32,116,114,97,100,101,\n109,97,114,107,32,111,102,32,66,105,116,115,116,114,101,97,\n109,44,32,73,110,99,46,13,10,13,10,80,101,114,109,105,\n115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,\n103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,\n32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,\n112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,\n32,97,32,99,111,112,121,32,111,102,32,116,104,101,32,102,\n111,110,116,115,32,97,99,99,111,109,112,97,110,121,105,110,\n103,32,116,104,105,115,32,108,105,99,101,110,115,101,32,40,\n34,70,111,110,116,115,34,41,32,97,110,100,32,97,115,115,\n111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,\n97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,\n32,34,70,111,110,116,32,83,111,102,116,119,97,114,101,34,\n41,44,32,116,111,32,114,101,112,114,111,100,117,99,101,32,\n97,110,100,32,100,105,115,116,114,105,98,117,116,101,32,116,\n104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,\n44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,\n111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,\n104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,\n44,32,99,111,112,121,44,32,109,101,114,103,101,44,32,112,\n117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,\n116,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,\n99,111,112,105,101,115,32,111,102,32,116,104,101,32,70,111,\n110,116,32,83,111,102,116,119,97,114,101,44,32,97,110,100,\n32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,\n110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,70,\n111,110,116,32,83,111,102,116,119,97,114,101,32,105,115,32,\n102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,\n115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,\n104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,\n100,105,116,105,111,110,115,58,13,10,13,10,84,104,101,32,\n97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,\n97,110,100,32,116,114,97,100,101,109,97,114,107,32,110,111,\n116,105,99,101,115,32,97,110,100,32,116,104,105,115,32,112,\n101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,\n32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,\n101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,\n32,111,102,32,111,110,101,32,111,114,32,109,111,114,101,32,\n111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,\n119,97,114,101,32,116,121,112,101,102,97,99,101,115,46,13,\n10,13,10,84,104,101,32,70,111,110,116,32,83,111,102,116,\n119,97,114,101,32,109,97,121,32,98,101,32,109,111,100,105,\n102,105,101,100,44,32,97,108,116,101,114,101,100,44,32,111,\n114,32,97,100,100,101,100,32,116,111,44,32,97,110,100,32,\n105,110,32,112,97,114,116,105,99,117,108,97,114,32,116,104,\n101,32,100,101,115,105,103,110,115,32,111,102,32,103,108,121,\n112,104,115,32,111,114,32,99,104,97,114,97,99,116,101,114,\n115,32,105,110,32,116,104,101,32,70,111,110,116,115,32,109,\n97,121,32,98,101,32,109,111,100,105,102,105,101,100,32,97,\n110,100,32,97,100,100,105,116,105,111,110,97,108,32,103,108,\n121,112,104,115,32,111,114,32,99,104,97,114,97,99,116,101,\n114,115,32,109,97,121,32,98,101,32,97,100,100,101,100,32,\n116,111,32,116,104,101,32,70,111,110,116,115,44,32,111,110,\n108,121,32,105,102,32,116,104,101,32,102,111,110,116,115,32,\n97,114,101,32,114,101,110,97,109,101,100,32,116,111,32,110,\n97,109,101,115,32,110,111,116,32,99,111,110,116,97,105,110,\n105,110,103,32,101,105,116,104,101,114,32,116,104,101,32,119,\n111,114,100,115,32,34,66,105,116,115,116,114,101,97,109,34,\n32,111,114,32,116,104,101,32,119,111,114,100,32,34,86,101,\n114,97,34,46,13,10,13,10,84,104,105,115,32,76,105,99,\n101,110,115,101,32,98,101,99,111,109,101,115,32,110,117,108,\n108,32,97,110,100,32,118,111,105,100,32,116,111,32,116,104,\n101,32,101,120,116,101,110,116,32,97,112,112,108,105,99,97,\n98,108,101,32,116,111,32,70,111,110,116,115,32,111,114,32,\n70,111,110,116,32,83,111,102,116,119,97,114,101,32,116,104,\n97,116,32,104,97,115,32,98,101,101,110,32,109,111,100,105,\n102,105,101,100,32,97,110,100,32,105,115,32,100,105,115,116,\n114,105,98,117,116,101,100,32,117,110,100,101,114,32,116,104,\n101,32,34,66,105,116,115,116,114,101,97,109,32,86,101,114,\n97,34,32,110,97,109,101,115,46,13,10,13,10,84,104,101,\n32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,109,\n97,121,32,98,101,32,115,111,108,100,32,97,115,32,112,97,\n114,116,32,111,102,32,97,32,108,97,114,103,101,114,32,115,\n111,102,116,119,97,114,101,32,112,97,99,107,97,103,101,32,\n98,117,116,32,110,111,32,99,111,112,121,32,111,102,32,111,\n110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,\n101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,\n116,121,112,101,102,97,99,101,115,32,109,97,121,32,98,101,\n32,115,111,108,100,32,98,121,32,105,116,115,101,108,102,46,\n13,10,13,10,84,72,69,32,70,79,78,84,32,83,79,70,\n84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,\n68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,\n85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,\n78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,\n32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,\n76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,\n73,77,73,84,69,68,32,84,79,32,65,78,89,32,87,65,\n82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,\n72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,\n78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,\n67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,\n68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,\n84,32,79,70,32,67,79,80,89,82,73,71,72,84,44,32,\n80,65,84,69,78,84,44,32,84,82,65,68,69,77,65,82,\n75,44,32,79,82,32,79,84,72,69,82,32,82,73,71,72,\n84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,\n72,65,76,76,32,66,73,84,83,84,82,69,65,77,32,79,\n82,32,84,72,69,32,71,78,79,77,69,32,70,79,85,78,\n68,65,84,73,79,78,32,66,69,32,76,73,65,66,76,69,\n32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,\n68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,\n32,76,73,65,66,73,76,73,84,89,44,32,73,78,67,76,\n85,68,73,78,71,32,65,78,89,32,71,69,78,69,82,65,\n76,44,32,83,80,69,67,73,65,76,44,32,73,78,68,73,\n82,69,67,84,44,32,73,78,67,73,68,69,78,84,65,76,\n44,32,79,82,32,67,79,78,83,69,81,85,69,78,84,73,\n65,76,32,68,65,77,65,71,69,83,44,32,87,72,69,84,\n72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,\n32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,\n82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,\n32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,\n85,84,32,79,70,32,84,72,69,32,85,83,69,32,79,82,\n32,73,78,65,66,73,76,73,84,89,32,84,79,32,85,83,\n69,32,84,72,69,32,70,79,78,84,32,83,79,70,84,87,\n65,82,69,32,79,82,32,70,82,79,77,32,79,84,72,69,\n82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,\n69,32,70,79,78,84,32,83,79,70,84,87,65,82,69,46,\n13,10,13,10,69,120,99,101,112,116,32,97,115,32,99,111,\n110,116,97,105,110,101,100,32,105,110,32,116,104,105,115,32,\n110,111,116,105,99,101,44,32,116,104,101,32,110,97,109,101,\n115,32,111,102,32,71,110,111,109,101,44,32,116,104,101,32,\n71,110,111,109,101,32,70,111,117,110,100,97,116,105,111,110,\n44,32,97,110,100,32,66,105,116,115,116,114,101,97,109,32,\n73,110,99,46,44,32,115,104,97,108,108,32,110,111,116,32,\n98,101,32,117,115,101,100,32,105,110,32,97,100,118,101,114,\n116,105,115,105,110,103,32,111,114,32,111,116,104,101,114,119,\n105,115,101,32,116,111,32,112,114,111,109,111,116,101,32,116,\n104,101,32,115,97,108,101,44,32,117,115,101,32,111,114,32,\n111,116,104,101,114,32,100,101,97,108,105,110,103,115,32,105,\n110,32,116,104,105,115,32,70,111,110,116,32,83,111,102,116,\n119,97,114,101,32,119,105,116,104,111,117,116,32,112,114,105,\n111,114,32,119,114,105,116,116,101,110,32,97,117,116,104,111,\n114,105,122,97,116,105,111,110,32,102,114,111,109,32,116,104,\n101,32,71,110,111,109,101,32,70,111,117,110,100,97,116,105,\n111,110,32,111,114,32,66,105,116,115,116,114,101,97,109,32,\n73,110,99,46,44,32,114,101,115,112,101,99,116,105,118,101,\n108,121,46,32,70,111,114,32,102,117,114,116,104,101,114,32,\n105,110,102,111,114,109,97,116,105,111,110,44,32,99,111,110,\n116,97,99,116,58,32,102,111,110,116,115,32,97,116,32,103,\n110,111,109,101,32,100,111,116,32,111,114,103,46,104,116,116,\n112,58,47,47,119,119,119,46,98,105,116,115,116,114,101,97,\n109,46,99,111,109,0,67,0,111,0,112,0,121,0,114,0,\n105,0,103,0,104,0,116,0,32,0,40,0,99,0,41,0,\n32,0,50,0,48,0,48,0,51,0,32,0,98,0,121,0,\n32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,\n97,0,109,0,44,0,32,0,73,0,110,0,99,0,46,0,\n32,0,65,0,108,0,108,0,32,0,82,0,105,0,103,0,\n104,0,116,0,115,0,32,0,82,0,101,0,115,0,101,0,\n114,0,118,0,101,0,100,0,46,0,66,0,105,0,116,0,\n115,0,116,0,114,0,101,0,97,0,109,0,32,0,86,0,\n101,0,114,0,97,0,32,0,83,0,97,0,110,0,115,0,\n66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,\n109,0,86,0,101,0,114,0,97,0,83,0,97,0,110,0,\n115,0,45,0,82,0,111,0,109,0,97,0,110,0,82,0,\n101,0,108,0,101,0,97,0,115,0,101,0,32,0,49,0,\n46,0,49,0,48,0,67,0,111,0,112,0,121,0,114,0,\n105,0,103,0,104,0,116,0,32,0,40,0,99,0,41,0,\n32,0,50,0,48,0,48,0,51,0,32,0,98,0,121,0,\n32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,\n97,0,109,0,44,0,32,0,73,0,110,0,99,0,46,0,\n13,0,10,0,65,0,108,0,108,0,32,0,82,0,105,0,\n103,0,104,0,116,0,115,0,32,0,82,0,101,0,115,0,\n101,0,114,0,118,0,101,0,100,0,46,0,13,0,10,0,\n66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,\n109,0,32,0,86,0,101,0,114,0,97,0,32,0,105,0,\n115,0,32,0,97,0,32,0,116,0,114,0,97,0,100,0,\n101,0,109,0,97,0,114,0,107,0,32,0,111,0,102,0,\n32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,\n97,0,109,0,44,0,32,0,73,0,110,0,99,0,46,0,\n13,0,10,0,13,0,10,0,80,0,101,0,114,0,109,0,\n105,0,115,0,115,0,105,0,111,0,110,0,32,0,105,0,\n115,0,32,0,104,0,101,0,114,0,101,0,98,0,121,0,\n32,0,103,0,114,0,97,0,110,0,116,0,101,0,100,0,\n44,0,32,0,102,0,114,0,101,0,101,0,32,0,111,0,\n102,0,32,0,99,0,104,0,97,0,114,0,103,0,101,0,\n44,0,32,0,116,0,111,0,32,0,97,0,110,0,121,0,\n32,0,112,0,101,0,114,0,115,0,111,0,110,0,32,0,\n111,0,98,0,116,0,97,0,105,0,110,0,105,0,110,0,\n103,0,32,0,97,0,32,0,99,0,111,0,112,0,121,0,\n32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,\n102,0,111,0,110,0,116,0,115,0,32,0,97,0,99,0,\n99,0,111,0,109,0,112,0,97,0,110,0,121,0,105,0,\n110,0,103,0,32,0,116,0,104,0,105,0,115,0,32,0,\n108,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,\n40,0,34,0,70,0,111,0,110,0,116,0,115,0,34,0,\n41,0,32,0,97,0,110,0,100,0,32,0,97,0,115,0,\n115,0,111,0,99,0,105,0,97,0,116,0,101,0,100,0,\n32,0,100,0,111,0,99,0,117,0,109,0,101,0,110,0,\n116,0,97,0,116,0,105,0,111,0,110,0,32,0,102,0,\n105,0,108,0,101,0,115,0,32,0,40,0,116,0,104,0,\n101,0,32,0,34,0,70,0,111,0,110,0,116,0,32,0,\n83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,\n34,0,41,0,44,0,32,0,116,0,111,0,32,0,114,0,\n101,0,112,0,114,0,111,0,100,0,117,0,99,0,101,0,\n32,0,97,0,110,0,100,0,32,0,100,0,105,0,115,0,\n116,0,114,0,105,0,98,0,117,0,116,0,101,0,32,0,\n116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,\n32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,\n101,0,44,0,32,0,105,0,110,0,99,0,108,0,117,0,\n100,0,105,0,110,0,103,0,32,0,119,0,105,0,116,0,\n104,0,111,0,117,0,116,0,32,0,108,0,105,0,109,0,\n105,0,116,0,97,0,116,0,105,0,111,0,110,0,32,0,\n116,0,104,0,101,0,32,0,114,0,105,0,103,0,104,0,\n116,0,115,0,32,0,116,0,111,0,32,0,117,0,115,0,\n101,0,44,0,32,0,99,0,111,0,112,0,121,0,44,0,\n32,0,109,0,101,0,114,0,103,0,101,0,44,0,32,0,\n112,0,117,0,98,0,108,0,105,0,115,0,104,0,44,0,\n32,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,\n117,0,116,0,101,0,44,0,32,0,97,0,110,0,100,0,\n47,0,111,0,114,0,32,0,115,0,101,0,108,0,108,0,\n32,0,99,0,111,0,112,0,105,0,101,0,115,0,32,0,\n111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,\n111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,\n119,0,97,0,114,0,101,0,44,0,32,0,97,0,110,0,\n100,0,32,0,116,0,111,0,32,0,112,0,101,0,114,0,\n109,0,105,0,116,0,32,0,112,0,101,0,114,0,115,0,\n111,0,110,0,115,0,32,0,116,0,111,0,32,0,119,0,\n104,0,111,0,109,0,32,0,116,0,104,0,101,0,32,0,\n70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,\n116,0,119,0,97,0,114,0,101,0,32,0,105,0,115,0,\n32,0,102,0,117,0,114,0,110,0,105,0,115,0,104,0,\n101,0,100,0,32,0,116,0,111,0,32,0,100,0,111,0,\n32,0,115,0,111,0,44,0,32,0,115,0,117,0,98,0,\n106,0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,\n116,0,104,0,101,0,32,0,102,0,111,0,108,0,108,0,\n111,0,119,0,105,0,110,0,103,0,32,0,99,0,111,0,\n110,0,100,0,105,0,116,0,105,0,111,0,110,0,115,0,\n58,0,13,0,10,0,13,0,10,0,84,0,104,0,101,0,\n32,0,97,0,98,0,111,0,118,0,101,0,32,0,99,0,\n111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,\n32,0,97,0,110,0,100,0,32,0,116,0,114,0,97,0,\n100,0,101,0,109,0,97,0,114,0,107,0,32,0,110,0,\n111,0,116,0,105,0,99,0,101,0,115,0,32,0,97,0,\n110,0,100,0,32,0,116,0,104,0,105,0,115,0,32,0,\n112,0,101,0,114,0,109,0,105,0,115,0,115,0,105,0,\n111,0,110,0,32,0,110,0,111,0,116,0,105,0,99,0,\n101,0,32,0,115,0,104,0,97,0,108,0,108,0,32,0,\n98,0,101,0,32,0,105,0,110,0,99,0,108,0,117,0,\n100,0,101,0,100,0,32,0,105,0,110,0,32,0,97,0,\n108,0,108,0,32,0,99,0,111,0,112,0,105,0,101,0,\n115,0,32,0,111,0,102,0,32,0,111,0,110,0,101,0,\n32,0,111,0,114,0,32,0,109,0,111,0,114,0,101,0,\n32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,\n70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,\n116,0,119,0,97,0,114,0,101,0,32,0,116,0,121,0,\n112,0,101,0,102,0,97,0,99,0,101,0,115,0,46,0,\n13,0,10,0,13,0,10,0,84,0,104,0,101,0,32,0,\n70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,\n116,0,119,0,97,0,114,0,101,0,32,0,109,0,97,0,\n121,0,32,0,98,0,101,0,32,0,109,0,111,0,100,0,\n105,0,102,0,105,0,101,0,100,0,44,0,32,0,97,0,\n108,0,116,0,101,0,114,0,101,0,100,0,44,0,32,0,\n111,0,114,0,32,0,97,0,100,0,100,0,101,0,100,0,\n32,0,116,0,111,0,44,0,32,0,97,0,110,0,100,0,\n32,0,105,0,110,0,32,0,112,0,97,0,114,0,116,0,\n105,0,99,0,117,0,108,0,97,0,114,0,32,0,116,0,\n104,0,101,0,32,0,100,0,101,0,115,0,105,0,103,0,\n110,0,115,0,32,0,111,0,102,0,32,0,103,0,108,0,\n121,0,112,0,104,0,115,0,32,0,111,0,114,0,32,0,\n99,0,104,0,97,0,114,0,97,0,99,0,116,0,101,0,\n114,0,115,0,32,0,105,0,110,0,32,0,116,0,104,0,\n101,0,32,0,70,0,111,0,110,0,116,0,115,0,32,0,\n109,0,97,0,121,0,32,0,98,0,101,0,32,0,109,0,\n111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,\n97,0,110,0,100,0,32,0,97,0,100,0,100,0,105,0,\n116,0,105,0,111,0,110,0,97,0,108,0,32,0,103,0,\n108,0,121,0,112,0,104,0,115,0,32,0,111,0,114,0,\n32,0,99,0,104,0,97,0,114,0,97,0,99,0,116,0,\n101,0,114,0,115,0,32,0,109,0,97,0,121,0,32,0,\n98,0,101,0,32,0,97,0,100,0,100,0,101,0,100,0,\n32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,\n70,0,111,0,110,0,116,0,115,0,44,0,32,0,111,0,\n110,0,108,0,121,0,32,0,105,0,102,0,32,0,116,0,\n104,0,101,0,32,0,102,0,111,0,110,0,116,0,115,0,\n32,0,97,0,114,0,101,0,32,0,114,0,101,0,110,0,\n97,0,109,0,101,0,100,0,32,0,116,0,111,0,32,0,\n110,0,97,0,109,0,101,0,115,0,32,0,110,0,111,0,\n116,0,32,0,99,0,111,0,110,0,116,0,97,0,105,0,\n110,0,105,0,110,0,103,0,32,0,101,0,105,0,116,0,\n104,0,101,0,114,0,32,0,116,0,104,0,101,0,32,0,\n119,0,111,0,114,0,100,0,115,0,32,0,34,0,66,0,\n105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,\n34,0,32,0,111,0,114,0,32,0,116,0,104,0,101,0,\n32,0,119,0,111,0,114,0,100,0,32,0,34,0,86,0,\n101,0,114,0,97,0,34,0,46,0,13,0,10,0,13,0,\n10,0,84,0,104,0,105,0,115,0,32,0,76,0,105,0,\n99,0,101,0,110,0,115,0,101,0,32,0,98,0,101,0,\n99,0,111,0,109,0,101,0,115,0,32,0,110,0,117,0,\n108,0,108,0,32,0,97,0,110,0,100,0,32,0,118,0,\n111,0,105,0,100,0,32,0,116,0,111,0,32,0,116,0,\n104,0,101,0,32,0,101,0,120,0,116,0,101,0,110,0,\n116,0,32,0,97,0,112,0,112,0,108,0,105,0,99,0,\n97,0,98,0,108,0,101,0,32,0,116,0,111,0,32,0,\n70,0,111,0,110,0,116,0,115,0,32,0,111,0,114,0,\n32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,\n102,0,116,0,119,0,97,0,114,0,101,0,32,0,116,0,\n104,0,97,0,116,0,32,0,104,0,97,0,115,0,32,0,\n98,0,101,0,101,0,110,0,32,0,109,0,111,0,100,0,\n105,0,102,0,105,0,101,0,100,0,32,0,97,0,110,0,\n100,0,32,0,105,0,115,0,32,0,100,0,105,0,115,0,\n116,0,114,0,105,0,98,0,117,0,116,0,101,0,100,0,\n32,0,117,0,110,0,100,0,101,0,114,0,32,0,116,0,\n104,0,101,0,32,0,34,0,66,0,105,0,116,0,115,0,\n116,0,114,0,101,0,97,0,109,0,32,0,86,0,101,0,\n114,0,97,0,34,0,32,0,110,0,97,0,109,0,101,0,\n115,0,46,0,13,0,10,0,13,0,10,0,84,0,104,0,\n101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,\n111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,\n109,0,97,0,121,0,32,0,98,0,101,0,32,0,115,0,\n111,0,108,0,100,0,32,0,97,0,115,0,32,0,112,0,\n97,0,114,0,116,0,32,0,111,0,102,0,32,0,97,0,\n32,0,108,0,97,0,114,0,103,0,101,0,114,0,32,0,\n115,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,\n32,0,112,0,97,0,99,0,107,0,97,0,103,0,101,0,\n32,0,98,0,117,0,116,0,32,0,110,0,111,0,32,0,\n99,0,111,0,112,0,121,0,32,0,111,0,102,0,32,0,\n111,0,110,0,101,0,32,0,111,0,114,0,32,0,109,0,\n111,0,114,0,101,0,32,0,111,0,102,0,32,0,116,0,\n104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,\n83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,\n32,0,116,0,121,0,112,0,101,0,102,0,97,0,99,0,\n101,0,115,0,32,0,109,0,97,0,121,0,32,0,98,0,\n101,0,32,0,115,0,111,0,108,0,100,0,32,0,98,0,\n121,0,32,0,105,0,116,0,115,0,101,0,108,0,102,0,\n46,0,13,0,10,0,13,0,10,0,84,0,72,0,69,0,\n32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,\n70,0,84,0,87,0,65,0,82,0,69,0,32,0,73,0,\n83,0,32,0,80,0,82,0,79,0,86,0,73,0,68,0,\n69,0,68,0,32,0,34,0,65,0,83,0,32,0,73,0,\n83,0,34,0,44,0,32,0,87,0,73,0,84,0,72,0,\n79,0,85,0,84,0,32,0,87,0,65,0,82,0,82,0,\n65,0,78,0,84,0,89,0,32,0,79,0,70,0,32,0,\n65,0,78,0,89,0,32,0,75,0,73,0,78,0,68,0,\n44,0,32,0,69,0,88,0,80,0,82,0,69,0,83,0,\n83,0,32,0,79,0,82,0,32,0,73,0,77,0,80,0,\n76,0,73,0,69,0,68,0,44,0,32,0,73,0,78,0,\n67,0,76,0,85,0,68,0,73,0,78,0,71,0,32,0,\n66,0,85,0,84,0,32,0,78,0,79,0,84,0,32,0,\n76,0,73,0,77,0,73,0,84,0,69,0,68,0,32,0,\n84,0,79,0,32,0,65,0,78,0,89,0,32,0,87,0,\n65,0,82,0,82,0,65,0,78,0,84,0,73,0,69,0,\n83,0,32,0,79,0,70,0,32,0,77,0,69,0,82,0,\n67,0,72,0,65,0,78,0,84,0,65,0,66,0,73,0,\n76,0,73,0,84,0,89,0,44,0,32,0,70,0,73,0,\n84,0,78,0,69,0,83,0,83,0,32,0,70,0,79,0,\n82,0,32,0,65,0,32,0,80,0,65,0,82,0,84,0,\n73,0,67,0,85,0,76,0,65,0,82,0,32,0,80,0,\n85,0,82,0,80,0,79,0,83,0,69,0,32,0,65,0,\n78,0,68,0,32,0,78,0,79,0,78,0,73,0,78,0,\n70,0,82,0,73,0,78,0,71,0,69,0,77,0,69,0,\n78,0,84,0,32,0,79,0,70,0,32,0,67,0,79,0,\n80,0,89,0,82,0,73,0,71,0,72,0,84,0,44,0,\n32,0,80,0,65,0,84,0,69,0,78,0,84,0,44,0,\n32,0,84,0,82,0,65,0,68,0,69,0,77,0,65,0,\n82,0,75,0,44,0,32,0,79,0,82,0,32,0,79,0,\n84,0,72,0,69,0,82,0,32,0,82,0,73,0,71,0,\n72,0,84,0,46,0,32,0,73,0,78,0,32,0,78,0,\n79,0,32,0,69,0,86,0,69,0,78,0,84,0,32,0,\n83,0,72,0,65,0,76,0,76,0,32,0,66,0,73,0,\n84,0,83,0,84,0,82,0,69,0,65,0,77,0,32,0,\n79,0,82,0,32,0,84,0,72,0,69,0,32,0,71,0,\n78,0,79,0,77,0,69,0,32,0,70,0,79,0,85,0,\n78,0,68,0,65,0,84,0,73,0,79,0,78,0,32,0,\n66,0,69,0,32,0,76,0,73,0,65,0,66,0,76,0,\n69,0,32,0,70,0,79,0,82,0,32,0,65,0,78,0,\n89,0,32,0,67,0,76,0,65,0,73,0,77,0,44,0,\n32,0,68,0,65,0,77,0,65,0,71,0,69,0,83,0,\n32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,\n82,0,32,0,76,0,73,0,65,0,66,0,73,0,76,0,\n73,0,84,0,89,0,44,0,32,0,73,0,78,0,67,0,\n76,0,85,0,68,0,73,0,78,0,71,0,32,0,65,0,\n78,0,89,0,32,0,71,0,69,0,78,0,69,0,82,0,\n65,0,76,0,44,0,32,0,83,0,80,0,69,0,67,0,\n73,0,65,0,76,0,44,0,32,0,73,0,78,0,68,0,\n73,0,82,0,69,0,67,0,84,0,44,0,32,0,73,0,\n78,0,67,0,73,0,68,0,69,0,78,0,84,0,65,0,\n76,0,44,0,32,0,79,0,82,0,32,0,67,0,79,0,\n78,0,83,0,69,0,81,0,85,0,69,0,78,0,84,0,\n73,0,65,0,76,0,32,0,68,0,65,0,77,0,65,0,\n71,0,69,0,83,0,44,0,32,0,87,0,72,0,69,0,\n84,0,72,0,69,0,82,0,32,0,73,0,78,0,32,0,\n65,0,78,0,32,0,65,0,67,0,84,0,73,0,79,0,\n78,0,32,0,79,0,70,0,32,0,67,0,79,0,78,0,\n84,0,82,0,65,0,67,0,84,0,44,0,32,0,84,0,\n79,0,82,0,84,0,32,0,79,0,82,0,32,0,79,0,\n84,0,72,0,69,0,82,0,87,0,73,0,83,0,69,0,\n44,0,32,0,65,0,82,0,73,0,83,0,73,0,78,0,\n71,0,32,0,70,0,82,0,79,0,77,0,44,0,32,0,\n79,0,85,0,84,0,32,0,79,0,70,0,32,0,84,0,\n72,0,69,0,32,0,85,0,83,0,69,0,32,0,79,0,\n82,0,32,0,73,0,78,0,65,0,66,0,73,0,76,0,\n73,0,84,0,89,0,32,0,84,0,79,0,32,0,85,0,\n83,0,69,0,32,0,84,0,72,0,69,0,32,0,70,0,\n79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,\n87,0,65,0,82,0,69,0,32,0,79,0,82,0,32,0,\n70,0,82,0,79,0,77,0,32,0,79,0,84,0,72,0,\n69,0,82,0,32,0,68,0,69,0,65,0,76,0,73,0,\n78,0,71,0,83,0,32,0,73,0,78,0,32,0,84,0,\n72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,\n83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,\n46,0,13,0,10,0,13,0,10,0,69,0,120,0,99,0,\n101,0,112,0,116,0,32,0,97,0,115,0,32,0,99,0,\n111,0,110,0,116,0,97,0,105,0,110,0,101,0,100,0,\n32,0,105,0,110,0,32,0,116,0,104,0,105,0,115,0,\n32,0,110,0,111,0,116,0,105,0,99,0,101,0,44,0,\n32,0,116,0,104,0,101,0,32,0,110,0,97,0,109,0,\n101,0,115,0,32,0,111,0,102,0,32,0,71,0,110,0,\n111,0,109,0,101,0,44,0,32,0,116,0,104,0,101,0,\n32,0,71,0,110,0,111,0,109,0,101,0,32,0,70,0,\n111,0,117,0,110,0,100,0,97,0,116,0,105,0,111,0,\n110,0,44,0,32,0,97,0,110,0,100,0,32,0,66,0,\n105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,\n32,0,73,0,110,0,99,0,46,0,44,0,32,0,115,0,\n104,0,97,0,108,0,108,0,32,0,110,0,111,0,116,0,\n32,0,98,0,101,0,32,0,117,0,115,0,101,0,100,0,\n32,0,105,0,110,0,32,0,97,0,100,0,118,0,101,0,\n114,0,116,0,105,0,115,0,105,0,110,0,103,0,32,0,\n111,0,114,0,32,0,111,0,116,0,104,0,101,0,114,0,\n119,0,105,0,115,0,101,0,32,0,116,0,111,0,32,0,\n112,0,114,0,111,0,109,0,111,0,116,0,101,0,32,0,\n116,0,104,0,101,0,32,0,115,0,97,0,108,0,101,0,\n44,0,32,0,117,0,115,0,101,0,32,0,111,0,114,0,\n32,0,111,0,116,0,104,0,101,0,114,0,32,0,100,0,\n101,0,97,0,108,0,105,0,110,0,103,0,115,0,32,0,\n105,0,110,0,32,0,116,0,104,0,105,0,115,0,32,0,\n70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,\n116,0,119,0,97,0,114,0,101,0,32,0,119,0,105,0,\n116,0,104,0,111,0,117,0,116,0,32,0,112,0,114,0,\n105,0,111,0,114,0,32,0,119,0,114,0,105,0,116,0,\n116,0,101,0,110,0,32,0,97,0,117,0,116,0,104,0,\n111,0,114,0,105,0,122,0,97,0,116,0,105,0,111,0,\n110,0,32,0,102,0,114,0,111,0,109,0,32,0,116,0,\n104,0,101,0,32,0,71,0,110,0,111,0,109,0,101,0,\n32,0,70,0,111,0,117,0,110,0,100,0,97,0,116,0,\n105,0,111,0,110,0,32,0,111,0,114,0,32,0,66,0,\n105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,\n32,0,73,0,110,0,99,0,46,0,44,0,32,0,114,0,\n101,0,115,0,112,0,101,0,99,0,116,0,105,0,118,0,\n101,0,108,0,121,0,46,0,32,0,70,0,111,0,114,0,\n32,0,102,0,117,0,114,0,116,0,104,0,101,0,114,0,\n32,0,105,0,110,0,102,0,111,0,114,0,109,0,97,0,\n116,0,105,0,111,0,110,0,44,0,32,0,99,0,111,0,\n110,0,116,0,97,0,99,0,116,0,58,0,32,0,102,0,\n111,0,110,0,116,0,115,0,32,0,97,0,116,0,32,0,\n103,0,110,0,111,0,109,0,101,0,32,0,100,0,111,0,\n116,0,32,0,111,0,114,0,103,0,46,0,104,0,116,0,\n116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,\n46,0,98,0,105,0,116,0,115,0,116,0,114,0,101,0,\n97,0,109,0,46,0,99,0,111,0,109,0,1,53,0,184,\n0,203,0,203,0,193,0,170,0,156,1,166,0,184,0,102,\n0,0,0,113,0,203,0,160,2,178,0,133,0,117,0,184,\n0,195,1,203,1,137,2,45,0,203,0,166,0,240,0,211,\n0,170,0,135,0,203,3,170,4,0,1,74,0,51,0,203,\n0,0,0,217,5,2,0,244,1,84,0,180,0,156,1,57,\n1,20,1,57,7,6,4,0,4,78,4,180,4,82,4,184,\n4,231,4,205,0,55,4,115,4,205,4,96,4,115,1,51,\n3,162,5,86,5,166,5,86,5,57,3,197,2,18,0,201,\n0,31,0,184,1,223,0,115,0,186,3,233,3,51,3,188,\n4,68,4,14,0,223,3,205,3,170,0,229,3,170,4,4,\n0,0,0,203,0,143,0,164,0,123,0,184,0,20,1,111,\n0,127,2,123,2,82,0,143,0,199,5,205,0,154,0,154,\n0,111,0,203,0,205,1,158,1,211,0,240,0,186,1,131,\n0,213,0,152,3,4,2,72,0,158,1,213,0,193,0,203,\n0,246,0,131,3,84,2,127,0,0,3,51,2,102,0,211,\n0,199,0,164,0,205,0,143,0,154,0,115,4,0,5,213,\n1,10,0,254,2,43,0,164,0,180,0,156,0,0,0,98,\n0,156,0,0,0,29,3,45,5,213,5,213,5,213,5,240,\n0,127,0,123,0,84,0,164,6,184,6,20,7,35,1,211,\n0,184,0,203,0,166,1,195,1,236,6,147,0,160,0,211,\n3,92,3,113,3,219,1,133,4,35,4,168,4,72,0,143,\n1,57,1,20,1,57,3,96,0,143,5,213,1,154,6,20,\n7,35,6,102,1,121,4,96,4,96,4,96,4,123,0,156,\n0,0,2,119,4,96,1,170,0,233,4,96,7,98,0,123,\n0,197,0,127,2,123,0,0,0,180,2,82,5,205,0,102,\n0,188,0,102,0,119,6,16,0,205,1,59,1,133,3,137,\n0,143,0,123,0,0,0,29,0,205,7,74,4,47,0,156,\n0,156,0,0,7,125,0,111,0,0,0,111,3,53,0,106,\n0,111,0,123,0,174,0,178,0,45,3,150,0,143,2,123,\n0,246,0,131,3,84,6,55,5,246,0,143,0,156,4,225,\n2,102,0,143,1,141,2,246,0,205,3,68,0,41,0,102,\n4,238,0,115,0,0,20,0,184,2,128,64,255,251,254,3,\n250,20,3,249,37,3,248,50,3,247,150,3,246,14,3,245,\n254,3,244,254,3,243,37,3,242,14,3,241,150,3,240,37,\n3,239,138,65,5,239,254,3,238,150,3,237,150,3,236,250,\n3,235,250,3,234,254,3,233,58,3,232,66,3,231,254,3,\n230,50,3,229,228,83,5,229,150,3,228,138,65,5,228,83,\n3,227,226,47,5,227,250,3,226,47,3,225,254,3,224,254,\n3,223,50,3,222,20,3,221,150,3,220,254,3,219,18,3,\n218,125,3,217,187,3,216,254,3,214,138,65,5,214,125,3,\n213,212,71,5,213,125,3,212,71,3,211,210,27,5,211,254,\n3,210,27,3,209,254,3,208,254,3,207,254,3,206,254,3,\n205,150,3,204,203,30,5,204,254,3,203,30,3,202,50,3,\n201,254,3,198,133,17,5,198,28,3,197,22,3,196,254,3,\n195,254,3,194,254,3,193,254,3,192,254,3,191,254,3,190,\n254,3,189,254,3,188,254,3,187,254,3,186,17,3,185,134,\n37,5,185,254,3,184,183,187,5,184,254,3,183,182,93,5,\n183,187,3,183,128,4,182,181,37,5,182,93,64,255,3,182,\n64,4,181,37,3,180,254,3,179,150,3,178,254,3,177,254,\n3,176,254,3,175,254,3,174,100,3,173,14,3,172,171,37,\n5,172,100,3,171,170,18,5,171,37,3,170,18,3,169,138,\n65,5,169,250,3,168,254,3,167,254,3,166,254,3,165,18,\n3,164,254,3,163,162,14,5,163,50,3,162,14,3,161,100,\n3,160,138,65,5,160,150,3,159,254,3,158,157,12,5,158,\n254,3,157,12,3,156,155,25,5,156,100,3,155,154,16,5,\n155,25,3,154,16,3,153,10,3,152,254,3,151,150,13,5,\n151,254,3,150,13,3,149,138,65,5,149,150,3,148,147,14,\n5,148,40,3,147,14,3,146,250,3,145,144,187,5,145,254,\n3,144,143,93,5,144,187,3,144,128,4,143,142,37,5,143,\n93,3,143,64,4,142,37,3,141,254,3,140,139,46,5,140,\n254,3,139,46,3,138,134,37,5,138,65,3,137,136,11,5,\n137,20,3,136,11,3,135,134,37,5,135,100,3,134,133,17,\n5,134,37,3,133,17,3,132,254,3,131,130,17,5,131,254,\n3,130,17,3,129,254,3,128,254,3,127,254,3,64,255,126,\n125,125,5,126,254,3,125,125,3,124,100,3,123,84,21,5,\n123,37,3,122,254,3,121,254,3,120,14,3,119,12,3,118,\n10,3,117,254,3,116,250,3,115,250,3,114,250,3,113,250,\n3,112,254,3,111,254,3,110,254,3,108,33,3,107,254,3,\n106,17,66,5,106,83,3,105,254,3,104,125,3,103,17,66,\n5,102,254,3,101,254,3,100,254,3,99,254,3,98,254,3,\n97,58,3,96,250,3,94,12,3,93,254,3,91,254,3,90,\n254,3,89,88,10,5,89,250,3,88,10,3,87,22,25,5,\n87,50,3,86,254,3,85,84,21,5,85,66,3,84,21,3,\n83,1,16,5,83,24,3,82,20,3,81,74,19,5,81,254,\n3,80,11,3,79,254,3,78,77,16,5,78,254,3,77,16,\n3,76,254,3,75,74,19,5,75,254,3,74,73,16,5,74,\n19,3,73,29,13,5,73,16,3,72,13,3,71,254,3,70,\n150,3,69,150,3,68,254,3,67,2,45,5,67,250,3,66,\n187,3,65,75,3,64,254,3,63,254,3,62,61,18,5,62,\n20,3,61,60,15,5,61,18,3,60,59,13,5,60,64,255,\n15,3,59,13,3,58,254,3,57,254,3,56,55,20,5,56,\n250,3,55,54,16,5,55,20,3,54,53,11,5,54,16,3,\n53,11,3,52,30,3,51,13,3,50,49,11,5,50,254,3,\n49,11,3,48,47,11,5,48,13,3,47,11,3,46,45,9,\n5,46,16,3,45,9,3,44,50,3,43,42,37,5,43,100,\n3,42,41,18,5,42,37,3,41,18,3,40,39,37,5,40,\n65,3,39,37,3,38,37,11,5,38,15,3,37,11,3,36,\n254,3,35,254,3,34,15,3,33,1,16,5,33,18,3,32,\n100,3,31,250,3,30,29,13,5,30,100,3,29,13,3,28,\n17,66,5,28,254,3,27,250,3,26,66,3,25,17,66,5,\n25,254,3,24,100,3,23,22,25,5,23,254,3,22,1,16,\n5,22,25,3,21,254,3,20,254,3,19,254,3,18,17,66,\n5,18,254,3,17,2,45,5,17,66,3,16,125,3,15,100,\n3,14,254,3,13,12,22,5,13,254,3,12,1,16,5,12,\n22,3,11,254,3,10,16,3,9,254,3,8,2,45,5,8,\n254,3,7,20,3,6,100,3,4,1,16,5,4,254,3,64,\n21,3,2,45,5,3,254,3,2,1,16,5,2,45,3,1,\n16,3,0,254,3,1,184,1,100,133,141,1,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,\n43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,29,\n182,6,5,4,3,2,1,0,44,32,16,176,2,37,73,100,\n176,64,81,88,32,200,89,33,45,44,176,2,37,73,100,176,\n64,81,88,32,200,89,33,45,44,32,16,7,32,176,0,80,\n176,13,121,32,184,255,255,80,88,4,27,5,89,176,5,28,\n176,3,37,8,176,4,37,35,225,32,176,0,80,176,13,121,\n32,184,255,255,80,88,4,27,5,89,176,5,28,176,3,37,\n8,225,45,44,75,80,88,32,176,253,69,68,89,33,45,44,\n176,2,37,69,96,68,45,44,75,83,88,176,2,37,176,2,\n37,69,68,89,33,33,45,44,69,68,45,0,0,2,0,102,\n254,150,4,102,5,164,0,3,0,7,0,26,64,12,4,251,\n0,6,251,1,8,5,127,2,4,0,47,196,212,236,49,0,\n16,212,236,212,236,48,19,17,33,17,37,33,17,33,102,4,\n0,252,115,3,27,252,229,254,150,7,14,248,242,114,6,41,\n0,2,1,53,0,0,2,0,5,213,0,3,0,9,0,64,\n64,15,7,0,131,4,129,2,8,7,5,1,3,4,0,0,\n10,16,252,60,236,50,57,57,49,0,47,228,252,204,48,1,\n75,176,11,84,88,189,0,10,0,64,0,1,0,10,0,10,\n255,192,56,17,55,56,89,182,0,11,32,11,80,11,3,93,\n37,51,21,35,17,51,17,3,35,3,1,53,203,203,203,20,\n162,21,254,254,5,213,253,113,254,155,1,101,0,2,0,197,\n3,170,2,233,5,213,0,3,0,7,0,77,64,15,5,1,\n132,4,0,129,8,4,5,6,0,5,2,4,8,16,252,252,\n220,236,49,0,16,244,60,236,50,48,1,75,176,18,84,75,\n176,19,84,91,88,189,0,8,0,64,0,1,0,8,0,8,\n255,192,56,17,55,56,89,64,15,48,9,64,9,80,9,96,\n9,112,9,160,9,191,9,7,93,1,17,35,17,33,17,35,\n17,1,111,170,2,36,170,5,213,253,213,2,43,253,213,2,\n43,0,0,2,0,158,0,0,6,23,5,190,0,3,0,31,\n0,96,64,49,27,11,0,135,7,4,29,9,5,25,13,2,\n135,23,19,15,21,17,31,30,28,27,26,23,22,21,20,19,\n18,17,16,14,13,12,9,8,7,6,5,4,3,2,1,0,\n26,10,24,6,32,16,252,204,23,57,49,0,47,60,212,60,\n60,252,60,60,212,60,60,196,50,236,50,50,48,64,17,11,\n1,11,2,11,12,11,13,20,4,26,17,26,18,20,31,8,\n1,93,1,33,3,33,11,1,33,19,51,3,33,21,33,3,\n33,21,33,3,35,19,33,3,35,19,33,53,33,19,33,53,\n33,19,4,23,254,221,84,1,37,68,104,1,36,105,160,103,\n1,56,254,161,82,1,62,254,155,104,160,103,254,219,103,161,\n104,254,197,1,96,84,254,190,1,105,102,3,133,254,178,3,\n135,254,97,1,159,254,97,154,254,178,153,254,98,1,158,254,\n98,1,158,153,1,78,154,1,159,0,0,3,0,170,254,211,\n4,109,6,20,0,33,0,40,0,47,0,213,64,85,34,2,\n10,11,10,39,1,38,40,2,11,11,10,29,1,30,28,2,\n47,41,47,27,2,41,41,47,66,19,17,16,34,10,27,41,\n4,23,6,9,42,33,5,2,23,134,22,6,134,5,17,35,\n26,138,22,137,16,0,42,138,5,137,2,45,8,22,10,30,\n7,41,26,18,3,0,9,34,16,9,3,1,7,38,8,13,\n5,6,48,16,252,60,236,244,23,60,252,23,60,244,228,236,\n49,0,47,228,236,196,212,228,236,50,196,16,238,16,238,17,\n18,57,17,57,17,18,23,57,17,18,57,48,75,83,88,7,\n16,4,237,7,16,14,237,17,23,57,7,16,14,237,17,23,\n57,7,16,4,237,89,34,1,75,176,9,84,88,189,0,48,\n0,64,0,1,0,48,0,48,255,192,56,17,55,56,89,1,\n75,176,12,84,75,176,16,84,91,75,176,15,84,91,88,189,\n0,48,255,192,0,1,0,48,0,48,0,64,56,17,55,56,\n89,1,35,3,46,1,39,53,30,1,23,17,46,1,53,52,\n54,55,53,51,21,30,1,23,21,46,1,39,17,30,1,21,\n20,6,7,3,17,14,1,21,20,22,23,17,62,1,53,52,\n38,2,180,100,1,105,210,106,102,209,111,221,201,218,204,100,\n93,174,83,83,175,92,227,214,227,214,100,116,122,113,225,127,\n129,123,254,211,1,45,2,45,45,180,64,65,1,1,200,36,\n172,150,163,188,14,235,232,4,31,27,175,42,46,4,254,85,\n35,180,156,169,195,15,3,0,1,154,13,106,88,86,96,213,\n254,79,17,110,90,88,104,0,0,5,0,113,255,227,7,41,\n5,240,0,11,0,23,0,35,0,39,0,51,0,149,64,54,\n36,15,37,38,37,38,15,39,36,39,66,0,146,12,30,146,\n46,141,24,146,36,6,146,12,141,38,18,140,40,36,145,52,\n39,33,27,37,9,3,13,21,14,9,13,15,33,13,43,14,\n27,13,15,49,11,52,16,252,196,236,244,236,16,238,246,238,\n17,57,17,18,57,49,0,16,228,50,244,60,228,236,16,238,\n246,238,16,238,48,75,83,88,7,16,5,237,7,16,5,237,\n89,34,1,75,176,9,84,75,176,11,84,91,75,176,12,84,\n91,75,176,20,84,91,75,176,14,84,91,75,176,13,84,91,\n88,189,0,52,0,64,0,1,0,52,0,52,255,192,56,17,\n55,56,89,1,34,6,21,20,22,51,50,54,53,52,38,39,\n50,22,21,20,6,35,34,38,53,52,54,1,34,6,21,20,\n22,51,50,54,53,52,38,37,51,1,35,19,50,22,21,20,\n6,35,34,38,53,52,54,5,209,87,99,99,87,85,99,99,\n85,158,186,187,157,160,186,187,252,151,86,99,98,87,87,99,\n100,3,49,160,252,90,160,31,158,188,187,159,159,185,186,2,\n145,148,132,130,149,149,130,131,149,127,220,187,187,219,219,187,\n188,219,2,97,149,130,132,148,148,132,129,150,127,249,243,6,\n13,219,187,189,218,219,188,186,220,0,0,2,0,129,255,227,\n5,254,5,240,0,9,0,48,1,205,64,150,13,1,14,12,\n134,17,18,17,11,134,10,11,18,18,17,9,134,0,9,21,\n22,21,7,1,6,8,134,22,22,21,2,1,3,1,134,29,\n30,29,0,134,9,0,30,30,29,32,31,2,33,30,17,10,\n19,10,23,22,21,3,24,20,17,19,10,7,8,2,6,9,\n17,19,19,10,2,1,2,3,0,17,10,19,10,23,22,2,\n24,21,17,19,10,20,17,19,19,10,66,18,11,9,3,6,\n0,10,30,3,40,21,14,6,40,39,6,149,24,43,149,39,\n148,36,145,24,140,14,19,10,46,11,14,9,0,46,18,21,\n39,14,30,3,46,18,39,33,14,17,15,19,33,3,18,27,\n16,49,16,252,236,196,212,212,236,16,198,238,17,57,17,18,\n57,57,17,57,57,17,57,17,57,49,0,47,198,228,246,230,\n238,16,238,16,198,17,18,57,17,23,57,17,23,57,48,75,\n83,88,7,16,5,237,7,5,237,17,23,57,7,16,5,237,\n17,23,57,7,16,5,237,17,23,57,7,5,237,17,23,57,\n7,16,5,237,17,23,57,7,16,8,237,7,16,14,237,17,\n23,57,7,16,14,237,17,23,57,7,16,8,237,7,16,8,\n237,7,16,14,237,17,23,57,89,34,178,15,50,1,1,93,\n64,178,7,11,5,34,9,41,28,0,28,1,31,2,23,11,\n42,0,42,1,38,18,58,0,52,18,68,11,94,0,89,1,\n90,10,85,18,90,26,90,31,89,48,103,30,123,0,155,0,\n154,1,153,2,151,8,149,11,147,21,149,22,149,34,153,45,\n31,9,11,9,12,8,17,12,39,12,40,24,2,27,9,25,\n11,25,12,25,17,28,20,28,21,22,29,31,50,39,0,39,\n1,41,9,35,18,42,19,42,20,40,21,47,50,59,9,52,\n18,57,19,63,50,74,9,76,20,75,21,70,25,79,50,86,\n1,90,9,89,12,85,18,89,19,92,31,95,50,106,12,105,\n17,96,50,117,1,121,12,122,17,147,0,147,1,151,2,149,\n5,156,7,156,8,159,8,154,9,155,11,154,12,144,50,160,\n50,176,50,57,93,0,93,1,14,1,21,20,22,51,50,54,\n55,9,1,62,1,55,51,6,2,7,1,35,39,14,1,35,\n34,0,53,52,54,55,46,1,53,52,54,51,50,22,23,21,\n46,1,35,34,6,21,20,22,1,242,91,85,212,160,95,166,\n73,254,123,1,252,59,66,6,186,12,104,93,1,23,252,143,\n104,228,131,241,254,206,134,134,48,50,222,184,83,165,85,87,\n158,68,105,131,59,3,35,81,161,88,146,194,63,64,2,143,\n253,248,89,203,114,132,254,254,126,254,227,147,89,87,1,19,\n215,128,225,99,63,125,60,162,197,36,36,182,47,49,111,88,\n51,103,0,1,0,197,3,170,1,111,5,213,0,3,0,66,\n64,10,1,132,0,129,4,0,5,2,4,4,16,252,236,49,\n0,16,244,236,48,1,75,176,18,84,75,176,19,84,91,88,\n189,0,4,0,64,0,1,0,4,0,4,255,192,56,17,55,\n56,89,64,13,64,5,80,5,96,5,112,5,144,5,160,5,\n6,93,1,17,35,17,1,111,170,5,213,253,213,2,43,0,\n0,1,0,176,254,242,2,123,6,18,0,13,0,79,64,15,\n6,152,0,151,14,13,7,0,3,18,6,0,19,10,14,16,\n220,228,50,236,17,57,57,49,0,16,252,236,48,1,75,176,\n19,84,88,189,0,14,0,64,0,1,0,14,0,14,255,192,\n56,17,55,56,89,1,75,176,15,84,88,189,0,14,255,192,\n0,1,0,14,0,14,0,64,56,17,55,56,89,1,6,2,\n21,20,18,23,35,38,2,53,52,18,55,2,123,134,130,131,\n133,160,150,149,148,151,6,18,230,254,62,231,231,254,59,229,\n235,1,198,224,223,1,196,236,0,1,0,164,254,242,2,111,\n6,18,0,13,0,31,64,15,7,152,0,151,14,7,1,0,\n11,18,4,19,8,0,14,16,220,60,244,236,17,57,57,49,\n0,16,252,236,48,19,51,22,18,21,20,2,7,35,54,18,\n53,52,2,164,160,150,149,149,150,160,133,131,131,6,18,236,\n254,60,223,224,254,58,235,229,1,197,231,231,1,194,0,1,\n0,61,2,74,3,195,5,240,0,17,0,78,64,44,16,13,\n11,0,4,12,9,7,4,2,4,8,3,153,5,17,12,153,\n10,1,14,145,18,8,12,10,3,9,6,17,3,1,3,2,\n0,20,15,4,11,9,20,13,6,18,16,212,60,228,50,220,\n60,228,50,23,57,17,18,23,57,49,0,16,244,212,60,236,\n50,196,236,50,23,57,18,23,57,48,1,5,5,7,37,17,\n35,17,5,39,37,37,55,5,17,51,17,37,3,195,254,153,\n1,103,58,254,176,114,254,176,58,1,103,254,153,58,1,80,\n114,1,80,4,223,194,195,98,203,254,135,1,121,203,98,195,\n194,99,203,1,121,254,135,203,0,1,0,217,0,0,5,219,\n5,4,0,11,0,35,64,17,0,9,1,156,7,3,5,2,\n21,4,0,23,10,6,21,8,12,16,220,252,60,252,60,236,\n49,0,47,212,60,252,60,196,48,1,17,33,21,33,17,35,\n17,33,53,33,17,3,174,2,45,253,211,168,253,211,2,45,\n5,4,253,211,170,253,211,2,45,170,2,45,0,1,0,158,\n255,18,1,195,0,254,0,5,0,25,64,12,3,158,0,131,\n6,3,4,1,25,0,24,6,16,252,236,212,204,49,0,16,\n252,236,48,55,51,21,3,35,19,240,211,164,129,82,254,172,\n254,192,1,64,0,1,0,100,1,223,2,127,2,131,0,3,\n0,17,182,0,156,2,4,1,0,4,16,220,204,49,0,16,\n212,236,48,19,33,21,33,100,2,27,253,229,2,131,164,0,\n0,1,0,219,0,0,1,174,0,254,0,3,0,17,183,0,\n131,2,1,25,0,24,4,16,252,236,49,0,47,236,48,55,\n51,21,35,219,211,211,254,254,0,1,0,0,255,66,2,178,\n5,213,0,3,0,45,64,20,0,26,1,2,1,2,26,3,\n0,3,66,2,159,0,129,4,2,0,1,3,47,196,57,57,\n49,0,16,244,236,48,75,83,88,7,16,5,237,7,16,5,\n237,89,34,1,51,1,35,2,8,170,253,248,170,5,213,249,\n109,0,0,2,0,135,255,227,4,143,5,240,0,11,0,23,\n0,35,64,19,6,160,18,0,160,12,145,18,140,24,9,28,\n15,30,3,28,21,27,24,16,252,236,244,236,49,0,16,228,\n244,236,16,238,48,1,34,2,17,16,18,51,50,18,17,16,\n2,39,50,0,17,16,0,35,34,0,17,16,0,2,139,156,\n157,157,156,157,157,157,157,251,1,9,254,247,251,251,254,247,\n1,9,5,80,254,205,254,204,254,205,254,205,1,51,1,51,\n1,52,1,51,160,254,115,254,134,254,135,254,115,1,141,1,\n121,1,122,1,141,0,0,1,0,225,0,0,4,90,5,213,\n0,10,0,75,64,21,66,3,160,4,2,160,5,129,7,0,\n160,9,8,31,6,28,3,0,31,1,11,16,212,236,196,252,\n236,49,0,47,236,50,244,236,212,236,48,75,83,88,89,34,\n1,75,176,15,84,88,189,0,11,255,192,0,1,0,11,0,\n11,0,64,56,17,55,56,89,180,15,3,15,4,2,93,55,\n33,17,5,53,37,51,17,33,21,33,254,1,74,254,153,1,\n101,202,1,74,252,164,170,4,115,72,184,72,250,213,170,0,\n0,1,0,150,0,0,4,74,5,240,0,28,0,165,64,39,\n25,26,27,3,24,28,17,5,4,0,17,5,5,4,66,16,\n161,17,148,13,160,20,145,4,0,160,2,0,16,10,2,1,\n10,28,23,16,3,6,29,16,252,196,212,236,192,192,17,18,\n57,49,0,47,236,50,244,236,244,236,48,75,83,88,7,16,\n5,237,7,5,237,17,23,57,89,34,1,75,176,21,84,75,\n176,22,84,91,75,176,20,84,91,88,189,0,29,0,64,0,\n1,0,29,0,29,255,192,56,17,55,56,89,64,50,85,4,\n86,5,86,7,122,4,122,5,118,27,135,25,7,4,0,4,\n25,4,26,4,27,5,28,116,0,118,6,117,26,115,27,116,\n28,130,0,134,25,130,26,130,27,130,28,168,0,168,27,17,\n93,0,93,37,33,21,33,53,54,0,55,62,1,53,52,38,\n35,34,6,7,53,62,1,51,50,4,21,20,6,7,6,0,\n1,137,2,193,252,76,115,1,141,51,97,77,167,134,95,211,\n120,122,212,88,232,1,20,69,91,25,254,244,170,170,170,119,\n1,145,58,109,151,73,119,150,66,67,204,49,50,232,194,92,\n165,112,29,254,235,0,0,1,0,156,255,227,4,115,5,240,\n0,40,0,123,64,46,0,21,19,10,134,9,31,134,32,19,\n160,21,13,160,9,147,6,28,160,32,147,35,145,6,140,21,\n163,41,22,28,19,0,3,20,25,28,38,32,16,28,3,20,\n31,9,6,41,16,252,196,196,212,236,244,236,17,23,57,57,\n49,0,16,236,228,244,228,236,16,230,238,16,238,16,238,16,\n238,17,18,57,48,1,75,176,22,84,75,176,20,84,91,88,\n189,0,41,0,64,0,1,0,41,0,41,255,192,56,17,55,\n56,89,64,9,100,30,97,31,97,32,100,33,4,0,93,1,\n30,1,21,20,4,33,34,38,39,53,30,1,51,50,54,53,\n52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,\n62,1,51,50,4,21,20,6,3,63,145,163,254,208,254,232,\n94,199,106,84,200,109,190,199,185,165,174,182,149,158,163,152,\n83,190,114,115,201,89,230,1,12,142,3,37,31,196,144,221,\n242,37,37,195,49,50,150,143,132,149,166,119,112,115,123,36,\n38,180,32,32,209,178,124,171,0,2,0,100,0,0,4,164,\n5,213,0,2,0,13,0,140,64,29,1,13,3,13,0,3,\n3,13,66,0,3,11,7,160,5,1,3,129,9,1,12,10,\n0,28,6,8,4,12,14,16,220,212,60,196,236,50,17,57,\n49,0,47,228,212,60,236,50,18,57,48,75,83,88,7,16,\n4,201,7,16,5,201,89,34,1,75,176,11,84,75,176,13,\n84,91,88,189,0,14,0,64,0,1,0,14,0,14,255,192,\n56,17,55,56,89,64,42,11,0,42,0,72,0,89,0,105,\n0,119,0,138,0,7,22,1,43,0,38,1,43,3,54,1,\n78,1,79,12,79,13,86,1,102,1,117,1,122,3,133,1,\n13,93,0,93,9,1,33,3,51,17,51,21,35,17,35,17,\n33,53,3,6,254,2,1,254,53,254,213,213,201,253,94,5,\n37,252,227,3,205,252,51,168,254,160,1,96,195,0,0,1,\n0,158,255,227,4,100,5,213,0,29,0,117,64,35,4,26,\n7,17,134,16,29,26,160,7,20,160,16,137,13,2,160,0,\n129,13,140,7,164,30,23,28,1,10,3,28,0,10,16,6,\n30,16,252,196,212,236,16,196,238,49,0,16,228,228,244,236,\n16,230,238,16,254,196,16,238,17,18,57,48,1,75,176,22,\n84,75,176,20,84,91,88,189,0,30,0,64,0,1,0,30,\n0,30,255,192,56,17,55,56,89,1,75,176,15,84,88,189,\n0,30,255,192,0,1,0,30,0,30,0,64,56,17,55,56,\n89,19,33,21,33,17,62,1,51,50,0,21,20,0,33,34,\n38,39,53,30,1,51,50,54,53,52,38,35,34,6,7,221,\n3,25,253,160,44,88,44,250,1,36,254,212,254,239,94,195,\n104,90,192,107,173,202,202,173,81,161,84,5,213,170,254,146,\n15,15,254,238,234,241,254,245,32,32,203,49,48,182,156,156,\n182,36,38,0,0,2,0,143,255,227,4,150,5,240,0,11,\n0,36,0,88,64,36,19,6,0,13,134,12,0,160,22,6,\n160,28,22,165,16,160,12,137,34,145,28,140,37,12,34,9,\n28,25,30,19,28,3,33,31,27,37,16,252,236,236,244,236,\n228,49,0,16,228,244,228,252,228,16,238,16,238,16,238,17,\n18,57,48,64,20,203,0,203,1,205,2,205,3,205,4,203,\n5,203,6,7,164,30,178,30,2,93,1,93,1,34,6,21,\n20,22,51,50,54,53,52,38,1,21,46,1,35,34,2,3,\n62,1,51,50,0,21,20,0,35,32,0,17,16,0,33,50,\n22,2,164,136,159,159,136,136,159,159,1,9,76,155,76,200,\n211,15,59,178,107,225,1,5,254,240,226,254,253,254,238,1,\n80,1,27,76,155,3,59,186,162,161,187,187,161,162,186,2,\n121,184,36,38,254,242,254,239,87,93,254,239,235,230,254,234,\n1,141,1,121,1,98,1,165,30,0,0,1,0,168,0,0,\n4,104,5,213,0,6,0,99,64,24,5,17,2,3,2,3,\n17,4,5,4,66,5,160,0,129,3,5,3,1,4,1,0,\n6,7,16,252,204,196,17,57,57,49,0,47,244,236,48,75,\n83,88,7,16,5,237,7,16,5,237,89,34,1,75,176,22,\n84,88,189,0,7,0,64,0,1,0,7,0,7,255,192,56,\n17,55,56,89,64,18,88,2,1,6,3,26,5,57,5,72,\n5,103,3,176,0,176,6,7,93,0,93,19,33,21,1,35,\n1,33,168,3,192,253,226,211,1,254,253,51,5,213,86,250,\n129,5,43,0,0,3,0,139,255,227,4,139,5,240,0,11,\n0,35,0,47,0,67,64,37,24,12,0,160,39,6,160,30,\n45,160,18,145,30,140,39,163,48,24,12,36,42,28,21,36,\n28,15,9,28,21,27,30,3,28,15,33,27,48,16,252,196,\n236,244,196,236,16,238,16,238,17,57,57,49,0,16,236,228,\n244,236,16,238,16,238,57,57,48,1,34,6,21,20,22,51,\n50,54,53,52,38,37,38,38,53,52,54,51,50,22,21,20,\n6,7,22,22,21,20,4,35,34,36,53,52,54,19,20,22,\n51,50,54,53,52,38,35,34,6,2,139,144,165,165,144,144,\n166,165,254,165,130,145,255,222,223,254,145,129,146,163,254,247,\n247,247,254,247,164,72,145,131,130,147,147,130,131,145,2,197,\n154,135,135,154,155,134,135,154,86,32,178,128,179,208,208,179,\n128,178,32,34,198,143,217,232,232,217,143,198,1,97,116,130,\n130,116,116,130,130,0,0,2,0,129,255,227,4,135,5,240,\n0,24,0,36,0,88,64,35,7,31,25,1,134,0,25,160,\n10,165,4,160,0,137,22,31,160,16,145,22,140,37,7,28,\n28,33,19,30,0,34,34,28,13,27,37,16,252,236,228,244,\n236,236,49,0,16,228,244,236,16,230,254,245,238,16,238,17,\n18,57,48,64,22,196,25,194,26,192,27,192,28,192,29,194,\n30,196,31,7,170,18,188,18,233,18,3,93,1,93,55,53,\n30,1,51,50,18,19,14,1,35,34,0,53,52,0,51,32,\n0,17,16,0,33,34,38,1,50,54,53,52,38,35,34,6,\n21,20,22,225,76,156,75,200,211,15,58,178,108,224,254,251,\n1,16,226,1,3,1,17,254,177,254,229,76,156,1,62,136,\n159,159,136,136,159,159,31,184,36,38,1,13,1,18,86,92,\n1,15,235,230,1,22,254,115,254,134,254,159,254,91,30,2,\n151,186,162,161,187,187,161,162,186,0,0,2,0,240,0,0,\n1,195,4,35,0,3,0,7,0,28,64,14,6,131,4,166,\n0,131,2,5,1,3,4,0,24,8,16,252,60,236,50,49,\n0,47,236,244,236,48,55,51,21,35,17,51,21,35,240,211,\n211,211,211,254,254,4,35,254,0,2,0,158,255,18,1,195,\n4,35,0,3,0,9,0,37,64,19,2,131,0,7,158,4,\n131,0,166,10,7,8,5,1,25,4,0,24,10,16,252,60,\n236,50,212,204,49,0,16,228,252,236,16,238,48,19,51,21,\n35,17,51,21,3,35,19,240,211,211,211,164,129,82,4,35,\n254,253,217,172,254,192,1,64,0,1,0,217,0,94,5,219,\n4,166,0,6,0,77,64,42,2,156,3,4,3,1,156,0,\n1,4,4,3,1,156,2,1,5,6,5,0,156,6,5,66,\n5,4,2,1,0,5,3,168,6,167,7,1,2,0,36,4,\n35,7,16,252,236,50,57,49,0,16,244,236,23,57,48,75,\n83,88,7,4,237,7,16,8,237,7,16,8,237,7,16,4,\n237,89,34,9,2,21,1,53,1,5,219,251,248,4,8,250,\n254,5,2,3,240,254,145,254,147,182,1,209,166,1,209,0,\n0,2,0,217,1,96,5,219,3,162,0,3,0,7,0,28,\n64,13,0,156,2,6,156,4,8,5,1,4,0,35,8,16,\n252,60,196,50,49,0,16,212,236,212,236,48,19,33,21,33,\n21,33,21,33,217,5,2,250,254,5,2,250,254,3,162,168,\n240,170,0,1,0,217,0,94,5,219,4,166,0,6,0,79,\n64,43,6,156,0,6,3,4,3,5,156,4,4,3,0,156,\n1,2,1,6,156,5,6,2,2,1,66,6,5,3,2,0,\n5,4,168,1,167,7,6,2,36,4,0,35,7,16,252,60,\n236,57,49,0,16,244,236,23,57,48,75,83,88,7,16,8,\n237,7,16,4,237,7,16,4,237,7,16,8,237,89,34,19,\n53,1,21,1,53,1,217,5,2,250,254,4,6,3,240,182,\n254,47,166,254,47,182,1,109,0,2,0,147,0,0,3,176,\n5,240,0,3,0,36,0,112,64,43,36,30,9,6,4,10,\n29,19,4,0,20,134,19,136,16,149,23,145,0,131,2,29,\n26,13,9,5,4,10,30,1,13,28,26,4,28,5,1,3,\n0,38,26,19,37,16,220,196,252,236,212,236,16,238,17,57,\n57,17,18,57,17,18,57,49,0,47,238,246,254,244,238,16,\n205,17,57,57,23,57,48,1,75,176,12,84,88,189,0,37,\n0,64,0,1,0,37,0,37,255,192,56,17,55,56,89,182,\n121,9,122,10,122,32,3,93,37,51,21,35,19,35,53,52,\n54,63,1,62,1,53,52,38,35,34,6,7,53,62,1,51,\n50,22,21,20,6,15,1,14,1,7,14,1,21,1,135,203,\n203,197,191,56,90,90,57,51,131,108,79,179,97,94,193,103,\n184,223,72,90,88,47,39,8,6,6,254,254,1,145,154,101,\n130,86,89,53,94,49,89,110,70,67,188,57,56,194,159,76,\n137,86,86,47,53,25,21,60,52,0,0,2,0,135,254,156,\n7,113,5,162,0,11,0,76,0,149,64,50,24,12,3,9,\n169,25,21,27,3,169,76,15,52,51,15,172,48,169,55,21,\n172,36,169,55,67,77,51,52,30,26,0,40,18,6,24,12,\n40,26,43,30,40,73,18,43,42,40,73,44,61,77,16,220,\n236,252,236,16,254,253,254,60,198,16,238,17,18,57,57,49,\n0,16,212,196,252,236,16,254,237,212,198,16,197,238,50,16,\n196,238,17,57,57,48,0,75,176,9,84,75,176,12,84,91,\n75,176,16,84,91,75,176,19,84,91,75,176,20,84,91,88,\n189,0,77,255,192,0,1,0,77,0,77,0,64,56,17,55,\n56,89,64,9,15,78,31,78,47,78,63,78,4,1,93,1,\n20,22,51,50,54,53,52,38,35,34,6,1,14,1,35,34,\n38,53,52,54,51,50,22,23,53,51,17,62,1,53,52,38,\n39,38,36,35,34,6,7,6,2,21,20,18,23,22,4,51,\n50,54,55,23,6,4,35,34,36,39,38,2,53,52,18,55,\n54,36,51,50,4,23,30,1,21,16,0,5,2,250,142,124,\n123,141,144,122,121,143,2,33,60,155,103,172,215,216,171,103,\n156,59,143,146,165,63,64,104,254,213,176,123,226,96,157,177,\n115,109,105,1,20,157,129,249,104,90,125,254,217,152,185,254,\n184,128,128,134,136,126,129,1,82,189,212,1,107,123,75,79,\n254,194,254,232,2,25,143,163,164,142,140,165,164,254,72,77,\n73,249,200,200,250,75,76,131,253,32,22,223,177,107,188,80,\n131,139,65,64,102,254,181,193,159,254,234,106,104,109,87,81,\n111,97,103,131,125,125,1,73,189,182,1,74,125,127,135,174,\n160,98,230,123,254,249,254,208,6,0,0,2,0,16,0,0,\n5,104,5,213,0,2,0,10,0,186,64,65,0,17,1,0,\n4,5,4,2,17,5,5,4,1,17,10,3,10,0,17,2,\n0,3,3,10,7,17,5,4,6,17,5,5,4,9,17,3,\n10,8,17,10,3,10,66,0,3,7,149,1,3,129,9,5,\n9,8,7,6,4,3,2,1,0,9,5,10,11,16,212,196,\n23,57,49,0,47,60,228,212,236,18,57,48,75,83,88,7,\n16,5,237,7,5,237,7,16,5,237,7,5,237,7,16,8,\n237,7,16,5,237,7,16,5,237,7,16,8,237,89,34,178,\n32,12,1,1,93,64,58,15,0,88,0,118,0,112,0,140,\n0,5,7,1,8,2,6,3,9,4,22,1,25,2,86,1,\n88,2,80,12,103,1,104,2,120,1,118,2,124,3,114,4,\n119,7,120,8,135,1,136,2,128,12,152,2,153,3,150,4,\n23,93,0,93,9,1,33,1,51,1,35,3,33,3,35,2,\n188,254,238,2,37,254,123,229,2,57,210,136,253,95,136,213,\n5,14,253,25,3,174,250,43,1,127,254,129,0,3,0,201,\n0,0,4,236,5,213,0,8,0,17,0,32,0,67,64,35,\n25,0,149,10,9,149,18,129,1,149,10,173,31,17,11,8,\n2,19,25,31,5,0,14,28,22,5,25,28,46,9,0,28,\n18,4,33,16,252,236,50,252,236,212,236,17,23,57,57,57,\n49,0,47,236,236,244,236,16,238,57,48,178,15,34,1,1,\n93,1,17,33,50,54,53,52,38,35,1,17,33,50,54,53,\n52,38,35,37,33,50,22,21,20,6,7,30,1,21,20,4,\n35,33,1,147,1,68,163,157,157,163,254,188,1,43,148,145,\n145,148,254,11,2,4,231,250,128,124,149,165,254,240,251,253,\n232,2,201,253,221,135,139,140,133,2,102,254,62,111,114,113,\n112,166,192,177,137,162,20,32,203,152,200,218,0,1,0,115,\n255,227,5,39,5,240,0,25,0,54,64,26,13,161,14,174,\n10,149,17,1,161,0,174,4,149,23,145,17,140,26,7,25,\n13,0,48,20,16,26,16,252,236,50,236,49,0,16,228,244,\n236,244,236,16,238,246,238,48,180,15,27,31,27,2,1,93,\n1,21,46,1,35,32,0,17,16,0,33,50,54,55,21,14,\n1,35,32,0,17,16,0,33,50,22,5,39,102,231,130,255,\n0,254,240,1,16,1,0,130,231,102,106,237,132,254,173,254,\n122,1,134,1,83,134,237,5,98,213,95,94,254,199,254,216,\n254,217,254,199,94,95,211,72,72,1,159,1,103,1,104,1,\n159,71,0,2,0,201,0,0,5,176,5,213,0,8,0,17,\n0,46,64,21,0,149,9,129,1,149,16,8,2,16,10,0,\n5,25,13,50,0,28,9,4,18,16,252,236,244,236,17,57,\n57,57,57,49,0,47,236,244,236,48,178,96,19,1,1,93,\n1,17,51,32,0,17,16,0,33,37,33,32,0,17,16,0,\n41,1,1,147,244,1,53,1,31,254,225,254,203,254,66,1,\n159,1,178,1,150,254,104,254,80,254,97,5,47,251,119,1,\n24,1,46,1,44,1,23,166,254,151,254,128,254,126,254,150,\n0,1,0,201,0,0,4,139,5,213,0,11,0,46,64,21,\n6,149,4,2,149,0,129,8,149,4,173,10,5,1,9,7,\n3,28,0,4,12,16,252,236,50,212,196,196,49,0,47,236,\n236,244,236,16,238,48,178,31,13,1,1,93,19,33,21,33,\n17,33,21,33,17,33,21,33,201,3,176,253,26,2,199,253,\n57,2,248,252,62,5,213,170,254,70,170,253,227,170,0,1,\n0,201,0,0,4,35,5,213,0,9,0,41,64,18,6,149,\n4,2,149,0,129,4,173,8,5,1,7,3,28,0,4,10,\n16,252,236,50,212,196,49,0,47,236,244,236,16,238,48,178,\n15,11,1,1,93,19,33,21,33,17,33,21,33,17,35,201,\n3,90,253,112,2,80,253,176,202,5,213,170,254,72,170,253,\n55,0,0,1,0,115,255,227,5,139,5,240,0,29,0,57,\n64,32,0,5,27,1,149,3,27,149,8,18,161,17,174,21,\n149,14,145,8,140,30,2,0,28,17,52,4,51,24,25,11,\n16,30,16,252,236,252,228,252,196,49,0,16,228,244,236,244,\n236,16,254,212,238,17,57,57,48,37,17,33,53,33,17,6,\n4,35,32,0,17,16,0,33,50,4,23,21,38,38,35,32,\n0,17,16,0,33,50,54,4,195,254,182,2,18,117,254,230,\n160,254,162,254,117,1,139,1,94,146,1,7,111,112,252,139,\n254,238,254,237,1,19,1,18,107,168,213,1,145,166,253,127,\n83,85,1,153,1,109,1,110,1,153,72,70,215,95,96,254,\n206,254,209,254,210,254,206,37,0,1,0,201,0,0,5,59,\n5,213,0,11,0,44,64,20,8,149,2,173,4,0,129,10,\n6,7,3,28,5,56,9,1,28,0,4,12,16,252,236,50,\n252,236,50,49,0,47,60,228,50,252,236,48,178,80,13,1,\n1,93,19,51,17,33,17,51,17,35,17,33,17,35,201,202,\n2,222,202,202,253,34,202,5,213,253,156,2,100,250,43,2,\n199,253,57,0,0,1,0,201,0,0,1,147,5,213,0,3,\n0,57,183,0,175,2,1,28,0,4,4,16,252,236,49,0,\n47,236,48,1,75,176,16,84,88,189,0,4,255,192,0,1,\n0,4,0,4,0,64,56,17,55,56,89,64,13,48,5,64,\n5,80,5,96,5,143,5,159,5,6,93,19,51,17,35,201,\n202,202,5,213,250,43,0,1,255,150,254,102,1,147,5,213,\n0,11,0,77,64,19,11,2,0,7,149,5,176,0,129,12,\n5,8,6,57,1,28,0,4,12,16,252,236,228,57,57,49,\n0,16,228,252,236,17,57,57,48,1,75,176,16,84,88,189,\n0,12,255,192,0,1,0,12,0,12,0,64,56,17,55,56,\n89,64,13,48,13,64,13,80,13,96,13,143,13,159,13,6,\n93,19,51,17,16,6,43,1,53,51,50,54,53,201,202,205,\n227,77,63,134,110,5,213,250,147,254,242,244,170,150,194,0,\n0,1,0,201,0,0,5,106,5,213,0,10,0,239,64,40,\n8,17,5,6,5,7,17,6,6,5,3,17,4,5,4,2,\n17,5,5,4,66,8,5,2,3,3,0,175,9,6,5,1,\n4,6,8,1,28,0,4,11,16,252,236,50,212,196,17,57,\n49,0,47,60,236,50,23,57,48,75,83,88,7,16,4,237,\n7,16,5,237,7,16,5,237,7,16,4,237,89,34,178,8,\n3,1,1,93,64,146,20,2,1,4,2,9,8,22,2,40,\n5,40,8,55,2,54,5,52,8,71,2,70,5,67,8,85,\n2,103,2,118,2,119,5,131,2,136,5,143,8,148,2,155,\n8,231,2,21,6,3,9,5,9,6,27,3,25,7,5,10,\n3,10,7,24,3,40,5,43,6,42,7,54,4,54,5,54,\n6,53,7,48,12,65,3,64,4,69,5,64,6,64,7,64,\n12,98,3,96,4,104,5,103,7,119,5,112,12,139,3,139,\n5,142,6,143,7,143,12,154,3,157,6,157,7,182,3,181,\n7,197,3,197,7,215,3,214,7,232,3,233,4,232,5,234,\n6,247,3,248,5,249,6,44,93,113,0,93,113,19,51,17,\n1,33,9,1,33,1,17,35,201,202,2,158,1,4,253,27,\n3,26,254,246,253,51,202,5,213,253,137,2,119,253,72,252,\n227,2,207,253,49,0,0,1,0,201,0,0,4,106,5,213,\n0,5,0,37,64,12,2,149,0,129,4,1,28,3,58,0,\n4,6,16,252,236,236,49,0,47,228,236,48,64,9,48,7,\n80,7,128,3,128,4,4,1,93,19,51,17,33,21,33,201,\n202,2,215,252,95,5,213,250,213,170,0,1,0,201,0,0,\n6,31,5,213,0,12,0,191,64,52,3,17,7,8,7,2,\n17,1,2,8,8,7,2,17,3,2,9,10,9,1,17,10,\n10,9,66,10,7,2,3,8,3,0,175,8,11,5,9,8,\n3,2,1,5,10,6,28,4,62,10,28,0,4,13,16,252,\n236,252,236,17,23,57,49,0,47,60,196,236,50,17,23,57,\n48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,\n7,16,5,237,89,34,178,112,14,1,1,93,64,86,3,7,\n15,8,15,9,2,10,21,2,20,7,19,10,38,2,38,7,\n32,7,38,10,32,10,52,7,53,10,105,2,124,2,123,7,\n121,10,128,2,130,7,130,10,144,2,22,4,1,11,3,19,\n1,27,3,35,1,44,3,39,8,40,9,52,1,60,3,86,\n8,89,9,101,8,106,9,118,8,121,9,129,1,141,3,149,\n1,155,3,20,93,0,93,19,33,9,1,33,17,35,17,1,\n35,1,17,35,201,1,45,1,125,1,127,1,45,197,254,127,\n203,254,127,196,5,213,252,8,3,248,250,43,5,31,252,0,\n4,0,250,225,0,1,0,201,0,0,5,51,5,213,0,9,\n0,121,64,30,7,17,1,2,1,2,17,6,7,6,66,7,\n2,3,0,175,8,5,6,1,7,2,28,4,54,7,28,0,\n4,10,16,252,236,252,236,17,57,57,49,0,47,60,236,50,\n57,57,48,75,83,88,7,16,4,237,7,16,4,237,89,34,\n178,31,11,1,1,93,64,48,54,2,56,7,72,2,71,7,\n105,2,102,7,128,2,7,6,1,9,6,21,1,26,6,70,\n1,73,6,87,1,88,6,101,1,105,6,121,6,133,1,138,\n6,149,1,154,6,159,11,16,93,0,93,19,33,1,17,51,\n17,33,1,17,35,201,1,16,2,150,196,254,240,253,106,196,\n5,213,251,31,4,225,250,43,4,225,251,31,0,2,0,115,\n255,227,5,217,5,240,0,11,0,23,0,35,64,19,6,149,\n18,0,149,12,145,18,140,24,9,25,15,51,3,25,21,16,\n24,16,252,236,252,236,49,0,16,228,244,236,16,238,48,1,\n34,0,17,16,0,51,50,0,17,16,0,39,32,0,17,16,\n0,33,32,0,17,16,0,3,39,220,254,253,1,3,220,220,\n1,1,254,255,220,1,58,1,120,254,136,254,198,254,197,254,\n135,1,121,5,76,254,184,254,229,254,230,254,184,1,72,1,\n26,1,27,1,72,164,254,91,254,158,254,159,254,91,1,164,\n1,98,1,98,1,165,0,2,0,201,0,0,4,141,5,213,\n0,8,0,19,0,58,64,24,1,149,16,0,149,9,129,18,\n16,10,8,2,4,0,5,25,13,63,17,0,28,9,4,20,\n16,252,236,50,252,236,17,23,57,49,0,47,244,236,212,236,\n48,64,11,15,21,31,21,63,21,95,21,175,21,5,1,93,\n1,17,51,50,54,53,52,38,35,37,33,50,4,21,20,4,\n43,1,17,35,1,147,254,141,154,154,141,254,56,1,200,251,\n1,1,254,255,251,254,202,5,47,253,207,146,135,134,146,166,\n227,219,221,226,253,168,0,2,0,115,254,248,5,217,5,240,\n0,11,0,29,0,82,64,42,17,16,2,15,1,12,13,12,\n14,1,13,13,12,66,15,30,12,6,149,18,0,149,24,145,\n18,140,13,30,13,27,15,12,3,9,25,27,51,3,25,21,\n16,30,16,252,236,252,236,17,57,57,17,57,49,0,16,196,\n228,244,236,16,238,57,18,57,48,75,83,88,7,16,5,237,\n7,16,5,237,23,57,89,34,1,34,0,17,16,0,51,50,\n0,17,16,0,19,1,35,39,6,6,35,32,0,17,16,0,\n33,32,0,17,16,2,3,39,220,254,253,1,3,220,220,1,\n1,254,255,63,1,10,244,221,33,35,16,254,197,254,135,1,\n121,1,59,1,58,1,120,209,5,76,254,184,254,229,254,230,\n254,184,1,72,1,26,1,27,1,72,250,207,254,221,239,2,\n2,1,165,1,97,1,98,1,165,254,91,254,158,254,252,254,\n142,0,0,2,0,201,0,0,5,84,5,213,0,19,0,28,\n0,177,64,53,9,8,7,3,10,6,17,3,4,3,5,17,\n4,4,3,66,6,4,0,21,3,4,21,149,9,20,149,13,\n129,11,4,5,6,3,17,9,0,28,22,14,5,10,25,25,\n4,17,63,20,10,28,12,4,29,16,252,236,50,252,196,236,\n17,23,57,17,57,57,57,49,0,47,60,244,236,212,236,18,\n57,18,57,18,57,48,75,83,88,7,16,5,237,7,16,5,\n237,17,23,57,89,34,178,64,30,1,1,93,64,66,122,19,\n1,5,0,5,1,5,2,6,3,7,4,21,0,21,1,20,\n2,22,3,23,4,37,0,37,1,37,2,38,3,39,6,38,\n7,38,8,38,9,32,30,54,1,54,2,70,1,70,2,104,\n5,117,4,117,5,119,19,136,6,136,7,152,6,152,7,31,\n93,0,93,1,30,1,23,19,35,3,46,1,43,1,17,35,\n17,33,32,22,21,20,6,1,17,51,50,54,53,52,38,35,\n3,141,65,123,62,205,217,191,74,139,120,220,202,1,200,1,\n0,252,131,253,137,254,146,149,149,146,2,188,22,144,126,254,\n104,1,127,150,98,253,137,5,213,214,216,141,186,2,79,253,\n238,135,131,131,133,0,0,1,0,135,255,227,4,162,5,240,\n0,39,0,126,64,60,13,12,2,14,11,2,30,31,30,8,\n9,2,7,10,2,31,31,30,66,10,11,30,31,4,21,1,\n0,21,161,20,148,24,149,17,4,149,0,148,37,145,17,140,\n40,30,10,11,31,27,7,0,34,27,25,14,45,7,25,20,\n34,40,16,220,196,236,252,236,228,17,18,57,57,57,57,49,\n0,16,228,244,228,236,16,238,246,238,16,198,17,23,57,48,\n75,83,88,7,16,14,237,17,23,57,7,16,14,237,17,23,\n57,89,34,178,15,41,1,1,93,182,31,41,47,41,79,41,\n3,93,1,21,46,1,35,34,6,21,20,22,31,1,30,1,\n21,20,4,33,34,38,39,53,30,1,51,50,54,53,52,38,\n47,1,46,1,53,52,36,51,50,22,4,72,115,204,95,165,\n179,119,166,122,226,215,254,221,254,231,106,239,128,123,236,114,\n173,188,135,154,123,226,202,1,23,245,105,218,5,164,197,55,\n54,128,118,99,101,31,25,43,217,182,217,224,48,47,208,69,\n70,136,126,110,124,31,24,45,192,171,198,228,38,0,0,1,\n255,250,0,0,4,233,5,213,0,7,0,74,64,14,6,2,\n149,0,129,4,1,64,3,28,0,64,5,8,16,212,228,252,\n228,49,0,47,244,236,50,48,1,75,176,10,84,88,189,0,\n8,0,64,0,1,0,8,0,8,255,192,56,17,55,56,89,\n64,19,0,9,31,0,16,1,16,2,31,7,16,9,64,9,\n112,9,159,9,9,93,3,33,21,33,17,35,17,33,6,4,\n239,253,238,203,253,238,5,213,170,250,213,5,43,0,0,1,\n0,178,255,227,5,41,5,213,0,17,0,75,64,22,8,2,\n17,11,0,5,149,14,140,9,0,129,18,8,28,10,56,1,\n28,0,65,18,16,252,236,252,236,49,0,16,228,50,244,236,\n17,57,57,57,57,48,1,75,176,16,84,88,189,0,18,0,\n64,0,1,0,18,0,18,255,192,56,17,55,56,89,182,31,\n19,143,19,159,19,3,93,19,51,17,20,22,51,50,54,53,\n17,51,17,16,0,33,32,0,17,178,203,174,195,194,174,203,\n254,223,254,230,254,229,254,223,5,213,252,117,240,211,211,240,\n3,139,252,92,254,220,254,214,1,42,1,36,0,1,0,16,\n0,0,5,104,5,213,0,6,0,183,64,39,4,17,5,6,\n5,3,17,2,3,6,6,5,3,17,4,3,0,1,0,2,\n17,1,1,0,66,3,4,1,175,0,6,4,3,2,0,5,\n5,1,7,16,212,196,23,57,49,0,47,236,50,57,48,75,\n83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,\n5,237,89,34,178,80,8,1,1,93,64,98,0,3,42,3,\n71,4,71,5,90,3,125,3,131,3,7,6,0,7,2,8,\n4,9,6,21,1,20,2,26,4,26,5,42,0,38,1,38,\n2,41,4,41,5,37,6,32,8,56,0,51,1,51,2,60,\n4,60,5,55,6,72,0,69,1,69,2,73,4,73,5,71,\n6,89,0,86,6,102,2,105,4,105,5,122,0,118,1,118,\n2,121,4,121,5,117,6,128,8,152,0,151,6,41,93,0,\n93,33,1,51,9,1,51,1,2,74,253,198,211,1,217,1,\n218,210,253,199,5,213,251,23,4,233,250,43,0,1,0,68,\n0,0,7,166,5,213,0,12,1,123,64,73,5,26,6,5,\n9,10,9,4,26,10,9,3,26,10,11,10,2,26,1,2,\n11,11,10,6,17,7,8,7,5,17,4,5,8,8,7,2,\n17,3,2,12,0,12,1,17,0,0,12,66,10,5,2,3,\n6,3,0,175,11,8,12,11,10,9,8,6,5,4,3,2,\n1,11,7,0,13,16,212,204,23,57,49,0,47,60,236,50,\n50,23,57,48,75,83,88,7,16,5,237,7,16,8,237,7,\n16,8,237,7,16,5,237,7,16,8,237,7,16,5,237,7,\n5,237,7,16,8,237,89,34,178,0,14,1,1,93,64,242,\n6,2,6,5,2,10,0,10,0,10,18,10,40,5,36,10,\n32,10,62,2,62,5,52,10,48,10,76,2,77,5,66,10,\n64,10,89,2,106,2,107,5,103,10,96,10,123,2,127,2,\n124,5,127,5,128,10,150,2,149,5,29,7,0,9,2,8,\n3,0,4,6,5,0,5,0,6,1,7,4,8,0,8,7,\n9,0,9,4,10,10,12,0,14,26,3,21,4,21,8,25,\n12,16,14,32,4,33,5,32,6,32,7,32,8,35,9,36,\n10,37,11,32,14,32,14,60,2,58,3,53,4,51,5,48,\n8,54,9,57,11,63,12,48,14,70,0,70,1,74,2,64,\n4,69,5,64,5,66,6,66,7,66,8,64,8,64,9,68,\n10,77,12,64,14,64,14,88,2,86,8,89,12,80,14,102,\n2,103,3,97,4,98,5,96,6,96,7,96,8,100,9,100,\n10,100,11,119,0,118,1,123,2,120,3,119,4,116,5,121,\n6,121,7,119,8,112,8,120,12,127,12,127,14,134,2,135,\n3,136,4,137,5,133,9,138,11,143,14,151,4,159,14,175,\n14,91,93,0,93,19,51,9,1,51,9,1,51,1,35,9,\n1,35,68,204,1,58,1,57,227,1,58,1,57,205,254,137,\n254,254,197,254,194,254,5,213,251,18,4,238,251,18,4,238,\n250,43,5,16,250,240,0,1,0,61,0,0,5,59,5,213,\n0,11,1,93,64,70,9,17,10,11,10,8,17,7,8,11,\n11,10,8,17,9,8,5,6,5,7,17,6,6,5,3,17,\n4,5,4,2,17,1,2,5,5,4,2,17,3,2,11,0,\n11,1,17,0,0,11,66,11,8,5,2,4,3,0,175,9,\n6,11,8,5,2,4,0,4,6,0,10,12,16,212,196,220,\n196,17,23,57,49,0,47,60,236,50,23,57,48,75,83,88,\n7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,\n7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,\n89,34,1,75,176,12,84,75,176,13,84,91,75,176,14,84,\n91,88,189,0,12,255,192,0,1,0,12,0,12,0,64,56,\n17,55,56,89,64,184,7,2,8,8,22,2,25,8,23,11,\n39,8,39,11,52,2,56,8,54,11,75,8,88,5,91,8,\n102,2,107,8,119,2,119,11,134,2,128,2,135,5,139,8,\n133,11,148,2,144,2,151,5,157,8,150,11,27,6,1,9,\n3,8,7,7,9,22,1,25,3,25,7,23,9,16,13,38,\n1,40,2,41,3,38,5,40,7,39,9,41,11,32,13,53,\n0,52,1,60,3,59,4,58,6,59,7,52,9,52,10,56,\n11,63,13,72,9,79,13,88,11,95,13,101,0,101,1,106,\n3,106,4,104,5,105,6,105,7,108,9,108,10,120,3,121,\n6,121,7,120,8,125,9,127,10,120,11,128,0,128,1,131,\n2,136,3,133,5,132,8,131,11,143,13,144,0,144,1,148,\n2,151,5,151,6,149,8,147,11,159,13,175,13,64,93,0,\n93,19,51,9,1,51,9,1,35,9,1,35,1,129,217,1,\n115,1,117,217,254,32,2,0,217,254,92,254,89,218,2,21,\n5,213,253,213,2,43,253,51,252,248,2,123,253,133,3,29,\n0,1,255,252,0,0,4,231,5,213,0,8,0,148,64,40,\n3,17,4,5,4,2,17,1,2,5,5,4,2,17,3,2,\n8,0,8,1,17,0,0,8,66,2,3,0,175,6,2,7,\n4,64,5,28,0,64,7,9,16,212,228,252,228,18,57,49,\n0,47,236,50,57,48,75,83,88,7,16,5,237,7,16,8,\n237,7,16,8,237,7,16,5,237,89,34,178,0,10,1,1,\n93,64,60,5,2,20,2,53,2,48,2,48,5,48,8,70,\n2,64,2,64,5,64,8,81,2,81,5,81,8,101,2,132,\n2,147,2,16,22,1,26,3,31,10,38,1,41,3,55,1,\n56,3,64,10,103,1,104,3,120,3,112,10,159,10,13,93,\n0,93,3,51,9,1,51,1,17,35,17,4,217,1,158,1,\n155,217,253,240,203,5,213,253,154,2,102,252,242,253,57,2,\n199,0,0,1,0,92,0,0,5,31,5,213,0,9,0,155,\n64,27,3,17,7,8,7,8,17,2,3,2,66,8,149,0,\n129,3,149,5,8,3,0,1,66,4,0,6,10,16,220,196,\n212,228,17,57,57,49,0,47,236,244,236,48,75,83,88,7,\n16,5,237,7,16,5,237,89,34,1,75,176,9,84,75,176,\n10,84,91,88,189,0,10,0,64,0,1,0,10,0,10,255,\n192,56,17,55,56,89,64,64,5,2,10,7,24,7,41,2,\n38,7,56,7,72,2,71,7,72,8,9,5,3,11,8,0,\n11,22,3,26,8,16,11,47,11,53,3,57,8,63,11,71,\n3,74,8,79,11,85,3,89,8,102,3,105,8,111,11,119,\n3,120,8,127,11,159,11,22,93,0,93,19,33,21,1,33,\n21,33,53,1,33,115,4,149,252,80,3,199,251,61,3,176,\n252,103,5,213,154,251,111,170,154,4,145,0,0,1,0,176,\n254,242,2,88,6,20,0,7,0,83,64,15,4,169,6,178,\n2,169,0,177,8,5,1,3,67,0,8,16,220,252,204,50,\n49,0,16,252,236,244,236,48,1,75,176,12,84,88,189,0,\n8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,89,\n1,75,176,18,84,75,176,19,84,91,88,189,0,8,0,64,\n0,1,0,8,0,8,255,192,56,17,55,56,89,19,33,21,\n35,17,51,21,33,176,1,168,240,240,254,88,6,20,143,249,\n252,143,0,1,0,0,255,66,2,178,5,213,0,3,0,45,\n64,20,2,26,1,1,0,0,26,3,3,2,66,1,159,0,\n129,4,2,0,1,3,47,196,57,57,49,0,16,244,236,48,\n75,83,88,7,16,5,237,7,16,5,237,89,34,19,1,35,\n1,170,2,8,170,253,248,5,213,249,109,6,147,0,0,1,\n0,199,254,242,2,111,6,20,0,7,0,60,64,16,3,169,\n1,178,5,169,0,177,8,0,67,4,6,2,4,8,16,252,\n60,220,236,49,0,16,252,236,244,236,48,1,75,176,15,84,\n75,176,16,84,91,88,189,0,8,255,192,0,1,0,8,0,\n8,0,64,56,17,55,56,89,1,17,33,53,51,17,35,53,\n2,111,254,88,239,239,6,20,248,222,143,6,4,143,0,1,\n0,217,3,168,5,219,5,213,0,6,0,24,64,10,3,4,\n1,0,129,7,3,1,5,7,16,220,204,57,49,0,16,244,\n204,50,57,48,1,1,35,1,1,35,1,3,188,2,31,201,\n254,72,254,72,201,2,31,5,213,253,211,1,139,254,117,2,\n45,0,0,1,255,236,254,29,4,20,254,172,0,3,0,15,\n181,0,169,1,0,2,4,16,196,196,49,0,212,236,48,1,\n21,33,53,4,20,251,216,254,172,143,143,0,0,1,0,170,\n4,240,2,137,6,102,0,3,0,49,64,9,1,180,0,179,\n4,3,68,1,4,16,220,236,49,0,16,244,236,48,0,75,\n176,9,84,75,176,14,84,91,88,189,0,4,255,192,0,1,\n0,4,0,4,0,64,56,17,55,56,89,9,1,35,1,1,\n111,1,26,153,254,186,6,102,254,138,1,118,0,2,0,123,\n255,227,4,45,4,123,0,10,0,37,0,188,64,39,25,31,\n11,23,9,14,0,169,23,6,185,14,17,32,134,31,186,28,\n185,35,184,17,140,23,12,0,23,3,24,13,9,8,11,31,\n3,8,20,69,38,16,252,236,204,212,236,50,50,17,57,57,\n49,0,47,196,228,244,252,244,236,16,198,238,16,238,17,57,\n17,57,18,57,48,64,110,48,29,48,30,48,31,48,32,48,\n33,48,34,63,39,64,29,64,30,64,31,64,32,64,33,64,\n34,80,29,80,30,80,31,80,32,80,33,80,34,80,39,112,\n39,133,29,135,30,135,31,135,32,135,33,133,34,144,39,160,\n39,240,39,30,48,30,48,31,48,32,48,33,64,30,64,31,\n64,32,64,33,80,30,80,31,80,32,80,33,96,30,96,31,\n96,32,96,33,112,30,112,31,112,32,112,33,128,30,128,31,\n128,32,128,33,24,93,1,93,1,34,6,21,20,22,51,50,\n54,61,1,55,17,35,53,14,1,35,34,38,53,52,54,51,\n33,53,52,38,35,34,6,7,53,62,1,51,50,22,2,190,\n223,172,129,111,153,185,184,184,63,188,136,172,203,253,251,1,\n2,167,151,96,182,84,101,190,90,243,240,2,51,102,123,98,\n115,217,180,41,76,253,129,170,102,97,193,162,189,192,18,127,\n139,46,46,170,39,39,252,0,0,2,0,186,255,227,4,164,\n6,20,0,11,0,28,0,56,64,25,3,185,12,15,9,185,\n24,21,140,15,184,27,151,25,0,18,18,71,24,12,6,8,\n26,70,29,16,252,236,50,50,244,236,49,0,47,236,228,244,\n196,236,16,198,238,48,182,96,30,128,30,160,30,3,1,93,\n1,52,38,35,34,6,21,20,22,51,50,54,1,62,1,51,\n50,18,17,16,2,35,34,38,39,21,35,17,51,3,229,167,\n146,146,167,167,146,146,167,253,142,58,177,123,204,255,255,204,\n123,177,58,185,185,2,47,203,231,231,203,203,231,231,2,82,\n100,97,254,188,254,248,254,248,254,188,97,100,168,6,20,0,\n0,1,0,113,255,227,3,231,4,123,0,25,0,63,64,27,\n0,134,1,136,4,14,134,13,136,10,185,17,4,185,23,184,\n17,140,26,7,18,13,0,72,20,69,26,16,252,228,50,236,\n49,0,16,228,244,236,16,254,244,238,16,245,238,48,64,11,\n15,27,16,27,128,27,144,27,160,27,5,1,93,1,21,46,\n1,35,34,6,21,20,22,51,50,54,55,21,14,1,35,34,\n0,17,16,0,33,50,22,3,231,78,157,80,179,198,198,179,\n80,157,78,77,165,93,253,254,214,1,45,1,6,85,162,4,\n53,172,43,43,227,205,205,227,43,43,170,36,36,1,62,1,\n14,1,18,1,58,35,0,2,0,113,255,227,4,90,6,20,\n0,16,0,28,0,56,64,25,26,185,0,14,20,185,5,8,\n140,14,184,1,151,3,23,4,0,8,2,71,17,18,11,69,\n29,16,252,236,244,236,50,50,49,0,47,236,228,244,196,236,\n16,196,238,48,182,96,30,128,30,160,30,3,1,93,1,17,\n51,17,35,53,14,1,35,34,2,17,16,18,51,50,22,1,\n20,22,51,50,54,53,52,38,35,34,6,3,162,184,184,58,\n177,124,203,255,255,203,124,177,253,199,167,146,146,168,168,146,\n146,167,3,182,2,94,249,236,168,100,97,1,68,1,8,1,\n8,1,68,97,254,21,203,231,231,203,203,231,231,0,0,2,\n0,113,255,227,4,127,4,123,0,20,0,27,0,112,64,36,\n0,21,1,9,134,8,136,5,21,169,1,5,185,12,1,187,\n24,185,18,184,12,140,28,27,21,2,8,21,8,0,75,2,\n18,15,69,28,16,252,236,244,236,196,17,18,57,49,0,16,\n228,244,236,228,16,238,16,238,16,244,238,17,18,57,48,64,\n41,63,29,112,29,160,29,208,29,240,29,5,63,0,63,1,\n63,2,63,21,63,27,5,44,7,47,8,47,9,44,10,111,\n0,111,1,111,2,111,21,111,27,9,93,113,1,93,1,21,\n33,30,1,51,50,54,55,21,14,1,35,32,0,17,16,0,\n51,50,0,7,46,1,35,34,6,7,4,127,252,178,12,205,\n183,106,199,98,99,208,107,254,244,254,199,1,41,252,226,1,\n7,184,2,165,136,154,185,14,2,94,90,190,199,52,52,174,\n42,44,1,56,1,10,1,19,1,67,254,221,196,151,180,174,\n158,0,0,1,0,47,0,0,2,248,6,20,0,19,0,112,\n64,28,5,16,1,12,8,169,6,1,135,0,151,14,6,188,\n10,2,19,7,0,7,9,5,8,13,15,11,76,20,16,252,\n60,196,252,60,196,196,18,57,57,49,0,47,228,50,252,236,\n16,238,50,18,57,57,48,1,75,176,10,84,88,189,0,20,\n255,192,0,1,0,20,0,20,0,64,56,17,55,56,89,1,\n75,176,14,84,88,189,0,20,0,64,0,1,0,20,0,20,\n255,192,56,17,55,56,89,182,64,21,80,21,160,21,3,93,\n1,21,35,34,6,29,1,33,21,33,17,35,17,35,53,51,\n53,52,54,51,2,248,176,99,77,1,47,254,209,185,176,176,\n174,189,6,20,153,80,104,99,143,252,47,3,209,143,78,187,\n171,0,0,2,0,113,254,86,4,90,4,123,0,11,0,40,\n0,74,64,35,25,12,29,9,18,134,19,22,185,15,3,185,\n38,35,184,39,188,9,185,15,189,26,29,38,25,0,8,12,\n71,6,18,18,32,69,41,16,252,196,236,244,236,50,50,49,\n0,47,196,228,236,228,244,196,236,16,254,213,238,17,18,57,\n57,48,182,96,42,128,42,160,42,3,1,93,1,52,38,35,\n34,6,21,20,22,51,50,54,23,16,2,33,34,38,39,53,\n30,1,51,50,54,61,1,14,1,35,34,2,17,16,18,51,\n50,22,23,53,51,3,162,165,149,148,165,165,148,149,165,184,\n254,254,250,97,172,81,81,158,82,181,180,57,178,124,206,252,\n252,206,124,178,57,184,2,61,200,220,220,200,199,220,220,235,\n254,226,254,233,29,30,179,44,42,189,191,91,99,98,1,58,\n1,3,1,4,1,58,98,99,170,0,0,1,0,186,0,0,\n4,100,6,20,0,19,0,52,64,25,3,9,0,3,14,1,\n6,135,14,17,184,12,151,10,1,2,8,0,78,13,9,8,\n11,70,20,16,252,236,50,244,236,49,0,47,60,236,244,196,\n236,17,18,23,57,48,178,96,21,1,1,93,1,17,35,17,\n52,38,35,34,6,21,17,35,17,51,17,62,1,51,50,22,\n4,100,184,124,124,149,172,185,185,66,179,117,193,198,2,164,\n253,92,2,158,159,158,190,164,253,135,6,20,253,158,101,100,\n239,0,0,2,0,193,0,0,1,121,6,20,0,3,0,7,\n0,43,64,14,6,190,4,177,0,188,2,5,1,8,4,0,\n70,8,16,252,60,236,50,49,0,47,228,252,236,48,64,11,\n16,9,64,9,80,9,96,9,112,9,5,1,93,19,51,17,\n35,17,51,21,35,193,184,184,184,184,4,96,251,160,6,20,\n233,0,0,2,255,219,254,86,1,121,6,20,0,11,0,15,\n0,68,64,28,11,2,7,0,14,190,12,7,135,5,189,0,\n188,12,177,16,8,16,5,6,79,13,1,8,12,0,70,16,\n16,252,60,236,50,228,57,18,57,49,0,16,236,228,244,236,\n16,238,17,18,57,57,48,64,11,16,17,64,17,80,17,96,\n17,112,17,5,1,93,19,51,17,20,6,43,1,53,51,50,\n54,53,17,51,21,35,193,184,163,181,70,49,105,76,184,184,\n4,96,251,140,214,192,156,97,153,6,40,233,0,1,0,186,\n0,0,4,156,6,20,0,10,0,188,64,41,8,17,5,6,\n5,7,17,6,6,5,3,17,4,5,4,2,17,5,5,4,\n66,8,5,2,3,3,188,0,151,9,6,5,1,4,6,8,\n1,8,0,70,11,16,252,236,50,212,196,17,57,49,0,47,\n60,236,228,23,57,48,75,83,88,7,16,4,237,7,16,5,\n237,7,16,5,237,7,16,4,237,89,34,178,16,12,1,1,\n93,64,95,4,2,10,8,22,2,39,2,41,5,43,8,86,\n2,102,2,103,8,115,2,119,5,130,2,137,5,142,8,147,\n2,150,5,151,8,163,2,18,9,5,9,6,2,11,3,10,\n7,40,3,39,4,40,5,43,6,43,7,64,12,104,3,96,\n12,137,3,133,4,137,5,141,6,143,7,154,3,151,7,170,\n3,167,5,182,7,197,7,214,7,247,3,240,3,247,4,240,\n4,26,93,113,0,93,19,51,17,1,51,9,1,35,1,17,\n35,186,185,2,37,235,253,174,2,107,240,253,199,185,6,20,\n252,105,1,227,253,244,253,172,2,35,253,221,0,1,0,193,\n0,0,1,121,6,20,0,3,0,34,183,0,151,2,1,8,\n0,70,4,16,252,236,49,0,47,236,48,64,13,16,5,64,\n5,80,5,96,5,112,5,240,5,6,1,93,19,51,17,35,\n193,184,184,6,20,249,236,0,0,1,0,186,0,0,7,29,\n4,123,0,34,0,90,64,38,6,18,9,24,15,0,6,29,\n7,21,12,135,29,32,3,184,27,188,25,16,7,0,17,15,\n8,8,6,80,17,8,15,80,28,24,8,26,70,35,16,252,\n236,50,252,252,252,236,17,18,57,49,0,47,60,60,228,244,\n60,196,236,50,17,18,23,57,48,64,19,48,36,80,36,112,\n36,144,36,160,36,160,36,191,36,223,36,255,36,9,1,93,\n1,62,1,51,50,22,21,17,35,17,52,38,35,34,6,21,\n17,35,17,52,38,35,34,6,21,17,35,17,51,21,62,1,\n51,50,22,4,41,69,192,130,175,190,185,114,117,143,166,185,\n114,119,141,166,185,185,63,176,121,122,171,3,137,124,118,245,\n226,253,92,2,158,161,156,190,164,253,135,2,158,162,155,191,\n163,253,135,4,96,174,103,98,124,0,0,1,0,186,0,0,\n4,100,4,123,0,19,0,54,64,25,3,9,0,3,14,1,\n6,135,14,17,184,12,188,10,1,2,8,0,78,13,9,8,\n11,70,20,16,252,236,50,244,236,49,0,47,60,228,244,196,\n236,17,18,23,57,48,180,96,21,207,21,2,1,93,1,17,\n35,17,52,38,35,34,6,21,17,35,17,51,21,62,1,51,\n50,22,4,100,184,124,124,149,172,185,185,66,179,117,193,198,\n2,164,253,92,2,158,159,158,190,164,253,135,4,96,174,101,\n100,239,0,2,0,113,255,227,4,117,4,123,0,11,0,23,\n0,74,64,19,6,185,18,0,185,12,184,18,140,24,9,18,\n15,81,3,18,21,69,24,16,252,236,244,236,49,0,16,228,\n244,236,16,238,48,64,35,63,25,123,0,123,6,127,7,127,\n8,127,9,127,10,127,11,123,12,127,13,127,14,127,15,127,\n16,127,17,123,18,160,25,240,25,17,1,93,1,34,6,21,\n20,22,51,50,54,53,52,38,39,50,0,17,16,0,35,34,\n0,17,16,0,2,115,148,172,171,149,147,172,172,147,240,1,\n18,254,238,240,241,254,239,1,17,3,223,231,201,201,231,232,\n200,199,233,156,254,200,254,236,254,237,254,199,1,57,1,19,\n1,20,1,56,0,2,0,186,254,86,4,164,4,123,0,16,\n0,28,0,62,64,27,26,185,0,14,20,185,5,8,184,14,\n140,1,189,3,188,29,17,18,11,71,23,4,0,8,2,70,\n29,16,252,236,50,50,244,236,49,0,16,228,228,228,244,196,\n236,16,196,238,48,64,9,96,30,128,30,160,30,224,30,4,\n1,93,37,17,35,17,51,21,62,1,51,50,18,17,16,2,\n35,34,38,1,52,38,35,34,6,21,20,22,51,50,54,1,\n115,185,185,58,177,123,204,255,255,204,123,177,2,56,167,146,\n146,167,167,146,146,167,168,253,174,6,10,170,100,97,254,188,\n254,248,254,248,254,188,97,1,235,203,231,231,203,203,231,231,\n0,2,0,113,254,86,4,90,4,123,0,11,0,28,0,62,\n64,27,3,185,12,15,9,185,24,21,184,15,140,27,189,25,\n188,29,24,12,6,8,26,71,0,18,18,69,29,16,252,236,\n244,236,50,50,49,0,16,228,228,228,244,196,236,16,198,238,\n48,64,9,96,30,128,30,160,30,224,30,4,1,93,1,20,\n22,51,50,54,53,52,38,35,34,6,1,14,1,35,34,2,\n17,16,18,51,50,22,23,53,51,17,35,1,47,167,146,146,\n168,168,146,146,167,2,115,58,177,124,203,255,255,203,124,177,\n58,184,184,2,47,203,231,231,203,203,231,231,253,174,100,97,\n1,68,1,8,1,8,1,68,97,100,170,249,246,0,0,1,\n0,186,0,0,3,74,4,123,0,17,0,48,64,20,6,11,\n7,0,17,11,3,135,14,184,9,188,7,10,6,8,0,8,\n70,18,16,252,196,236,50,49,0,47,228,244,236,196,212,204,\n17,18,57,48,180,80,19,159,19,2,1,93,1,46,1,35,\n34,6,21,17,35,17,51,21,62,1,51,50,22,23,3,74,\n31,73,44,156,167,185,185,58,186,133,19,46,28,3,180,18,\n17,203,190,253,178,4,96,174,102,99,5,5,0,1,0,111,\n255,227,3,199,4,123,0,39,0,231,64,60,13,12,2,14,\n11,83,31,30,8,9,2,7,10,83,30,31,30,66,10,11,\n30,31,4,21,0,134,1,137,4,20,134,21,137,24,185,17,\n4,185,37,184,17,140,40,30,10,11,31,27,7,0,82,27,\n8,14,7,8,20,34,69,40,16,252,196,236,212,236,228,17,\n18,57,57,57,57,49,0,16,228,244,236,16,254,245,238,16,\n245,238,18,23,57,48,75,83,88,7,16,14,237,17,23,57,\n7,14,237,17,23,57,89,34,178,0,39,1,1,93,64,109,\n28,10,28,11,28,12,46,9,44,10,44,11,44,12,59,9,\n59,10,59,11,59,12,11,32,0,32,1,36,2,40,10,40,\n11,42,19,47,20,47,21,42,22,40,30,40,31,41,32,41,\n33,36,39,134,10,134,11,134,12,134,13,18,0,0,0,1,\n2,2,6,10,6,11,3,12,3,13,3,14,3,15,3,16,\n3,25,3,26,3,27,3,28,4,29,9,39,47,41,63,41,\n95,41,127,41,128,41,144,41,160,41,240,41,24,93,0,93,\n113,1,21,46,1,35,34,6,21,20,22,31,1,30,1,21,\n20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,47,\n1,46,1,53,52,54,51,50,22,3,139,78,168,90,137,137,\n98,148,63,196,165,247,216,90,195,108,102,198,97,130,140,101,\n171,64,171,152,224,206,102,180,4,63,174,40,40,84,84,64,\n73,33,14,42,153,137,156,182,35,35,190,53,53,89,81,75,\n80,37,15,36,149,130,158,172,30,0,0,1,0,55,0,0,\n2,242,5,158,0,19,0,56,64,25,14,5,8,15,3,169,\n0,17,1,188,8,135,10,11,8,9,2,4,0,8,16,18,\n14,70,20,16,252,60,196,252,60,196,50,57,57,49,0,47,\n236,244,60,196,236,50,17,57,57,48,178,175,21,1,1,93,\n1,17,33,21,33,17,20,22,59,1,21,35,34,38,53,17,\n35,53,51,17,1,119,1,123,254,133,75,115,189,189,213,162,\n135,135,5,158,254,194,143,253,160,137,78,154,159,210,2,96,\n143,1,62,0,0,1,0,174,255,227,4,88,4,96,0,19,\n0,54,64,25,3,9,0,3,14,1,6,135,14,17,140,10,\n1,188,12,13,9,8,11,78,2,8,0,70,20,16,252,236,\n244,236,50,49,0,47,228,50,244,196,236,17,18,23,57,48,\n180,96,21,207,21,2,1,93,19,17,51,17,20,22,51,50,\n54,53,17,51,17,35,53,14,1,35,34,38,174,184,124,124,\n149,173,184,184,67,177,117,193,200,1,186,2,166,253,97,159,\n159,190,164,2,123,251,160,172,102,99,240,0,0,1,0,61,\n0,0,4,127,4,96,0,6,1,18,64,39,3,17,4,5,\n4,2,17,1,2,5,5,4,2,17,3,2,6,0,6,1,\n17,0,0,6,66,2,3,0,191,5,6,5,3,2,1,5,\n4,0,7,16,212,196,23,57,49,0,47,236,50,57,48,75,\n83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,\n5,237,89,34,1,75,176,10,84,88,189,0,7,255,192,0,\n1,0,7,0,7,0,64,56,17,55,56,89,1,75,176,20,\n84,75,176,21,84,91,88,189,0,7,0,64,0,1,0,7,\n0,7,255,192,56,17,55,56,89,64,142,72,2,106,2,123,\n2,127,2,134,2,128,2,145,2,164,2,8,6,0,6,1,\n9,3,9,4,21,0,21,1,26,3,26,4,38,0,38,1,\n41,3,41,4,32,8,53,0,53,1,58,3,58,4,48,8,\n70,0,70,1,73,3,73,4,70,5,72,6,64,8,86,0,\n86,1,89,3,89,4,80,8,102,0,102,1,105,3,105,4,\n103,5,104,6,96,8,117,0,116,1,123,3,123,4,117,5,\n122,6,133,0,133,1,137,3,137,4,137,5,134,6,150,0,\n150,1,151,2,154,3,152,4,152,5,151,6,168,5,167,6,\n176,8,192,8,223,8,255,8,62,93,0,93,19,51,9,1,\n51,1,35,61,195,1,94,1,94,195,254,92,250,4,96,252,\n84,3,172,251,160,0,0,1,0,86,0,0,6,53,4,96,\n0,12,2,1,64,73,5,85,6,5,9,10,9,4,85,10,\n9,3,85,10,11,10,2,85,1,2,11,11,10,6,17,7,\n8,7,5,17,4,5,8,8,7,2,17,3,2,12,0,12,\n1,17,0,0,12,66,10,5,2,3,6,3,0,191,11,8,\n12,11,10,9,8,6,5,4,3,2,1,11,7,0,13,16,\n212,204,23,57,49,0,47,60,236,50,50,23,57,48,75,83,\n88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,\n237,7,16,8,237,7,16,5,237,7,5,237,7,16,8,237,\n89,34,1,75,176,10,84,75,176,17,84,91,75,176,18,84,\n91,75,176,19,84,91,75,176,11,84,91,88,189,0,13,255,\n192,0,1,0,13,0,13,0,64,56,17,55,56,89,1,75,\n176,12,84,75,176,13,84,91,75,176,16,84,91,88,189,0,\n13,0,64,0,1,0,13,0,13,255,192,56,17,55,56,89,\n64,255,5,2,22,2,22,5,34,10,53,10,73,2,73,5,\n70,10,64,10,91,2,91,5,85,10,80,10,110,2,110,5,\n102,10,121,2,127,2,121,5,127,5,135,2,153,2,152,5,\n148,10,188,2,188,5,206,2,199,3,207,5,29,5,2,9,\n3,6,4,11,5,10,8,11,9,4,11,5,12,21,2,25,\n3,22,4,26,5,27,8,27,9,20,11,21,12,37,0,37,\n1,35,2,39,3,33,4,37,5,34,6,34,7,37,8,39,\n9,36,10,33,11,35,12,57,3,54,4,54,8,57,12,48,\n14,70,2,72,3,70,4,64,4,66,5,64,6,64,7,64,\n8,68,9,68,10,68,11,64,14,64,14,86,0,86,1,86,\n2,80,4,81,5,82,6,82,7,80,8,83,9,84,10,85,\n11,99,0,100,1,101,2,106,3,101,4,106,5,106,6,106,\n7,110,9,97,11,103,12,111,14,117,0,117,1,121,2,125,\n3,120,4,125,5,122,6,127,6,122,7,127,7,120,8,121,\n9,127,9,123,10,118,11,125,12,135,2,136,5,143,14,151,\n0,151,1,148,2,147,3,156,4,155,5,152,6,152,7,153,\n8,64,47,150,12,159,14,166,0,166,1,164,2,164,3,171,\n4,171,5,169,6,169,7,171,8,164,12,175,14,181,2,177,\n3,189,4,187,5,184,9,191,14,196,2,195,3,204,4,202,\n5,121,93,0,93,19,51,27,1,51,27,1,51,1,35,11,\n1,35,86,184,230,229,217,230,229,184,254,219,217,241,242,217,\n4,96,252,150,3,106,252,150,3,106,251,160,3,150,252,106,\n0,1,0,59,0,0,4,121,4,96,0,11,1,90,64,70,\n5,17,6,7,6,4,17,3,4,7,7,6,4,17,5,4,\n1,2,1,3,17,2,2,1,11,17,0,1,0,10,17,9,\n10,1,1,0,10,17,11,10,7,8,7,9,17,8,8,7,\n66,10,7,4,1,4,8,0,191,5,2,10,7,4,1,4,\n8,0,2,8,6,12,16,212,196,212,196,17,23,57,49,0,\n47,60,236,50,23,57,48,75,83,88,7,16,5,237,7,16,\n8,237,7,16,8,237,7,16,5,237,7,16,5,237,7,16,\n8,237,7,16,8,237,7,16,5,237,89,34,1,75,176,10,\n84,75,176,15,84,91,75,176,16,84,91,75,176,17,84,91,\n88,189,0,12,255,192,0,1,0,12,0,12,0,64,56,17,\n55,56,89,1,75,176,20,84,88,189,0,12,0,64,0,1,\n0,12,0,12,255,192,56,17,55,56,89,64,152,10,4,4,\n10,26,4,21,10,38,10,61,4,49,10,85,4,87,7,88,\n10,102,10,118,1,122,4,118,7,116,10,141,4,130,10,153,\n4,159,4,151,7,146,10,144,10,166,1,169,4,175,4,165,\n7,163,10,160,10,28,10,3,4,5,5,9,10,11,26,3,\n21,5,21,9,26,11,41,3,38,5,37,9,42,11,32,13,\n58,1,57,3,55,5,52,7,54,9,57,11,48,13,73,3,\n70,5,69,9,74,11,64,13,89,0,86,1,89,2,89,3,\n87,5,86,6,89,7,86,8,86,9,89,11,80,13,111,13,\n120,1,127,13,155,1,148,7,171,1,164,7,176,13,207,13,\n223,13,255,13,47,93,0,93,9,2,35,9,1,35,9,1,\n51,9,1,4,100,254,107,1,170,217,254,186,254,186,217,1,\n179,254,114,217,1,41,1,41,4,96,253,223,253,193,1,184,\n254,72,2,74,2,22,254,113,1,143,0,1,0,61,254,86,\n4,127,4,96,0,15,1,162,64,67,7,8,2,9,17,0,\n15,10,17,11,10,0,0,15,14,17,15,0,15,13,17,12,\n13,0,0,15,13,17,14,13,10,11,10,12,17,11,11,10,\n66,13,11,9,16,0,11,5,135,3,189,14,11,188,16,14,\n13,12,10,9,6,3,0,8,15,4,15,11,16,16,212,196,\n196,17,23,57,49,0,16,228,50,244,236,17,57,17,57,18,\n57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,\n237,7,16,5,237,7,16,8,237,7,5,237,23,50,89,34,\n1,75,176,10,84,75,176,8,84,91,88,189,0,16,255,192,\n0,1,0,16,0,16,0,64,56,17,55,56,89,1,75,176,\n20,84,88,189,0,16,0,64,0,1,0,16,0,16,255,192,\n56,17,55,56,89,64,240,6,0,5,8,6,9,3,13,22,\n10,23,13,16,13,35,13,53,13,73,10,79,10,78,13,90,\n9,90,10,106,10,135,13,128,13,147,13,18,10,0,10,9,\n6,11,5,12,11,14,11,15,23,1,21,2,16,4,16,5,\n23,10,20,11,20,12,26,14,26,15,39,0,36,1,36,2,\n32,4,32,5,41,8,40,9,37,10,36,11,36,12,39,13,\n42,14,42,15,32,17,55,0,53,1,53,2,48,4,48,5,\n56,10,54,11,54,12,56,13,57,14,57,15,48,17,65,0,\n64,1,64,2,64,3,64,4,64,5,64,6,64,7,64,8,\n66,9,69,10,71,13,73,14,73,15,64,17,84,0,81,1,\n81,2,85,3,80,4,80,5,86,6,85,7,86,8,87,9,\n87,10,85,11,85,12,89,14,89,15,80,17,102,1,102,2,\n104,10,105,14,105,15,96,17,123,8,120,14,120,15,137,0,\n138,9,133,11,133,12,137,13,137,14,137,15,153,9,149,11,\n149,12,154,14,154,15,164,11,164,12,171,14,171,15,176,17,\n207,17,223,17,255,17,101,93,0,93,5,14,1,43,1,53,\n51,50,54,63,1,1,51,9,1,51,2,147,78,148,124,147,\n108,76,84,51,33,254,59,195,1,94,1,94,195,104,200,122,\n154,72,134,84,4,78,252,148,3,108,0,1,0,88,0,0,\n3,219,4,96,0,9,0,180,64,26,8,17,2,3,2,3,\n17,7,8,7,66,8,169,0,188,3,169,5,8,3,1,0,\n4,1,6,10,16,220,196,50,196,17,57,57,49,0,47,236,\n244,236,48,75,83,88,7,16,5,237,7,16,5,237,89,34,\n1,75,176,11,84,75,176,12,84,91,88,189,0,10,0,64,\n0,1,0,10,0,10,255,192,56,17,55,56,89,1,75,176,\n19,84,88,189,0,10,255,192,0,1,0,10,0,10,0,64,\n56,17,55,56,89,64,66,5,2,22,2,38,2,71,2,73,\n7,5,11,8,15,11,24,3,27,8,43,8,32,11,54,3,\n57,8,48,11,64,1,64,2,69,3,64,4,64,5,67,8,\n87,3,89,8,95,11,96,1,96,2,102,3,96,4,96,5,\n98,8,127,11,128,11,175,11,27,93,0,93,19,33,21,1,\n33,21,33,53,1,33,113,3,106,253,76,2,180,252,125,2,\n180,253,101,4,96,168,252,219,147,168,3,37,0,1,1,0,\n254,178,4,23,6,20,0,36,0,130,64,52,25,15,21,11,\n6,37,9,26,16,21,29,11,5,32,33,3,0,11,169,9,\n0,169,1,192,9,21,169,19,177,37,12,9,10,5,36,22,\n25,0,29,10,5,19,2,20,0,32,25,67,10,15,5,37,\n16,212,60,196,252,60,196,50,57,57,17,18,57,17,18,57,\n57,17,18,57,57,49,0,16,252,236,196,244,236,16,238,18,\n23,57,18,57,17,57,57,17,18,57,17,18,57,57,48,1,\n75,176,12,84,88,189,0,37,255,192,0,1,0,37,0,37,\n0,64,56,17,55,56,89,178,0,38,1,93,5,21,35,34,\n38,61,1,52,38,43,1,53,51,50,54,61,1,52,54,59,\n1,21,35,34,6,29,1,20,6,7,30,1,29,1,20,22,\n51,4,23,62,249,169,108,142,61,61,143,107,169,249,62,68,\n141,86,91,110,111,90,86,141,190,144,148,221,239,151,116,143,\n115,149,240,221,147,143,88,141,248,157,142,25,27,142,156,248,\n141,88,0,1,1,4,254,29,1,174,6,29,0,3,0,18,\n183,1,0,177,4,0,5,2,4,16,212,236,49,0,16,252,\n204,48,1,17,35,17,1,174,170,6,29,248,0,8,0,0,\n0,1,1,0,254,178,4,23,6,20,0,36,0,158,64,54,\n31,37,27,22,12,15,8,27,11,21,25,15,4,5,32,3,\n0,25,169,27,0,169,35,192,27,15,169,17,177,37,28,25,\n26,21,15,1,4,0,8,26,21,35,18,4,0,26,31,21,\n67,16,0,11,4,37,16,212,60,196,50,252,60,196,17,18,\n57,57,17,18,57,17,18,57,57,17,18,57,57,49,0,16,\n252,236,196,244,236,16,238,18,23,57,17,18,57,57,17,57,\n17,57,57,17,18,57,48,1,75,176,10,84,88,189,0,37,\n0,64,0,1,0,37,0,37,255,192,56,17,55,56,89,1,\n75,176,14,84,88,189,0,37,255,192,0,1,0,37,0,37,\n0,64,56,17,55,56,89,178,0,38,1,93,5,51,50,54,\n61,1,52,54,55,46,1,61,1,52,38,43,1,53,51,50,\n22,29,1,20,22,59,1,21,35,34,6,29,1,20,6,43,\n1,1,0,70,140,85,90,111,111,90,85,140,70,63,249,167,\n108,142,62,62,142,108,167,249,63,190,86,143,248,156,142,27,\n25,142,157,248,142,87,143,147,221,240,149,115,143,116,151,239,\n221,148,0,1,0,217,1,211,5,219,3,49,0,29,0,35,\n64,16,1,16,27,12,0,19,4,156,27,19,156,12,30,0,\n15,30,16,212,196,49,0,16,212,252,212,236,16,192,17,18,\n57,57,48,1,21,6,6,35,34,39,38,39,38,39,38,35,\n34,6,7,53,54,54,51,50,23,22,23,22,23,22,51,50,\n54,5,219,105,179,97,110,146,11,5,7,15,155,94,88,172,\n98,105,179,97,110,147,10,5,8,14,155,94,86,169,3,49,\n178,79,68,59,4,2,3,5,62,77,83,178,79,69,60,4,\n2,3,5,62,76,0,255,255,0,16,0,0,5,104,7,78,\n2,39,0,36,0,0,0,0,0,7,1,3,0,188,1,117,\n0,3,0,16,0,0,5,104,7,109,0,11,0,14,0,33,\n0,203,64,84,12,17,13,12,27,28,27,14,17,28,27,30,\n17,28,27,29,17,28,28,27,13,17,33,15,33,12,17,14,\n12,15,15,33,32,17,15,33,31,17,33,15,33,66,12,27,\n15,13,9,3,193,21,9,30,149,13,9,142,32,28,30,29,\n28,24,32,31,33,13,18,6,14,24,12,6,27,0,86,24,\n28,15,6,86,18,28,33,34,16,212,196,212,236,50,16,212,\n238,50,17,57,17,57,17,18,57,17,57,57,17,18,57,57,\n49,0,47,60,230,214,238,16,212,238,17,18,57,57,57,48,\n75,83,88,7,16,5,237,7,5,237,7,16,8,237,7,16,\n5,237,7,16,5,237,7,5,237,7,5,237,7,16,8,237,\n89,34,178,32,35,1,1,93,64,32,26,12,115,12,155,12,\n3,7,15,8,27,80,35,102,13,105,14,117,13,123,14,121,\n28,121,29,118,32,118,33,128,35,12,93,0,93,1,52,38,\n35,34,6,21,20,22,51,50,54,3,1,33,1,46,1,53,\n52,54,51,50,22,21,20,6,7,1,35,3,33,3,35,3,\n84,89,63,64,87,88,63,63,89,152,254,240,2,33,254,88,\n61,62,159,115,114,161,63,60,2,20,210,136,253,95,136,213,\n6,90,63,89,87,65,63,88,88,254,243,253,25,3,78,41,\n115,73,115,160,161,114,70,118,41,250,139,1,127,254,129,0,\n255,255,0,115,254,117,5,39,5,240,2,39,0,38,0,0,\n0,0,0,7,0,221,1,45,0,0,255,255,0,201,0,0,\n4,139,7,107,2,39,0,40,0,0,0,0,0,7,1,4,\n0,158,1,117,255,255,0,201,0,0,5,51,7,94,2,39,\n0,49,0,0,0,0,0,7,1,5,0,254,1,117,255,255,\n0,115,255,227,5,217,7,78,2,39,0,50,0,0,0,0,\n0,7,1,3,1,39,1,117,255,255,0,178,255,227,5,41,\n7,78,2,39,0,56,0,0,0,0,0,7,1,3,0,238,\n1,117,255,255,0,123,255,227,4,45,6,102,2,39,0,68,\n0,0,0,0,0,7,0,141,0,82,0,0,255,255,0,123,\n255,227,4,45,6,102,2,39,0,68,0,0,0,0,0,7,\n0,67,0,82,0,0,255,255,0,123,255,227,4,45,6,102,\n2,39,0,68,0,0,0,0,0,7,0,215,0,82,0,0,\n255,255,0,123,255,227,4,45,6,16,2,39,0,68,0,0,\n0,0,0,7,0,142,0,82,0,0,255,255,0,123,255,227,\n4,45,6,55,2,39,0,68,0,0,0,0,0,7,0,216,\n0,82,0,0,255,255,0,123,255,227,4,45,7,6,2,39,\n0,68,0,0,0,0,0,7,0,220,0,82,0,0,255,255,\n0,113,254,117,3,231,4,123,2,39,0,70,0,0,0,0,\n0,7,0,221,0,143,0,0,255,255,0,113,255,227,4,127,\n6,102,2,39,0,72,0,0,0,0,0,7,0,141,0,139,\n0,0,255,255,0,113,255,227,4,127,6,102,2,39,0,72,\n0,0,0,0,0,7,0,67,0,139,0,0,255,255,0,113,\n255,227,4,127,6,102,2,39,0,72,0,0,0,0,0,7,\n0,215,0,139,0,0,255,255,0,113,255,227,4,127,6,16,\n2,39,0,72,0,0,0,0,0,7,0,142,0,139,0,0,\n255,255,0,144,0,0,2,111,6,102,2,39,0,214,0,0,\n0,0,0,7,0,141,255,29,0,0,255,255,255,199,0,0,\n1,166,6,102,2,39,0,214,0,0,0,0,0,7,0,67,\n255,29,0,0,255,255,255,222,0,0,2,92,6,102,2,39,\n0,214,0,0,0,0,0,7,0,215,255,29,0,0,255,255,\n255,244,0,0,2,70,6,16,2,39,0,214,0,0,0,0,\n0,7,0,142,255,29,0,0,255,255,0,186,0,0,4,100,\n6,55,2,39,0,81,0,0,0,0,0,7,0,216,0,152,\n0,0,255,255,0,113,255,227,4,117,6,102,2,39,0,82,\n0,0,0,0,0,7,0,141,0,115,0,0,255,255,0,113,\n255,227,4,117,6,102,2,39,0,82,0,0,0,0,0,7,\n0,67,0,115,0,0,255,255,0,113,255,227,4,117,6,102,\n2,39,0,82,0,0,0,0,0,7,0,215,0,115,0,0,\n255,255,0,113,255,227,4,117,6,16,2,39,0,82,0,0,\n0,0,0,7,0,142,0,115,0,0,255,255,0,113,255,227,\n4,117,6,55,2,39,0,82,0,0,0,0,0,7,0,216,\n0,115,0,0,255,255,0,174,255,227,4,88,6,102,2,39,\n0,88,0,0,0,0,0,7,0,141,0,123,0,0,255,255,\n0,174,255,227,4,88,6,102,2,39,0,88,0,0,0,0,\n0,7,0,67,0,123,0,0,255,255,0,174,255,227,4,88,\n6,102,2,39,0,88,0,0,0,0,0,7,0,215,0,123,\n0,0,255,255,0,174,255,227,4,88,6,16,2,39,0,88,\n0,0,0,0,0,7,0,142,0,123,0,0,0,1,0,57,\n255,59,3,199,5,213,0,11,0,39,64,20,8,4,185,10,\n2,0,129,6,194,12,3,89,5,1,87,9,89,7,0,12,\n16,212,60,236,252,60,236,49,0,16,228,244,212,60,236,50,\n48,1,51,17,33,21,33,17,35,17,33,53,33,1,168,176,\n1,111,254,145,176,254,145,1,111,5,213,254,92,153,251,163,\n4,93,153,0,0,2,0,195,3,117,3,61,5,240,0,11,\n0,26,0,32,64,17,6,195,21,196,0,195,12,145,27,9,\n90,18,91,3,90,24,27,16,220,236,252,236,49,0,16,244,\n236,252,236,48,1,34,6,21,20,22,51,50,54,53,52,38,\n39,50,22,23,22,22,21,20,6,35,34,38,53,52,54,2,\n0,80,110,110,80,80,110,111,79,64,118,43,46,46,185,134,\n135,180,184,5,111,111,80,79,109,109,79,79,112,129,49,46,\n45,114,66,132,183,180,135,134,186,0,0,2,0,172,254,199,\n4,35,5,152,0,6,0,33,0,81,64,43,19,22,20,0,\n15,12,1,11,7,134,8,136,11,16,134,15,136,12,185,20,\n22,11,185,29,31,28,184,22,140,34,28,21,0,9,30,19,\n11,15,7,4,18,25,34,16,220,236,212,60,212,60,60,236,\n50,50,49,0,16,228,244,60,196,236,16,196,254,244,238,16,\n245,238,18,57,17,18,57,17,18,57,48,37,17,6,6,21,\n20,22,1,21,38,38,39,3,54,54,55,21,6,6,7,17,\n35,17,38,0,17,16,0,55,17,51,19,22,22,2,166,147,\n164,164,2,16,74,136,68,1,70,137,72,65,137,77,102,241,\n254,247,1,9,241,102,1,73,137,131,3,88,18,226,184,185,\n226,3,161,172,41,42,3,252,160,5,42,39,170,30,35,7,\n254,228,1,32,20,1,51,1,1,1,2,1,50,22,1,31,\n254,225,4,33,0,1,0,129,0,0,4,98,5,240,0,27,\n0,96,64,33,7,22,8,1,134,0,18,10,169,20,8,12,\n4,160,0,148,25,145,16,12,160,14,0,13,9,11,7,28,\n19,15,21,17,28,16,220,60,204,204,252,60,196,212,196,49,\n0,47,236,50,244,228,236,16,212,60,238,50,16,238,17,57,\n57,48,1,75,176,12,84,88,189,0,28,255,192,0,1,0,\n28,0,28,0,64,56,17,55,56,89,180,54,1,54,2,2,\n0,93,1,21,46,1,35,34,6,29,1,33,21,33,17,33,\n21,33,53,51,17,35,53,51,53,16,54,51,50,22,4,78,\n76,136,61,148,116,1,135,254,121,2,45,252,31,236,199,199,\n214,232,61,151,5,180,182,41,41,155,212,215,143,254,47,170,\n170,1,209,143,238,1,5,243,31,0,0,2,0,92,255,61,\n3,162,5,240,0,11,0,62,0,145,64,60,47,48,42,6,\n0,23,29,48,54,4,13,39,138,38,13,138,12,42,198,38,\n197,35,16,198,12,197,60,145,35,63,47,6,0,23,48,4,\n19,29,45,9,54,3,19,87,57,45,87,32,9,87,12,34,\n26,57,38,34,3,87,51,63,16,220,236,228,196,212,228,236,\n212,236,16,238,17,57,17,18,57,17,23,57,57,49,0,16,\n196,244,228,236,16,230,238,16,238,16,238,17,23,57,57,57,\n17,18,57,48,1,75,176,10,84,75,176,11,84,91,75,176,\n12,84,91,75,176,14,84,91,88,189,0,63,0,64,0,1,\n0,63,0,63,255,192,56,17,55,56,89,1,14,1,21,20,\n22,23,62,1,53,52,38,19,21,46,1,35,34,6,21,20,\n23,22,23,30,1,21,20,6,7,30,1,21,20,6,35,34,\n38,39,53,30,1,51,50,54,53,52,47,1,46,1,53,52,\n54,55,46,1,53,52,54,51,50,22,1,123,63,62,139,250,\n63,62,143,204,83,143,56,97,108,206,26,14,211,131,92,93,\n62,57,204,173,73,154,88,87,148,58,102,113,221,25,214,128,\n93,91,59,59,200,166,73,153,3,168,46,90,46,76,133,135,\n45,91,46,75,136,2,147,164,39,39,80,71,90,115,15,8,\n119,154,101,90,140,53,52,109,64,142,168,29,29,164,39,39,\n84,76,102,123,14,120,153,102,91,143,49,44,112,69,130,159,\n29,0,0,1,1,51,1,209,3,133,4,33,0,11,0,18,\n183,9,199,3,12,6,92,0,12,16,212,236,49,0,16,212,\n236,48,1,52,54,51,50,22,21,20,6,35,34,38,1,51,\n173,126,124,171,172,125,125,172,2,250,124,171,171,124,125,172,\n172,0,0,1,0,158,255,59,4,57,5,213,0,13,0,37,\n64,18,8,2,4,193,0,129,6,2,14,0,7,93,5,3,\n93,1,11,14,16,212,212,252,220,236,57,49,0,16,196,50,\n244,236,17,57,48,1,33,17,35,17,35,17,35,17,38,38,\n53,52,36,2,121,1,192,141,190,142,215,235,1,4,5,213,\n249,102,6,31,249,225,3,78,17,221,184,190,232,0,0,1,\n0,186,255,227,4,172,6,20,0,47,0,154,64,48,45,39,\n33,12,4,6,13,32,0,4,42,22,134,23,26,185,19,42,\n185,3,151,19,140,46,12,9,13,29,32,33,39,9,8,36,\n39,8,6,29,8,36,16,22,45,8,16,0,70,48,16,252,\n196,252,204,16,198,238,212,238,16,238,17,57,57,18,57,18,\n57,49,0,47,228,254,238,16,254,213,238,18,23,57,23,57,\n48,64,64,15,5,15,6,15,7,15,39,15,40,138,12,138,\n13,7,10,6,10,7,10,11,10,12,10,13,10,31,13,32,\n10,33,12,34,4,38,25,13,25,31,25,32,58,32,58,33,\n77,31,77,32,73,33,73,34,106,31,106,32,165,6,165,7,\n166,32,24,93,1,93,19,52,54,51,50,22,23,14,1,21,\n20,22,31,1,30,1,21,20,6,35,34,38,39,53,30,1,\n51,50,54,53,52,38,47,1,46,1,53,52,54,55,46,1,\n35,34,6,21,17,35,186,239,218,208,219,3,151,168,58,65,\n57,166,96,225,211,64,136,73,80,140,65,116,120,59,101,92,\n96,87,167,151,8,131,113,130,136,187,4,113,200,219,232,224,\n8,115,96,47,81,42,37,106,142,100,172,183,25,24,164,30,\n29,95,91,63,84,62,55,59,135,91,127,172,29,103,112,139,\n131,251,147,0,0,4,1,27,0,0,6,229,5,205,0,23,\n0,47,0,56,0,76,0,96,64,54,69,66,67,63,50,201,\n72,48,201,57,74,67,202,12,57,202,0,201,24,200,12,201,\n36,72,69,51,48,4,49,66,60,63,57,54,73,49,96,75,\n54,96,67,60,94,18,9,30,75,94,6,9,30,95,42,77,\n16,220,228,252,236,16,254,253,196,238,16,238,50,17,57,57,\n18,57,18,23,57,49,0,47,238,246,254,237,16,237,50,16,\n238,214,238,57,18,57,57,48,1,34,6,7,6,6,21,20,\n22,23,22,22,51,50,54,55,54,54,53,52,38,39,38,38,\n39,50,4,23,22,18,21,20,2,7,6,4,35,34,36,39,\n38,2,53,52,18,55,54,36,19,35,17,51,50,54,53,52,\n38,39,50,22,21,20,6,7,22,22,23,23,35,39,38,38,\n35,35,17,35,17,4,0,131,226,94,94,96,96,94,94,226,\n131,132,227,94,93,93,94,92,94,227,132,152,1,7,109,109,\n108,108,109,109,254,249,152,152,254,249,109,109,108,108,109,109,\n1,7,125,123,123,110,87,88,102,176,174,105,96,24,67,46,\n137,172,129,59,73,54,66,155,5,102,94,94,94,229,130,129,\n227,94,94,95,95,94,93,226,131,133,227,93,94,94,103,110,\n109,109,254,250,154,152,254,251,109,109,110,110,109,109,1,5,\n152,154,1,6,109,109,110,254,98,254,236,62,75,76,63,103,\n119,121,86,112,17,8,77,73,223,209,96,51,254,156,3,68,\n0,3,1,27,0,0,6,229,5,205,0,23,0,47,0,73,\n0,67,64,38,61,203,62,58,204,65,202,36,49,203,48,52,\n204,71,202,24,201,0,200,36,201,12,55,97,68,61,48,94,\n42,9,6,68,94,30,9,6,18,74,16,220,204,252,236,16,\n254,237,50,16,238,49,0,47,238,246,254,253,238,214,238,16,\n253,238,214,238,48,1,50,4,23,22,18,21,20,2,7,6,\n4,35,34,36,39,38,2,53,52,18,55,54,36,23,34,6,\n7,6,6,21,20,22,23,22,22,51,50,54,55,54,54,53,\n52,38,39,38,38,23,21,38,38,35,34,6,21,20,22,51,\n50,54,55,21,6,6,35,34,38,53,52,54,51,50,22,4,\n0,152,1,7,109,109,108,108,109,109,254,249,152,152,254,249,\n109,109,108,108,109,109,1,7,152,131,226,94,94,96,96,94,\n94,226,131,132,227,94,93,93,94,92,94,227,167,66,130,66,\n149,167,171,155,64,122,66,67,137,70,216,251,251,216,73,136,\n5,205,110,109,109,254,250,154,152,254,251,109,109,110,110,109,\n109,1,5,152,154,1,6,109,109,110,103,94,94,94,229,130,\n129,227,94,94,95,95,94,93,226,131,133,227,93,94,94,245,\n129,33,32,175,157,159,174,31,34,127,29,28,244,208,209,242,\n28,0,0,2,1,39,3,147,6,70,5,213,0,12,0,20,\n0,62,64,33,1,6,7,16,10,4,18,14,9,3,6,201,\n13,2,0,129,21,1,9,5,98,3,9,98,11,13,99,15,\n98,19,99,17,21,16,212,228,252,228,212,236,212,236,17,57,\n49,0,16,244,60,60,236,23,50,212,60,60,196,17,57,48,\n1,19,19,51,17,35,17,3,35,3,17,35,17,35,21,35,\n17,35,17,35,53,4,74,174,164,170,113,195,55,203,114,113,\n203,114,201,5,213,255,0,1,0,253,190,1,228,254,209,1,\n47,254,28,2,66,94,254,28,1,228,94,0,0,1,1,115,\n4,238,3,82,6,102,0,3,0,49,64,9,2,180,0,179,\n4,3,68,1,4,16,212,236,49,0,16,244,236,48,0,75,\n176,9,84,75,176,14,84,91,88,189,0,4,255,192,0,1,\n0,4,0,4,0,64,56,17,55,56,89,1,51,1,35,2,\n139,199,254,186,153,6,102,254,136,0,0,2,0,215,5,70,\n3,41,6,16,0,3,0,7,0,146,64,14,6,2,206,4,\n0,205,8,1,100,0,5,100,4,8,16,220,252,212,236,49,\n0,16,252,60,236,50,48,0,75,176,10,84,75,176,13,84,\n91,88,189,0,8,0,64,0,1,0,8,0,8,255,192,56,\n17,55,56,89,1,75,176,12,84,75,176,13,84,91,75,176,\n14,84,91,75,176,23,84,91,88,189,0,8,255,192,0,1,\n0,8,0,8,0,64,56,17,55,56,89,1,75,176,15,84,\n75,176,25,84,91,88,189,0,8,0,64,0,1,0,8,0,\n8,255,192,56,17,55,56,89,64,17,96,1,96,2,96,5,\n96,6,112,1,112,2,112,5,112,6,8,93,1,51,21,35,\n37,51,21,35,2,94,203,203,254,121,203,203,6,16,202,202,\n202,0,0,1,0,217,0,39,5,219,4,221,0,19,0,62,\n64,34,13,12,10,3,2,207,4,0,156,6,12,207,14,10,\n156,18,6,16,8,20,18,14,13,12,8,4,3,2,8,9,\n5,15,0,20,16,220,60,196,50,23,57,49,0,16,212,60,\n204,50,252,60,236,16,254,60,236,57,17,18,57,48,19,33,\n1,23,7,33,21,33,7,33,21,33,1,39,55,33,53,33,\n55,33,217,3,4,1,0,125,174,1,47,254,72,195,2,123,\n252,250,254,254,125,174,254,213,1,182,195,253,135,3,162,1,\n59,102,213,168,240,170,254,199,102,211,170,240,0,2,0,8,\n0,0,7,72,5,213,0,15,0,19,0,135,64,57,17,17,\n14,15,14,16,17,15,15,14,13,17,15,14,12,17,14,15,\n14,66,5,149,3,11,149,17,1,149,16,149,0,129,17,7,\n149,3,173,13,9,17,16,15,13,12,5,14,10,0,4,8,\n6,2,28,18,10,14,20,16,212,212,60,236,50,212,196,196,\n17,18,23,57,49,0,47,60,236,236,196,244,236,236,16,238,\n16,238,48,75,83,88,7,16,5,237,7,5,237,7,16,5,\n237,7,16,5,237,89,34,178,128,21,1,1,93,64,19,103,\n17,119,16,119,17,134,12,133,16,150,17,144,21,160,21,191,\n21,9,93,1,21,33,17,33,21,33,17,33,21,33,17,33,\n3,35,1,23,1,33,17,7,53,253,27,2,199,253,57,2,\n248,252,61,253,240,160,205,2,113,139,254,182,1,203,5,213,\n170,254,70,170,253,227,170,1,127,254,129,5,213,158,252,240,\n3,16,0,3,0,102,255,186,5,229,6,23,0,9,0,19,\n0,43,0,158,64,60,29,31,26,13,43,44,19,10,1,0,\n4,13,41,38,32,20,13,4,42,38,30,26,4,149,38,13,\n149,26,145,38,140,44,43,44,42,20,23,16,32,30,35,19,\n10,1,0,4,29,41,16,7,31,7,25,35,51,16,25,23,\n16,44,16,252,236,252,236,192,17,18,57,57,23,57,18,57,\n57,17,18,57,57,17,57,49,0,16,228,244,236,16,238,16,\n192,16,192,17,18,57,57,18,57,18,23,57,18,57,17,18,\n57,57,48,64,42,87,0,90,21,87,25,85,33,106,21,101,\n33,123,21,118,28,117,33,9,70,19,89,0,86,19,106,0,\n100,19,100,28,106,40,124,0,115,19,118,28,122,40,11,93,\n1,93,9,1,30,1,51,50,0,17,52,38,39,46,1,35,\n34,0,17,20,22,23,7,38,2,53,16,0,33,50,22,23,\n55,23,7,22,18,21,16,0,33,34,38,39,7,39,4,182,\n253,51,62,161,95,220,1,1,39,121,61,161,95,220,254,253,\n39,39,134,78,79,1,121,1,59,130,221,87,162,102,170,78,\n80,254,136,254,198,128,221,91,162,103,4,88,252,178,64,67,\n1,72,1,26,112,184,184,64,67,254,184,254,229,112,188,68,\n158,102,1,8,160,1,98,1,165,77,75,191,89,198,103,254,\n246,158,254,159,254,91,75,75,191,88,0,3,0,221,0,221,\n5,207,3,238,0,11,0,23,0,47,0,255,64,29,45,27,\n21,9,33,3,0,36,24,4,21,15,39,33,21,27,15,33,\n48,12,0,36,24,18,6,42,18,30,48,16,212,196,212,196,\n17,57,57,57,57,49,0,16,212,196,212,196,16,192,17,18,\n23,57,18,57,17,18,57,48,64,190,5,2,5,3,5,4,\n0,5,0,6,0,7,5,8,5,9,5,10,10,16,15,17,\n15,18,15,19,10,20,21,2,21,3,21,4,16,5,16,6,\n16,7,21,8,21,9,21,10,26,14,26,15,26,16,31,17,\n31,18,31,19,26,20,26,21,26,22,36,2,36,3,36,4,\n32,5,32,6,32,7,36,8,36,9,36,10,42,14,42,15,\n42,16,47,17,47,18,47,19,42,20,42,21,42,22,53,2,\n53,3,53,4,48,5,48,6,48,7,53,8,53,9,53,10,\n58,14,58,15,58,16,63,17,63,18,63,19,58,20,58,21,\n58,22,69,2,69,3,69,4,64,5,64,6,64,7,69,8,\n69,9,69,10,74,14,74,15,74,16,79,17,79,18,79,19,\n74,20,74,21,74,22,86,180,31,176,32,176,33,176,34,176,\n38,176,39,176,40,180,41,8,93,1,93,1,30,1,51,50,\n54,53,52,38,35,34,6,7,46,1,35,34,6,21,20,22,\n51,50,54,23,14,1,35,34,38,53,52,54,51,50,22,23,\n62,1,51,50,22,21,20,6,35,34,38,3,147,49,134,84,\n101,128,118,89,82,133,196,49,133,85,102,127,118,89,82,134,\n144,70,157,94,136,186,167,134,95,153,72,68,158,97,134,188,\n167,134,94,149,2,47,88,90,135,105,101,134,135,55,88,88,\n132,106,101,134,136,22,135,127,223,166,175,216,126,138,138,131,\n225,167,175,214,119,0,0,2,0,217,0,0,5,219,5,4,\n0,11,0,15,0,46,64,24,5,208,7,3,156,0,208,9,\n1,12,156,14,13,2,21,4,0,23,12,8,21,10,6,16,\n16,212,60,236,50,252,60,236,50,49,0,47,236,212,60,236,\n252,60,236,48,1,17,33,21,33,17,35,17,33,53,33,17,\n1,33,21,33,3,174,2,45,253,211,168,253,211,2,45,253,\n211,5,2,250,254,5,4,254,125,170,254,125,1,131,170,1,\n131,251,166,170,0,2,0,217,0,0,5,219,4,168,0,6,\n0,10,0,84,64,46,2,156,3,4,3,1,156,0,1,4,\n4,3,1,156,2,1,5,6,5,0,156,6,5,66,5,4,\n2,1,0,5,3,209,6,167,7,156,9,1,8,2,0,36,\n7,4,35,11,16,252,60,236,50,50,57,49,0,47,236,244,\n236,23,57,48,75,83,88,7,4,237,7,16,8,237,7,16,\n8,237,7,16,4,237,89,34,9,2,21,1,53,1,1,33,\n21,33,5,219,252,64,3,192,250,254,5,2,250,254,5,2,\n250,254,3,248,254,235,254,238,178,1,112,170,1,111,252,2,\n170,0,0,2,0,217,0,0,5,219,4,168,0,6,0,10,\n0,86,64,47,6,156,0,6,3,4,3,5,156,4,4,3,\n0,156,1,2,1,6,156,5,6,2,2,1,66,6,5,3,\n2,0,5,4,209,1,167,7,156,8,6,7,2,36,9,4,\n0,35,11,16,252,60,60,236,50,57,49,0,47,236,244,236,\n23,57,48,75,83,88,7,16,8,237,7,16,4,237,7,16,\n4,237,7,16,8,237,89,34,19,53,1,21,1,53,1,1,\n21,33,53,217,5,2,250,254,3,193,1,65,250,254,3,248,\n176,254,145,170,254,144,178,1,18,253,199,170,170,0,0,1,\n0,82,0,0,4,195,5,213,0,24,0,198,64,70,16,2,\n17,22,17,15,2,14,15,22,22,17,15,2,16,15,8,13,\n8,14,2,13,13,8,66,15,11,9,4,0,211,23,6,18,\n11,211,20,9,16,13,129,2,12,9,14,3,5,22,15,3,\n21,18,16,3,0,17,102,19,0,101,1,28,13,102,10,5,\n101,7,3,25,16,212,60,236,50,236,252,236,50,236,18,23,\n57,18,57,57,17,23,57,49,0,47,228,50,212,60,236,50,\n212,60,236,50,17,18,57,48,75,83,88,7,16,5,237,7,\n16,8,237,7,16,8,237,7,16,5,237,89,34,1,75,176,\n12,84,88,189,0,25,255,192,0,1,0,25,0,25,0,64,\n56,17,55,56,89,64,40,134,15,144,15,166,15,160,15,181,\n15,5,39,12,39,13,39,14,41,16,40,17,40,18,55,14,\n57,16,135,12,136,18,166,13,165,14,170,16,169,17,14,93,\n0,93,1,33,17,35,17,33,53,33,53,39,33,53,33,1,\n51,9,1,51,1,33,21,33,7,21,33,4,141,254,99,201,\n254,96,1,160,84,254,180,1,8,254,195,190,1,123,1,121,\n191,254,194,1,8,254,181,84,1,159,1,199,254,57,1,199,\n123,51,155,123,2,74,253,68,2,188,253,182,123,155,51,0,\n0,1,0,174,254,86,4,229,4,96,0,32,0,77,64,37,\n19,25,31,3,22,6,3,9,12,3,1,18,15,6,135,28,\n22,140,10,1,188,0,189,33,25,9,18,9,8,11,78,31,\n2,8,0,70,33,16,252,236,50,244,236,196,18,57,49,0,\n16,228,228,50,244,60,236,220,196,17,23,57,17,18,23,57,\n48,182,31,34,96,34,207,34,3,1,93,19,17,51,17,20,\n22,51,50,54,53,17,51,17,20,22,51,50,54,55,21,14,\n1,35,34,38,39,14,1,35,34,38,39,17,174,184,138,135,\n148,149,184,35,37,9,32,28,41,73,35,69,82,15,50,145,\n98,102,143,42,254,86,6,10,253,72,145,148,168,168,2,141,\n252,162,60,57,11,12,148,23,22,78,80,79,79,78,78,253,\n215,0,0,2,0,104,255,231,3,193,5,45,0,29,0,41,\n0,98,64,25,0,39,33,9,27,6,39,21,6,15,33,27,\n15,21,213,42,12,36,3,0,30,18,36,24,42,16,212,204,\n220,204,57,57,17,57,49,0,16,228,204,220,204,16,206,16,\n206,17,18,57,17,18,57,48,1,75,176,12,84,75,176,11,\n84,91,75,176,14,84,91,75,176,16,84,91,75,176,20,84,\n91,88,189,0,42,0,64,0,1,0,42,0,42,255,192,56,\n17,55,56,89,1,62,1,53,52,38,35,34,6,35,34,38,\n53,52,54,51,50,18,17,16,0,35,34,38,53,52,18,51,\n50,22,7,52,38,35,34,2,21,20,22,51,50,18,2,244,\n15,15,73,72,55,144,36,36,48,144,101,180,214,254,223,213,\n152,203,221,162,101,130,11,87,79,109,141,86,80,109,141,2,\n109,87,163,75,129,131,116,44,31,62,98,254,202,254,249,254,\n177,254,70,216,163,198,1,1,91,224,116,125,254,254,207,116,\n123,1,4,0,0,1,0,25,254,119,5,59,5,193,0,11,\n0,93,64,20,10,4,12,2,5,7,2,0,7,12,10,5,\n4,3,1,0,6,6,8,12,16,212,196,23,57,49,0,16,\n196,212,204,16,206,17,18,57,57,48,64,48,81,3,86,5,\n80,5,90,10,115,3,112,3,118,4,117,5,112,5,122,10,\n128,3,128,5,12,90,9,127,2,127,3,112,5,112,6,123,\n9,116,11,143,2,143,3,128,5,128,6,11,93,1,93,19,\n33,21,33,9,1,33,21,33,53,9,1,55,4,234,252,65,\n2,160,253,74,3,239,250,222,2,213,253,73,5,193,193,253,\n51,253,4,192,149,3,33,2,227,0,0,1,0,156,254,119,\n5,113,5,193,0,7,0,30,64,15,6,2,215,4,214,0,\n175,8,3,103,1,5,103,0,8,16,212,236,212,236,49,0,\n16,252,236,236,50,48,19,33,17,35,17,33,17,35,156,4,\n213,240,253,10,239,5,193,248,182,6,125,249,131,0,0,1,\n255,225,255,240,4,170,4,47,0,35,0,203,64,49,11,2,\n21,31,30,3,0,8,218,15,26,22,0,217,34,216,15,213,\n24,12,30,27,26,25,24,23,6,36,18,1,0,11,2,4,\n35,22,21,5,34,31,18,12,35,18,104,5,35,31,36,16,\n212,212,212,236,18,57,17,18,57,18,57,57,17,23,57,17,\n18,23,57,49,0,47,60,228,244,236,50,50,16,238,17,23,\n57,57,57,48,1,75,176,10,84,88,189,0,36,255,192,0,\n1,0,36,0,36,0,64,56,17,55,56,89,64,86,24,30,\n24,31,2,9,0,9,1,13,2,13,3,15,4,15,5,15,\n6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,\n14,15,15,15,16,15,17,15,18,15,19,14,20,13,21,9,\n22,11,23,8,24,15,24,13,25,8,26,9,35,17,0,17,\n1,22,2,22,3,23,20,22,21,17,22,23,23,28,24,28,\n25,17,35,40,93,0,93,1,35,3,14,1,21,20,22,51,\n50,54,55,7,14,1,35,34,38,53,52,54,55,19,33,3,\n35,19,35,34,6,7,35,62,1,51,33,4,135,182,105,15,\n15,47,55,17,46,37,30,30,55,26,118,121,21,34,80,254,\n186,194,181,195,41,54,60,9,160,28,143,165,3,121,3,145,\n254,25,74,92,22,58,49,5,5,141,8,8,102,100,46,144,\n161,1,120,252,111,3,145,64,69,166,125,0,0,1,0,47,\n254,141,3,250,6,14,0,37,0,38,64,20,32,219,0,26,\n13,219,19,26,220,7,177,38,10,105,23,106,29,105,4,38,\n16,220,236,252,236,49,0,16,252,236,220,228,16,222,228,48,\n1,50,19,54,55,18,18,51,50,22,21,20,6,35,34,38,\n39,38,38,35,34,3,6,7,2,2,35,34,38,53,52,54,\n51,50,22,23,22,22,1,55,106,14,2,1,12,190,202,80,\n100,64,55,42,56,12,6,9,16,107,14,4,4,17,189,196,\n79,101,68,61,33,48,15,10,10,254,250,2,176,108,57,2,\n3,1,188,84,65,54,63,38,35,15,72,253,149,193,110,254,\n33,254,98,83,65,56,63,29,28,18,83,0,0,3,0,115,\n1,213,3,59,5,240,0,3,0,30,0,41,0,95,64,51,\n40,7,37,4,31,18,24,16,2,227,0,31,221,16,0,225,\n37,221,5,10,25,223,24,222,21,221,10,224,28,145,42,0,\n24,13,31,16,34,6,2,1,40,17,6,107,4,108,24,34,\n107,13,42,16,220,236,204,252,236,50,50,192,192,17,18,57,\n57,17,18,57,49,0,16,244,228,252,244,236,16,196,238,237,\n214,238,16,238,17,18,57,18,57,17,57,57,48,19,33,21,\n33,1,17,35,53,6,6,35,34,38,53,52,54,51,51,53,\n52,38,35,34,6,7,53,54,54,51,50,22,5,34,6,21,\n20,22,51,50,54,53,53,139,2,176,253,80,2,174,149,44,\n144,93,128,152,191,188,182,117,117,62,136,68,73,145,69,183,\n179,254,236,161,126,98,82,104,130,2,80,123,2,184,254,64,\n112,63,68,135,113,135,138,4,91,91,34,34,127,28,28,176,\n240,67,79,64,77,144,114,29,0,3,0,96,1,213,3,100,\n5,240,0,3,0,15,0,27,0,46,64,25,2,227,0,225,\n22,221,10,224,16,221,4,145,28,0,19,13,1,25,107,7,\n108,19,107,13,28,16,220,236,252,236,57,17,18,57,49,0,\n16,244,236,244,236,252,236,48,19,33,21,33,1,50,22,21,\n20,6,35,34,38,53,52,54,23,34,6,21,20,22,51,50,\n54,53,52,38,139,2,176,253,80,1,88,179,206,206,179,179,\n208,208,179,105,126,127,104,105,125,124,2,80,123,4,27,221,\n191,191,219,220,190,191,221,115,161,136,133,160,160,133,137,160,\n0,1,0,78,0,0,5,207,5,231,0,31,0,64,64,34,\n9,229,25,145,18,15,3,3,0,229,16,1,17,32,22,19,\n15,12,31,6,2,1,0,2,109,6,28,28,15,109,12,28,\n22,32,16,212,236,236,212,236,236,192,192,17,18,57,17,18,\n57,17,18,57,49,0,47,60,236,23,50,244,236,48,37,21,\n33,53,54,18,53,52,0,35,34,0,21,20,18,23,21,33,\n53,33,38,2,53,16,0,33,32,0,17,20,2,7,5,207,\n253,168,177,198,254,248,216,216,254,247,199,178,253,168,1,63,\n158,145,1,127,1,49,1,47,1,129,142,161,178,178,178,97,\n1,76,202,240,1,34,254,221,239,202,254,180,97,178,178,139,\n1,42,184,1,62,1,138,254,119,254,203,194,254,216,141,0,\n0,3,0,123,255,227,7,111,4,123,0,6,0,51,0,62,\n1,3,64,67,39,45,37,61,14,13,0,52,169,37,22,134,\n21,136,18,0,169,14,58,18,185,28,25,46,134,45,186,42,\n3,185,14,187,7,49,10,184,31,25,140,37,63,52,55,38,\n6,15,0,37,55,28,7,38,15,21,0,8,13,61,38,8,\n15,45,55,8,34,69,63,16,252,236,204,212,252,60,212,236,\n196,17,18,57,57,17,57,17,18,57,17,18,57,49,0,16,\n196,228,50,244,60,196,228,252,60,244,236,16,196,238,50,16,\n238,16,244,238,16,238,17,57,17,57,17,18,57,48,64,129,\n48,43,48,44,48,45,48,46,48,47,48,48,64,43,64,44,\n64,45,64,46,64,47,64,48,80,43,80,44,80,45,80,46,\n80,47,80,48,133,43,133,48,128,64,144,64,160,64,176,64,\n192,64,208,64,224,64,224,64,240,64,29,63,0,63,6,63,\n13,63,14,63,15,5,48,44,48,45,48,46,48,47,64,44,\n64,45,64,46,64,47,80,44,80,45,80,46,80,47,111,0,\n111,6,111,13,111,14,111,15,96,44,96,45,96,46,96,47,\n112,44,112,45,112,46,112,47,128,44,128,45,128,46,128,47,\n29,93,113,1,93,1,46,1,35,34,6,7,3,62,1,51,\n50,0,29,1,33,30,1,51,50,54,55,21,14,1,35,34,\n38,39,14,1,35,34,38,53,52,54,51,33,53,52,38,35,\n34,6,7,53,62,1,51,50,22,3,34,6,21,20,22,51,\n50,54,61,1,6,182,1,165,137,153,185,14,68,74,212,132,\n226,1,8,252,178,12,204,183,104,200,100,100,208,106,167,248,\n77,73,216,143,189,210,253,251,1,2,167,151,96,182,84,101,\n190,90,142,213,239,223,172,129,111,153,185,2,148,151,180,174,\n158,1,48,90,94,254,221,250,90,191,200,53,53,174,42,44,\n121,119,120,120,187,168,189,192,18,127,139,46,46,170,39,39,\n96,254,24,102,123,98,115,217,180,41,0,3,0,72,255,162,\n4,156,4,188,0,9,0,19,0,43,0,228,64,60,43,44,\n38,31,29,26,19,10,1,0,4,13,41,38,32,20,13,4,\n42,38,30,26,4,185,38,13,185,26,184,38,140,44,43,44,\n42,20,23,16,32,30,35,19,10,1,0,4,16,7,31,29,\n7,18,35,81,41,16,18,23,69,44,16,252,236,50,244,236,\n50,192,17,18,23,57,18,57,57,17,18,57,57,17,57,49,\n0,16,228,244,236,16,238,16,192,16,192,17,18,57,57,18,\n57,18,23,57,17,57,57,17,18,57,48,64,112,40,1,63,\n45,89,20,86,28,85,29,86,32,106,21,102,33,127,0,123,\n4,127,5,127,6,127,7,127,8,127,9,127,10,127,11,127,\n12,123,13,122,21,123,26,127,27,127,28,127,29,127,30,127,\n31,127,32,123,33,127,34,127,35,127,36,127,37,123,38,155,\n25,149,37,168,25,160,45,240,45,38,89,0,86,19,85,29,\n90,40,105,0,102,19,101,28,106,40,122,0,116,19,118,28,\n122,40,137,30,149,24,154,36,162,24,173,36,17,93,1,93,\n9,1,30,1,51,50,54,53,52,38,39,46,1,35,34,6,\n21,20,22,23,7,46,1,53,16,0,51,50,22,23,55,23,\n7,30,1,21,16,0,35,34,38,39,7,39,3,137,254,25,\n41,103,65,147,172,20,92,42,103,62,151,169,19,20,125,54,\n54,1,17,241,93,159,67,139,95,146,53,54,254,238,240,96,\n161,63,139,96,3,33,253,176,42,40,232,200,79,117,154,41,\n41,235,211,72,110,46,151,77,197,119,1,20,1,56,51,52,\n168,79,179,77,198,120,254,237,254,199,52,51,168,78,0,2,\n0,143,255,227,3,172,5,213,0,32,0,36,0,134,64,47,\n32,26,5,2,4,6,25,0,16,134,15,136,12,0,33,131,\n35,12,149,19,140,35,129,37,6,34,25,22,9,5,1,0,\n26,34,9,0,28,1,34,28,33,38,15,9,28,22,37,16,\n220,236,212,252,236,212,236,17,18,57,17,18,57,17,18,57,\n18,57,49,0,16,228,244,236,16,254,205,16,244,238,18,57,\n57,23,57,48,1,75,176,16,84,75,176,18,84,91,75,176,\n19,84,91,88,189,0,37,255,192,0,1,0,37,0,37,0,\n64,56,17,55,56,89,64,11,116,4,116,5,116,6,116,7,\n118,28,5,93,1,51,21,20,6,15,1,14,1,21,20,22,\n51,50,54,55,21,14,1,35,34,38,53,52,54,63,1,62,\n1,55,62,1,53,19,35,53,51,1,244,190,55,90,90,58,\n51,131,109,78,180,96,94,192,103,184,224,73,89,88,48,38,\n8,7,6,196,202,202,4,68,156,101,130,87,88,53,94,49,\n89,110,70,67,188,57,56,194,159,76,137,86,86,47,53,25,\n21,60,54,1,14,254,0,2,1,53,0,0,2,0,5,213,\n0,3,0,9,0,98,64,15,7,0,131,2,129,4,8,7,\n4,0,3,5,1,0,10,16,252,60,236,50,57,57,49,0,\n47,244,252,204,48,1,75,176,11,84,88,189,0,10,0,64,\n0,1,0,10,0,10,255,192,56,17,55,56,89,1,75,176,\n15,84,75,176,16,84,91,75,176,19,84,91,88,189,0,10,\n255,192,0,1,0,10,0,10,0,64,56,17,55,56,89,182,\n0,11,32,11,80,11,3,93,1,35,53,51,17,35,17,19,\n51,19,2,0,203,203,203,21,162,20,4,215,254,250,43,2,\n143,1,101,254,155,0,0,1,0,217,1,31,5,219,3,94,\n0,5,0,23,64,10,4,156,2,0,6,3,23,1,0,6,\n16,220,212,236,49,0,16,212,196,236,48,19,33,17,35,17,\n33,217,5,2,168,251,166,3,94,253,193,1,149,0,0,1,\n0,61,255,215,5,25,6,125,0,10,0,42,64,24,10,9,\n8,7,6,5,11,2,4,2,0,11,10,9,7,6,5,4,\n3,0,8,1,8,11,16,212,204,23,57,49,0,16,212,204,\n196,17,18,23,57,48,1,51,21,35,1,35,1,7,39,37,\n1,4,92,189,115,253,174,66,254,193,125,25,1,27,1,0,\n6,125,96,249,186,3,115,45,80,98,253,59,0,1,0,31,\n254,86,5,2,6,20,0,35,0,138,64,64,14,13,2,15,\n12,17,25,30,25,11,10,9,8,4,7,17,30,30,25,66,\n25,12,19,10,7,30,1,26,10,169,8,19,138,18,230,22,\n169,15,1,138,0,230,4,169,33,151,15,28,8,36,30,29,\n27,26,25,12,11,9,8,7,10,0,18,36,16,212,204,23,\n57,49,0,16,196,50,196,252,236,244,236,16,238,246,238,16,\n238,50,18,57,57,17,18,57,57,48,75,83,88,7,16,5,\n237,23,50,7,16,5,237,17,23,57,89,34,1,75,176,12,\n84,88,189,0,36,255,192,0,1,0,36,0,36,0,64,56,\n17,55,56,89,1,21,46,1,35,34,6,7,3,33,21,33,\n3,2,6,35,34,38,39,53,30,1,51,50,54,55,19,35,\n53,33,19,62,1,51,50,22,5,2,38,80,44,96,114,25,\n60,1,31,254,195,127,58,188,186,58,100,47,52,97,47,97,\n109,34,137,248,1,23,63,36,198,151,53,100,5,240,164,29,\n28,122,132,254,201,143,253,133,254,227,211,21,22,166,33,33,\n137,166,2,173,143,1,74,183,195,18,0,2,0,217,1,16,\n5,219,3,244,0,29,0,59,0,63,64,31,46,31,57,42,\n0,45,34,19,1,16,27,12,30,42,156,49,57,156,34,4,\n156,27,12,156,19,60,30,0,45,15,60,16,212,60,196,50,\n49,0,16,212,236,212,236,220,252,212,236,192,17,18,57,57,\n17,18,57,57,17,18,57,57,48,1,21,6,6,35,34,39,\n38,39,38,39,38,35,34,6,7,53,54,54,51,50,23,22,\n23,22,23,22,51,50,54,19,21,6,6,35,34,39,38,39,\n38,39,38,35,34,6,7,53,54,54,51,50,23,22,23,22,\n23,22,51,50,54,5,219,105,179,97,110,146,10,7,6,15,\n155,94,88,172,98,105,179,97,110,147,11,5,6,15,155,94,\n86,169,103,105,179,97,110,146,10,7,6,15,155,94,88,172,\n98,105,179,97,110,147,10,5,7,15,155,94,86,169,2,111,\n179,78,69,59,4,3,2,6,61,76,84,179,78,69,59,5,\n2,2,6,61,75,1,218,178,79,69,59,4,3,2,6,61,\n76,83,178,78,69,59,4,2,3,6,61,75,0,2,255,250,\n0,0,5,96,5,193,0,2,0,6,0,56,64,15,0,3,\n1,3,5,4,3,2,1,0,5,7,5,6,7,16,212,204,\n17,23,57,49,0,47,196,204,17,57,48,64,20,99,1,109,\n2,112,1,120,2,127,2,121,5,118,6,7,110,0,127,0,\n2,93,1,93,9,1,33,1,51,1,33,2,172,254,94,3,\n68,253,239,224,2,67,250,154,4,238,251,196,5,15,250,63,\n0,2,0,158,0,141,4,37,4,35,0,6,0,13,0,134,\n64,73,3,232,4,5,4,2,232,1,2,5,5,4,2,232,\n3,2,6,0,6,1,232,0,0,6,10,232,11,12,11,9,\n232,8,9,12,12,11,9,232,10,9,13,7,13,8,232,7,\n7,13,66,9,2,11,4,231,7,0,166,14,9,12,5,2,\n7,3,0,111,5,10,7,111,12,110,14,16,252,252,60,212,\n236,50,17,57,17,18,57,49,0,16,244,60,236,50,57,57,\n48,75,83,88,7,16,4,237,7,16,8,237,7,16,8,237,\n7,16,4,237,7,16,4,237,7,16,8,237,7,16,8,237,\n7,16,4,237,89,34,1,21,1,1,21,1,53,19,21,1,\n1,21,1,53,4,37,254,211,1,45,254,43,35,254,211,1,\n45,254,43,4,35,191,254,244,254,244,191,1,162,82,1,162,\n191,254,244,254,244,191,1,162,82,0,0,2,0,193,0,141,\n4,72,4,35,0,6,0,13,0,134,64,73,12,232,13,12,\n9,10,9,11,232,10,10,9,13,232,7,8,7,12,232,11,\n12,8,8,7,5,232,6,5,2,3,2,4,232,3,3,2,\n6,232,0,1,0,5,232,4,5,1,1,0,66,12,5,10,\n3,231,7,0,166,14,12,8,1,5,0,8,111,10,7,1,\n111,3,0,112,14,16,252,60,252,212,60,236,18,57,17,18,\n57,49,0,16,244,60,236,50,57,57,48,75,83,88,7,16,\n8,237,7,16,4,237,7,16,4,237,7,16,8,237,7,16,\n8,237,7,16,4,237,7,16,4,237,7,16,8,237,89,34,\n19,1,21,1,53,1,1,37,1,21,1,53,1,1,193,1,\n213,254,43,1,45,254,211,1,178,1,213,254,43,1,45,254,\n211,4,35,254,94,82,254,94,191,1,12,1,12,191,254,94,\n82,254,94,191,1,12,1,12,0,3,0,236,0,0,7,20,\n0,254,0,3,0,7,0,11,0,35,64,17,8,4,0,131,\n10,6,2,4,25,5,0,25,1,9,25,8,12,16,212,252,\n212,236,212,236,49,0,47,60,60,236,50,50,48,37,51,21,\n35,37,51,21,35,37,51,21,35,3,150,212,212,2,169,213,\n213,250,173,213,213,254,254,254,254,254,254,0,255,255,0,16,\n0,0,5,104,7,107,2,39,0,36,0,0,0,0,0,7,\n1,6,0,188,1,117,255,255,0,16,0,0,5,104,7,94,\n2,39,0,36,0,0,0,0,0,7,1,5,0,188,1,117,\n255,255,0,115,255,227,5,217,7,94,2,39,0,50,0,0,\n0,0,0,7,1,5,1,39,1,117,0,2,0,115,0,0,\n8,12,5,213,0,16,0,25,0,59,64,31,5,149,3,17,\n1,149,0,129,24,7,149,3,173,9,24,18,16,10,21,6,\n2,28,17,0,4,8,21,25,13,16,26,16,252,236,212,196,\n196,212,236,50,18,57,57,57,57,49,0,47,236,236,50,244,\n236,50,16,238,48,1,21,33,17,33,21,33,17,33,21,33,\n32,0,17,16,0,33,23,35,32,0,17,16,0,33,51,7,\n250,253,26,2,199,253,57,2,248,251,215,254,79,254,65,1,\n191,1,177,103,129,254,191,254,192,1,64,1,65,129,5,213,\n170,254,70,170,253,227,170,1,124,1,112,1,109,1,124,170,\n254,225,254,224,254,223,254,223,0,3,0,113,255,227,7,195,\n4,123,0,6,0,39,0,51,0,132,64,49,7,8,0,16,\n134,15,136,12,0,169,8,46,12,185,22,19,40,3,185,8,\n187,34,37,31,184,25,19,140,52,6,0,22,34,49,9,15,\n0,8,7,75,49,18,9,81,43,18,28,69,52,16,252,236,\n244,252,244,236,196,17,18,57,57,18,57,49,0,16,228,50,\n244,60,196,228,236,50,16,196,238,50,16,238,16,244,238,17,\n18,57,48,64,37,63,53,95,53,112,53,159,53,207,53,208,\n53,240,53,7,63,0,63,6,63,7,63,8,63,9,5,111,\n0,111,6,111,7,111,8,111,9,5,93,113,1,93,1,46,\n1,35,34,6,7,5,21,33,30,1,51,50,54,55,21,14,\n1,35,34,38,39,14,1,35,34,0,17,16,0,51,50,22,\n23,62,1,51,50,0,37,34,6,21,20,22,51,50,54,53,\n52,38,7,10,2,164,137,153,185,14,3,72,252,178,12,204,\n183,106,200,98,100,208,106,160,242,81,71,209,140,241,254,239,\n1,17,241,140,211,66,78,232,143,226,1,8,250,176,148,172,\n171,149,147,172,172,2,148,152,179,174,158,53,90,190,199,52,\n52,174,42,44,110,109,110,109,1,57,1,19,1,20,1,56,\n111,108,107,112,254,221,135,231,201,201,231,232,200,199,233,0,\n0,1,0,0,1,233,4,0,2,121,0,3,0,16,182,2,\n169,0,233,4,1,0,47,198,49,0,16,252,236,48,17,33,\n21,33,4,0,252,0,2,121,144,0,0,1,0,0,1,233,\n8,0,2,121,0,3,0,15,181,2,169,0,4,1,0,47,\n204,49,0,16,212,236,48,17,33,21,33,8,0,248,0,2,\n121,144,0,2,0,174,3,233,3,109,5,213,0,5,0,11,\n0,39,64,19,6,0,158,9,3,129,12,9,10,6,25,7,\n3,4,7,0,25,1,12,16,220,252,204,212,204,16,254,212,\n206,49,0,16,244,60,236,50,48,1,35,53,19,51,3,5,\n35,53,19,51,3,1,129,211,164,129,82,1,154,211,164,129,\n82,3,233,173,1,63,254,193,173,173,1,63,254,193,0,2,\n0,174,3,233,3,109,5,213,0,5,0,11,0,39,64,19,\n9,3,158,6,0,129,12,9,10,7,25,6,1,3,4,1,\n25,0,12,16,220,236,212,204,16,220,238,212,206,49,0,16,\n244,60,236,50,48,1,51,21,3,35,19,37,51,21,3,35,\n19,1,0,211,164,129,82,1,154,211,164,129,82,5,213,172,\n254,192,1,64,172,172,254,192,1,64,0,1,0,174,3,233,\n1,211,5,213,0,5,0,24,64,11,0,158,3,129,6,3,\n4,0,25,1,6,16,220,252,212,204,49,0,16,244,236,48,\n1,35,53,19,51,3,1,129,211,164,129,82,3,233,173,1,\n63,254,193,0,0,1,0,178,3,254,1,215,5,213,0,5,\n0,24,64,11,3,158,0,129,6,3,4,1,113,0,6,16,\n220,236,212,204,49,0,16,244,236,48,1,51,21,3,35,19,\n1,4,211,164,129,82,5,213,152,254,193,1,63,0,0,3,\n0,217,0,150,5,219,4,111,0,3,0,7,0,11,0,41,\n64,20,0,234,2,6,234,4,2,8,156,4,10,12,9,5,\n1,114,4,0,8,12,16,220,212,60,252,60,196,49,0,16,\n212,196,252,196,16,238,16,238,48,1,51,21,35,17,51,21,\n35,1,33,21,33,2,223,246,246,246,246,253,250,5,2,250,\n254,4,111,246,254,18,245,2,65,170,0,2,0,6,254,35,\n3,238,6,117,0,3,0,7,0,34,64,17,2,6,0,8,\n4,6,8,6,4,3,2,1,0,6,5,7,8,16,212,204,\n23,57,49,0,16,212,204,17,57,18,57,48,9,7,1,250,\n254,127,1,129,1,129,254,127,1,244,254,12,254,12,5,129,\n252,207,252,199,3,57,4,37,251,219,251,211,4,45,255,255,\n0,61,254,86,4,127,6,16,2,39,0,92,0,0,0,0,\n0,7,0,142,0,94,0,0,255,255,255,252,0,0,4,231,\n7,78,2,39,0,60,0,0,0,0,0,7,1,3,0,115,\n1,117,0,1,254,137,255,227,2,205,5,240,0,3,0,43,\n64,19,0,15,1,2,1,2,15,3,0,3,66,2,140,0,\n145,4,1,3,4,16,212,204,49,0,16,228,228,48,75,83,\n88,7,16,5,237,7,16,5,237,89,34,1,51,1,35,2,\n45,160,252,92,160,5,240,249,243,0,0,2,0,94,0,82,\n4,188,4,178,0,35,0,47,0,131,64,73,3,9,27,21,\n4,45,30,0,39,28,2,33,29,12,18,45,20,11,10,3,\n19,15,1,29,45,185,19,235,15,236,39,185,29,235,33,48,\n30,12,0,18,4,42,36,20,48,28,21,27,42,29,19,28,\n24,9,3,36,11,10,1,3,2,36,40,2,115,6,116,42,\n40,28,115,24,48,16,220,228,236,244,228,236,18,23,57,18,\n57,57,17,18,57,57,18,57,57,17,18,57,17,18,23,57,\n49,0,16,212,228,236,244,228,236,16,192,17,18,23,57,18,\n57,57,17,18,57,57,17,57,57,18,23,57,48,1,55,23,\n7,22,22,21,20,6,7,23,7,39,6,6,35,34,38,39,\n7,39,55,38,38,53,52,54,55,39,55,23,54,54,51,50,\n22,19,52,38,35,34,6,21,20,22,51,50,54,3,123,207,\n114,206,37,36,38,40,209,114,207,59,116,61,58,120,61,207,\n113,207,37,37,38,38,207,115,207,55,116,64,60,117,92,155,\n114,112,158,157,113,113,156,3,225,209,115,206,59,119,62,63,\n115,57,207,113,207,40,38,37,37,207,115,206,62,118,58,64,\n116,56,206,115,207,39,37,36,254,124,112,154,154,112,114,156,\n157,0,0,1,0,158,0,141,2,115,4,35,0,6,0,71,\n64,37,3,232,4,5,4,2,232,1,2,5,5,4,2,232,\n3,2,6,0,6,1,232,0,6,66,2,4,231,0,166,7,\n2,3,0,111,5,110,7,16,252,236,50,57,49,0,16,244,\n236,57,48,75,83,88,7,4,237,7,16,8,237,7,16,8,\n237,7,16,4,237,89,34,1,21,1,1,21,1,53,2,115,\n254,211,1,45,254,43,4,35,191,254,244,254,244,191,1,162,\n82,0,0,1,0,193,0,141,2,150,4,35,0,6,0,73,\n64,38,5,232,6,5,2,3,2,4,232,3,3,2,6,232,\n0,1,0,5,232,4,5,1,1,0,66,5,3,231,0,166,\n7,5,1,111,3,0,112,7,16,252,60,236,57,49,0,16,\n244,236,57,48,75,83,88,7,16,8,237,7,16,4,237,7,\n16,4,237,7,16,8,237,89,34,19,1,21,1,53,1,1,\n193,1,213,254,43,1,45,254,211,4,35,254,94,82,254,94,\n191,1,12,1,12,0,0,2,0,47,0,0,4,74,6,20,\n0,21,0,25,0,155,64,40,11,20,24,7,3,169,0,16,\n135,14,24,190,22,177,14,151,9,0,188,5,1,17,14,15,\n4,22,2,8,0,15,20,4,8,8,23,0,10,6,76,26,\n16,252,60,196,50,196,252,60,196,16,238,50,17,18,57,57,\n49,0,47,60,230,50,238,254,238,16,238,16,238,50,18,57,\n57,48,1,75,176,10,84,88,189,0,26,255,192,0,1,0,\n26,0,26,0,64,56,17,55,56,89,1,75,176,14,84,88,\n189,0,26,0,64,0,1,0,26,0,26,255,192,56,17,55,\n56,89,64,26,16,22,16,23,16,24,16,25,4,48,27,80,\n27,128,15,128,16,128,27,160,27,208,27,239,27,8,93,0,\n93,1,17,35,17,33,17,35,17,35,53,51,53,52,54,59,\n1,21,35,34,6,29,1,1,51,21,35,4,74,185,254,7,\n185,176,176,173,179,185,176,99,77,1,249,185,185,4,96,251,\n160,3,209,252,47,3,209,143,78,183,175,153,80,104,99,1,\n178,233,0,1,0,47,0,0,4,74,6,20,0,21,0,132,\n64,33,8,19,4,15,11,169,9,4,135,0,151,17,9,188,\n13,2,5,0,10,8,3,8,1,10,12,8,8,16,1,18,\n14,76,22,16,252,60,196,196,252,60,196,16,238,17,18,57,\n57,49,0,47,60,230,50,254,238,16,238,50,18,57,57,48,\n1,75,176,10,84,88,189,0,22,255,192,0,1,0,22,0,\n22,0,64,56,17,55,56,89,1,75,176,14,84,88,189,0,\n22,0,64,0,1,0,22,0,22,255,192,56,17,55,56,89,\n64,17,48,23,80,23,128,10,128,11,128,23,160,23,208,23,\n239,23,8,93,1,33,17,35,17,33,34,6,29,1,33,21,\n33,17,35,17,35,53,51,53,52,54,2,74,2,0,185,254,\n183,99,77,1,47,254,209,185,176,176,174,6,20,249,236,5,\n123,80,104,99,143,252,47,3,209,143,78,187,171,0,0,1,\n0,57,255,59,3,199,5,213,0,19,0,62,64,32,18,6,\n185,0,16,8,185,10,4,0,2,14,10,12,129,2,194,20,\n15,0,89,17,13,1,87,9,5,89,11,7,3,20,16,212,\n60,60,236,50,252,60,60,236,50,49,0,16,228,244,196,50,\n16,196,50,16,238,50,16,238,50,48,37,33,17,35,17,33,\n53,33,17,33,53,33,17,51,17,33,21,33,17,33,3,199,\n254,145,176,254,145,1,111,254,145,1,111,176,1,111,254,145,\n1,111,223,254,92,1,164,154,2,31,153,1,164,254,92,153,\n253,225,0,1,0,219,2,72,1,174,3,70,0,3,0,18,\n183,2,131,0,4,1,25,0,4,16,212,236,49,0,16,212,\n236,48,19,51,21,35,219,211,211,3,70,254,0,1,0,174,\n255,18,1,211,0,254,0,5,0,24,64,11,3,158,0,131,\n6,3,4,1,25,0,6,16,212,236,212,204,49,0,16,252,\n236,48,37,51,21,3,35,19,1,0,211,164,129,82,254,172,\n254,192,1,64,0,2,0,174,255,18,3,109,0,254,0,5,\n0,11,0,39,64,19,9,3,158,6,0,131,12,3,4,1,\n25,0,7,9,10,7,25,6,12,16,220,236,212,204,16,220,\n238,212,206,49,0,16,252,60,236,50,48,37,51,21,3,35,\n19,37,51,21,3,35,19,2,154,211,164,129,82,254,102,211,\n164,129,82,254,172,254,192,1,64,172,172,254,192,1,64,0,\n0,7,0,113,255,227,10,76,5,240,0,11,0,23,0,35,\n0,39,0,51,0,63,0,75,0,174,64,68,36,15,37,38,\n37,38,15,39,36,39,66,64,0,146,12,46,146,30,141,40,\n146,24,70,6,146,52,12,141,58,38,18,140,36,24,145,76,\n37,73,67,39,49,43,67,13,61,9,13,15,14,3,13,21,\n49,13,27,61,14,73,13,21,55,43,13,27,14,33,11,76,\n16,252,228,236,212,196,236,228,16,238,16,238,246,238,16,238,\n17,18,57,17,18,57,49,0,16,228,50,244,60,60,228,50,\n236,50,16,238,246,238,16,238,50,48,75,83,88,7,16,5,\n237,7,16,5,237,89,34,1,75,176,20,84,75,176,9,84,\n91,75,176,11,84,91,75,176,12,84,91,75,176,13,84,91,\n75,176,14,84,91,88,189,0,76,0,64,0,1,0,76,0,\n76,255,192,56,17,55,56,89,1,34,6,21,20,22,51,50,\n54,53,52,38,39,50,22,21,20,6,35,34,38,53,52,54,\n1,50,22,21,20,6,35,34,38,53,52,54,33,51,1,35,\n19,34,6,21,20,22,51,50,54,53,52,38,1,50,22,21,\n20,6,35,34,38,53,52,54,23,34,6,21,20,22,51,50,\n54,53,52,38,8,244,87,100,100,87,85,99,99,85,158,186,\n187,157,160,186,187,249,116,158,188,187,159,159,185,186,4,37,\n160,252,90,160,31,86,99,98,87,87,99,100,3,178,158,186,\n187,157,160,186,187,159,87,99,99,87,85,99,99,2,145,148,\n132,130,149,149,130,131,149,127,220,187,187,219,219,187,188,219,\n2,224,219,187,189,218,219,188,186,220,249,243,5,142,149,130,\n132,148,148,132,129,150,253,159,220,187,187,219,219,187,188,219,\n127,148,132,130,149,149,130,131,149,0,255,255,0,16,0,0,\n5,104,7,109,2,39,0,36,0,0,0,0,0,7,1,7,\n0,188,1,117,255,255,0,201,0,0,4,139,7,109,2,39,\n0,40,0,0,0,0,0,7,1,7,0,158,1,117,255,255,\n0,16,0,0,5,104,7,107,2,39,0,36,0,0,0,0,\n0,7,1,4,0,188,1,117,255,255,0,201,0,0,4,139,\n7,78,2,39,0,40,0,0,0,0,0,7,1,3,0,158,\n1,117,255,255,0,201,0,0,4,139,7,107,2,39,0,40,\n0,0,0,0,0,7,1,6,0,158,1,117,255,255,0,162,\n0,0,2,31,7,107,2,39,0,44,0,0,0,0,0,7,\n1,4,255,47,1,117,255,255,255,254,0,0,2,96,7,109,\n2,39,0,44,0,0,0,0,0,7,1,7,255,47,1,117,\n255,255,0,6,0,0,2,88,7,78,2,39,0,44,0,0,\n0,0,0,7,1,3,255,47,1,117,255,255,0,59,0,0,\n1,186,7,107,2,39,0,44,0,0,0,0,0,7,1,6,\n255,47,1,117,255,255,0,115,255,227,5,217,7,107,2,39,\n0,50,0,0,0,0,0,7,1,4,1,39,1,117,255,255,\n0,115,255,227,5,217,7,109,2,39,0,50,0,0,0,0,\n0,7,1,7,1,39,1,117,255,255,0,115,255,227,5,217,\n7,107,2,39,0,50,0,0,0,0,0,7,1,6,1,39,\n1,117,255,255,0,178,255,227,5,41,7,107,2,39,0,56,\n0,0,0,0,0,7,1,4,0,238,1,117,255,255,0,178,\n255,227,5,41,7,109,2,39,0,56,0,0,0,0,0,7,\n1,7,0,238,1,117,255,255,0,178,255,227,5,41,7,107,\n2,39,0,56,0,0,0,0,0,7,1,6,0,238,1,117,\n0,1,0,193,0,0,1,121,4,96,0,3,0,32,183,0,\n191,2,1,8,0,70,4,16,252,236,49,0,47,236,48,64,\n11,16,5,64,5,80,5,96,5,112,5,5,1,93,19,51,\n17,35,193,184,184,4,96,251,160,0,0,1,0,193,4,238,\n3,63,6,102,0,6,0,55,64,12,4,5,2,180,0,179,\n7,4,2,117,6,7,16,220,236,57,49,0,16,244,236,50,\n57,48,0,75,176,9,84,75,176,14,84,91,88,189,0,7,\n255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,1,\n51,19,35,39,7,35,1,182,148,245,139,180,180,139,6,102,\n254,136,245,245,0,1,0,182,5,29,3,74,6,55,0,27,\n0,99,64,36,0,18,7,14,11,4,1,18,7,15,11,4,\n18,195,25,7,4,195,21,11,237,28,15,1,14,0,7,21,\n86,22,119,7,86,8,118,28,16,244,236,252,236,17,57,57,\n57,57,49,0,16,252,60,252,212,60,236,17,18,57,17,18,\n57,17,18,57,17,18,57,48,0,75,176,9,84,75,176,12,\n84,91,88,189,0,28,255,192,0,1,0,28,0,28,0,64,\n56,17,55,56,89,1,39,46,1,35,34,6,7,35,62,1,\n51,50,22,31,1,30,1,51,50,54,55,51,14,1,35,34,\n38,1,252,57,22,33,13,38,36,2,125,2,102,91,38,64,\n37,57,22,33,13,38,36,2,125,2,102,91,38,64,5,90,\n55,20,19,73,82,135,147,28,33,55,20,19,73,82,135,147,\n28,0,0,1,0,213,5,98,3,43,5,246,0,3,0,47,\n183,2,239,0,238,4,1,0,4,16,212,204,49,0,16,252,\n236,48,0,75,176,9,84,75,176,14,84,91,88,189,0,4,\n255,192,0,1,0,4,0,4,0,64,56,17,55,56,89,19,\n33,21,33,213,2,86,253,170,5,246,148,0,0,1,0,199,\n5,41,3,57,6,72,0,13,0,87,64,14,11,240,4,7,\n0,179,14,7,86,8,1,86,0,14,16,220,236,212,236,49,\n0,16,244,60,212,236,48,0,75,176,9,84,88,189,0,14,\n255,192,0,1,0,14,0,14,0,64,56,17,55,56,89,0,\n75,176,15,84,75,176,16,84,91,75,176,17,84,91,88,189,\n0,14,0,64,0,1,0,14,0,14,255,192,56,17,55,56,\n89,19,51,30,1,51,50,54,55,51,14,1,35,34,38,199,\n118,11,97,87,86,96,13,118,10,158,145,145,158,6,72,75,\n75,74,76,143,144,144,0,1,1,154,5,68,2,102,6,16,\n0,3,0,44,64,9,2,206,0,205,4,1,100,0,4,16,\n212,236,49,0,16,252,236,48,0,75,176,9,84,88,189,0,\n4,255,192,0,1,0,4,0,4,0,64,56,17,55,56,89,\n1,51,21,35,1,154,204,204,6,16,204,0,0,2,0,238,\n4,225,3,18,7,6,0,11,0,23,0,95,64,17,3,193,\n21,242,9,193,15,241,24,0,86,12,120,6,86,18,24,16,\n212,236,244,236,49,0,16,244,236,244,236,48,0,75,176,9,\n84,75,176,12,84,91,88,189,0,24,255,192,0,1,0,24,\n0,24,0,64,56,17,55,56,89,1,75,176,10,84,75,176,\n11,84,91,75,176,12,84,91,88,189,0,24,255,192,0,1,\n0,24,0,24,0,64,56,17,55,56,89,1,52,38,35,34,\n6,21,20,22,51,50,54,55,20,6,35,34,38,53,52,54,\n51,50,22,2,152,88,64,65,87,87,65,64,88,122,159,115,\n115,159,159,115,115,159,5,244,63,88,87,64,65,87,88,64,\n115,160,160,115,115,159,159,0,0,1,1,35,254,117,2,193,\n0,0,0,19,0,31,64,14,9,6,10,13,243,6,0,19,\n0,16,39,3,9,20,16,220,212,236,212,204,49,0,47,212,\n252,196,18,57,48,33,22,22,21,20,6,35,34,38,39,53,\n22,22,51,50,54,53,52,38,39,2,84,55,54,120,118,46,\n87,43,34,74,47,59,60,43,45,62,105,48,89,91,12,12,\n131,17,15,48,46,30,87,61,0,2,0,240,4,238,3,174,\n6,102,0,3,0,7,0,66,64,17,6,2,180,4,0,179,\n8,4,7,3,0,5,1,3,5,7,8,16,212,220,212,204,\n17,57,17,18,57,49,0,16,244,60,236,50,48,0,75,176,\n9,84,75,176,14,84,91,88,189,0,8,255,192,0,1,0,\n8,0,8,0,64,56,17,55,56,89,1,51,3,35,3,51,\n3,35,2,252,178,248,135,129,170,223,137,6,102,254,136,1,\n120,254,136,0,0,1,1,76,254,117,2,193,0,0,0,19,\n0,32,64,15,11,14,10,7,243,14,244,0,1,0,10,4,\n39,17,20,16,212,236,196,212,204,49,0,47,252,252,196,18,\n57,48,33,51,6,6,21,20,22,51,50,54,55,21,6,6,\n35,34,38,53,52,54,1,184,119,45,43,55,54,32,62,31,\n38,68,30,122,115,53,61,88,31,46,46,15,15,133,10,10,\n87,93,48,105,0,1,0,193,4,238,3,63,6,102,0,6,\n0,55,64,12,3,0,180,4,1,179,7,3,5,117,1,7,\n16,220,236,57,49,0,16,244,60,236,57,48,0,75,176,9,\n84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7,\n0,7,0,64,56,17,55,56,89,1,3,51,23,55,51,3,\n1,182,245,139,180,180,139,245,4,238,1,120,245,245,254,136,\n0,1,255,242,0,0,4,117,5,213,0,13,0,63,64,30,\n12,11,10,4,3,2,6,0,6,149,0,129,8,3,4,1,\n11,14,0,4,5,1,28,12,7,58,9,0,121,14,16,244,\n60,236,196,252,60,196,17,18,57,17,18,57,49,0,47,228,\n236,17,23,57,48,180,48,15,80,15,2,1,93,19,51,17,\n37,23,1,17,33,21,33,17,7,39,55,211,203,1,57,80,\n254,119,2,215,252,94,148,77,225,5,213,253,152,219,111,254,\n238,253,227,170,2,59,106,110,158,0,0,1,0,2,0,0,\n2,72,6,20,0,11,0,94,64,26,10,9,8,4,3,2,\n6,0,151,6,3,4,1,9,10,0,4,122,5,1,8,10,\n122,7,0,12,16,212,60,228,252,60,228,17,18,57,17,18,\n57,49,0,47,236,23,57,48,1,75,176,16,84,88,189,0,\n12,0,64,0,1,0,12,0,12,255,192,56,17,55,56,89,\n64,19,16,13,64,13,80,13,96,13,115,4,122,10,112,13,\n224,13,240,13,9,93,19,51,17,55,23,7,17,35,17,7,\n39,55,199,184,125,76,201,184,123,74,197,6,20,253,166,90,\n106,141,252,227,2,154,88,106,141,0,255,255,0,135,255,227,\n4,162,7,109,2,39,0,54,0,0,0,0,0,7,1,8,\n0,139,1,117,255,255,0,111,255,227,3,199,6,102,2,39,\n0,86,0,0,0,0,0,7,0,224,0,23,0,0,255,255,\n0,92,0,0,5,31,7,109,2,39,0,61,0,0,0,0,\n0,7,1,8,0,190,1,117,255,255,0,88,0,0,3,219,\n6,102,2,39,0,93,0,0,0,0,0,7,0,224,0,27,\n0,0,0,2,1,4,254,162,1,174,5,152,0,3,0,7,\n0,28,64,13,1,245,0,4,245,5,8,4,0,5,6,2,\n8,16,220,60,236,50,49,0,16,212,236,212,236,48,1,17,\n35,17,19,17,35,17,1,174,170,170,170,1,152,253,10,2,\n246,4,0,253,10,2,246,0,0,2,0,10,0,0,5,186,\n5,213,0,12,0,25,0,103,64,32,16,9,169,11,13,149,\n0,129,18,149,14,11,7,7,1,25,19,4,15,13,22,25,\n4,50,10,17,13,28,8,0,121,26,16,244,60,236,50,196,\n244,236,16,196,23,57,49,0,47,198,50,238,246,238,16,238,\n50,48,64,40,32,27,127,27,176,27,3,159,9,159,10,159,\n11,159,12,159,14,159,15,159,16,159,17,191,9,191,10,191,\n11,191,12,191,14,191,15,191,16,191,17,16,93,1,93,19,\n33,32,0,17,16,0,41,1,17,35,53,51,19,17,33,21,\n33,17,51,32,0,17,16,0,33,211,1,160,1,177,1,150,\n254,105,254,80,254,96,201,201,203,1,80,254,176,243,1,53,\n1,31,254,225,254,203,5,213,254,151,254,128,254,126,254,150,\n2,188,144,1,227,254,29,144,253,234,1,24,1,46,1,44,\n1,23,0,2,0,113,255,227,4,117,6,20,0,14,0,40,\n1,39,64,94,37,123,38,37,30,35,30,36,123,35,35,30,\n15,123,35,30,40,123,39,40,30,35,30,38,39,40,39,37,\n36,37,40,40,39,34,35,34,31,32,31,33,32,32,31,66,\n40,39,38,37,34,33,32,31,8,35,30,3,15,35,3,185,\n27,9,185,21,140,27,35,177,41,38,39,18,12,33,32,24,\n40,37,35,34,31,5,30,15,6,12,18,18,81,6,18,24,\n69,41,16,252,236,244,236,17,57,57,23,57,18,57,57,17,\n18,57,57,49,0,16,236,196,244,236,16,238,18,57,18,57,\n18,23,57,48,75,83,88,7,16,14,201,7,16,8,201,7,\n16,8,201,7,16,14,201,7,16,8,237,7,14,237,7,16,\n5,237,7,16,8,237,89,34,178,63,42,1,1,93,64,118,\n22,37,43,31,40,34,47,35,47,36,41,37,45,38,45,39,\n42,40,54,37,70,37,88,32,88,33,96,32,96,33,102,34,\n117,32,117,33,117,34,19,37,35,37,36,38,38,38,39,39,\n40,54,36,54,37,70,36,69,37,90,32,90,33,98,32,98,\n33,127,0,127,1,127,2,122,3,123,9,127,10,127,11,127,\n12,127,13,127,14,127,15,127,16,127,17,127,18,127,19,127,\n20,123,21,122,27,122,28,127,29,127,30,118,32,118,33,120,\n34,160,42,240,42,39,93,0,93,1,46,1,35,34,6,21,\n20,22,51,50,54,53,52,38,19,22,18,21,20,0,35,34,\n0,53,52,0,51,50,22,23,39,5,39,37,39,51,23,37,\n23,5,3,70,50,88,41,167,185,174,146,145,174,54,9,126,\n114,254,228,230,231,254,229,1,20,221,18,52,42,159,254,193,\n33,1,25,181,228,127,1,77,33,254,217,3,147,17,16,216,\n195,188,222,222,188,122,188,1,38,143,254,224,173,255,254,201,\n1,55,255,250,1,55,5,5,180,107,99,92,204,145,111,97,\n98,0,255,255,255,252,0,0,4,231,7,107,2,39,0,60,\n0,0,0,0,0,7,1,4,0,115,1,117,255,255,0,61,\n254,86,4,127,6,102,2,39,0,92,0,0,0,0,0,7,\n0,141,0,94,0,0,0,2,0,201,0,0,4,141,5,213,\n0,12,0,21,0,61,64,27,14,149,9,13,149,2,246,0,\n129,11,21,15,9,3,4,1,18,25,6,63,13,10,1,28,\n0,4,22,16,252,236,50,50,252,236,17,23,57,49,0,47,\n244,252,236,212,236,48,64,9,15,23,31,23,63,23,95,23,\n4,1,93,19,51,17,51,50,4,21,20,4,43,1,17,35,\n19,17,51,50,54,53,52,38,35,201,202,254,251,1,1,254,\n255,251,254,202,202,254,141,154,153,142,5,213,254,248,225,220,\n220,226,254,174,4,39,253,209,146,134,134,145,0,2,0,186,\n254,86,4,164,6,20,0,16,0,28,0,62,64,27,20,185,\n5,8,26,185,0,14,140,8,184,1,189,3,151,29,17,18,\n11,71,23,4,0,8,2,70,29,16,252,236,50,50,244,236,\n49,0,16,236,228,228,244,196,236,16,198,238,48,64,9,96,\n30,128,30,160,30,224,30,4,1,93,37,17,35,17,51,17,\n62,1,51,50,18,17,16,2,35,34,38,1,52,38,35,34,\n6,21,20,22,51,50,54,1,115,185,185,58,177,123,204,255,\n255,204,123,177,2,56,167,146,146,167,167,146,146,167,168,253,\n174,7,190,253,162,100,97,254,188,254,248,254,248,254,188,97,\n1,235,203,231,231,203,203,231,231,0,0,1,0,217,2,45,\n5,219,2,215,0,3,0,17,182,0,156,2,4,1,0,4,\n16,212,196,49,0,16,212,236,48,19,33,21,33,217,5,2,\n250,254,2,215,170,0,0,1,1,25,0,63,5,156,4,197,\n0,11,0,133,64,77,10,156,11,10,7,8,7,9,156,8,\n8,7,4,156,3,4,7,7,6,5,156,6,7,6,4,156,\n5,4,1,2,1,3,156,2,2,1,11,156,0,1,0,10,\n156,9,10,1,1,0,66,10,8,7,6,4,2,1,0,8,\n5,3,11,9,12,11,10,9,7,5,4,3,1,8,2,0,\n8,6,12,16,212,60,204,50,23,57,49,0,16,212,60,204,\n50,23,57,48,75,83,88,7,16,8,237,7,16,5,237,7,\n16,5,237,7,16,8,237,7,16,5,237,7,16,8,237,7,\n16,5,237,7,16,8,237,89,34,9,2,7,1,1,39,1,\n1,55,1,1,5,156,254,55,1,201,119,254,53,254,53,118,\n1,200,254,56,118,1,203,1,203,4,76,254,53,254,55,121,\n1,203,254,53,121,1,201,1,203,121,254,53,1,203,0,1,\n0,137,2,156,2,197,5,223,0,10,0,44,64,24,7,0,\n221,9,3,221,4,2,221,9,247,5,145,11,8,124,6,93,\n3,124,1,124,0,11,16,220,244,228,252,228,49,0,16,244,\n236,236,212,236,16,238,50,48,19,51,17,7,53,55,51,17,\n51,21,33,156,204,223,230,137,205,253,215,3,10,2,99,41,\n116,39,253,43,110,0,0,1,0,94,2,156,2,180,5,240,\n0,24,0,74,64,36,0,125,6,4,0,23,125,6,6,4,\n66,4,2,0,14,221,15,0,221,2,247,11,221,15,18,145,\n25,0,14,8,126,1,21,14,3,25,16,220,196,212,196,236,\n17,57,49,0,16,244,196,236,252,236,16,238,17,18,57,48,\n75,83,88,7,16,5,237,23,50,7,5,237,89,34,1,33,\n21,33,53,54,55,0,53,52,38,35,34,6,7,53,54,54,\n51,50,22,21,20,1,6,1,12,1,168,253,170,34,63,1,\n88,104,85,52,122,72,77,133,57,145,174,254,181,56,3,14,\n114,110,31,56,1,49,94,66,81,35,35,123,28,28,132,108,\n139,254,228,48,0,1,0,98,2,141,2,205,5,240,0,40,\n0,72,64,39,0,21,19,10,221,9,31,221,32,19,221,21,\n13,221,9,248,6,247,28,221,32,248,35,145,41,22,19,0,\n20,25,126,38,16,126,3,20,31,9,41,16,220,196,196,212,\n236,212,236,17,57,57,57,49,0,16,244,228,236,252,228,236,\n212,236,16,238,16,238,17,18,57,48,1,22,22,21,20,6,\n35,34,38,39,53,22,22,51,50,54,53,52,38,35,35,53,\n51,50,54,53,52,38,35,34,6,7,53,54,54,51,50,22,\n21,20,6,2,12,92,101,190,177,57,125,70,52,119,67,109,\n120,111,108,86,94,94,97,100,95,40,102,81,73,128,55,144,\n169,90,4,96,18,109,82,124,134,21,20,121,27,26,79,70,\n74,76,108,63,60,58,61,18,23,115,17,18,118,99,69,96,\n255,255,0,137,255,227,7,127,5,240,0,39,0,240,0,0,\n0,0,0,39,0,188,3,53,0,0,0,7,1,9,4,139,\n253,100,255,255,0,137,255,227,7,63,5,240,0,39,0,240,\n0,0,0,0,0,39,0,188,3,53,0,0,0,7,0,241,\n4,139,253,100,255,255,0,98,255,227,7,127,5,240,0,39,\n0,242,0,0,0,0,0,39,0,188,3,53,0,0,0,7,\n1,9,4,139,253,100,255,255,0,115,255,227,5,139,7,109,\n2,39,0,42,0,0,0,0,0,7,1,10,1,27,1,117,\n255,255,0,113,254,86,4,90,6,72,2,39,0,74,0,0,\n0,0,0,7,0,218,0,139,0,0,255,255,0,201,0,0,\n1,149,7,80,2,39,0,44,0,0,0,0,0,7,1,11,\n255,47,1,117,255,255,0,135,254,117,4,162,5,240,2,39,\n0,54,0,0,0,0,0,7,0,221,0,139,0,0,255,255,\n0,111,254,117,3,199,4,123,2,39,0,86,0,0,0,0,\n0,7,0,221,0,23,0,0,255,255,0,115,255,227,5,39,\n7,107,2,39,0,38,0,0,0,0,0,7,1,4,1,45,\n1,117,255,255,0,113,255,227,3,231,6,102,2,39,0,70,\n0,0,0,0,0,7,0,141,0,137,0,0,255,255,0,115,\n255,227,5,39,7,109,2,39,0,38,0,0,0,0,0,7,\n1,8,1,45,1,117,255,255,0,113,255,227,3,231,6,102,\n2,39,0,70,0,0,0,0,0,7,0,224,0,137,0,0,\n0,2,0,113,255,227,4,244,6,20,0,24,0,36,0,74,\n64,36,7,3,211,9,1,249,34,185,0,22,28,185,13,16,\n140,22,184,5,151,11,2,31,12,4,3,0,8,8,10,6,\n71,25,18,19,69,37,16,252,236,244,60,196,252,23,60,196,\n49,0,47,236,228,244,196,236,16,196,238,253,60,238,50,48,\n182,96,38,128,38,160,38,3,1,93,1,17,33,53,33,53,\n51,21,51,21,35,17,35,53,14,1,35,34,2,17,16,18,\n51,50,22,1,20,22,51,50,54,53,52,38,35,34,6,3,\n162,254,186,1,70,184,154,154,184,58,177,124,203,255,255,203,\n124,177,253,199,167,146,146,168,168,146,146,167,3,182,1,78,\n125,147,147,125,250,252,168,100,97,1,68,1,8,1,8,1,\n68,97,254,21,203,231,231,203,203,231,231,0,0,1,0,100,\n1,223,2,127,2,131,0,3,0,17,182,0,156,2,4,1,\n0,4,16,220,204,49,0,16,212,236,48,19,33,21,33,100,\n2,27,253,229,2,131,164,0,0,1,0,219,2,72,1,174,\n3,70,0,3,0,18,183,2,131,0,4,1,25,0,4,16,\n212,236,49,0,16,212,236,48,19,51,21,35,219,211,211,3,\n70,254,0,1,0,0,255,227,4,143,5,240,0,49,1,28,\n64,58,32,18,211,34,16,43,7,211,9,25,161,26,174,22,\n149,29,1,161,0,174,4,149,47,145,29,140,41,9,50,43,\n34,33,41,35,38,18,16,10,3,13,9,17,8,44,32,38,\n19,7,17,8,17,13,28,25,0,38,42,33,47,60,212,196,\n50,252,196,196,18,57,57,18,57,57,17,18,57,17,23,57,\n18,57,57,17,57,57,49,0,16,196,50,228,244,236,244,236,\n16,238,246,238,16,238,50,221,60,238,50,48,1,75,176,9,\n84,75,176,12,84,91,75,176,13,84,91,75,176,15,84,91,\n75,176,23,84,91,75,176,24,84,91,88,189,0,50,255,192,\n0,1,0,50,0,50,0,64,56,17,55,56,89,64,122,14,\n0,14,1,11,2,11,49,84,20,105,12,108,14,110,15,111,\n16,111,17,111,18,111,19,105,20,107,31,111,32,111,33,111,\n34,111,35,110,36,108,37,105,39,105,45,159,7,159,8,159,\n9,159,10,159,11,159,12,159,13,159,14,159,15,159,16,159,\n17,159,18,159,19,150,31,159,32,159,33,159,34,159,35,159,\n36,159,37,159,38,159,39,159,40,159,41,159,42,159,43,159,\n44,157,45,50,0,8,0,9,16,8,16,9,32,8,32,9,\n85,21,83,30,106,21,103,31,10,93,0,93,1,21,46,1,\n35,34,6,7,33,7,33,14,1,21,20,22,23,33,7,33,\n30,1,51,50,54,55,21,14,1,35,34,0,3,35,55,51,\n52,38,53,52,54,53,35,55,51,18,0,51,50,22,4,143,\n91,169,102,157,202,32,2,65,55,253,230,2,1,1,2,1,\n190,56,254,138,32,202,157,102,169,91,89,185,96,237,254,203,\n40,211,55,139,1,1,194,55,156,40,1,54,236,98,185,5,\n98,213,105,90,200,187,123,24,46,35,32,46,24,123,187,202,\n90,105,211,72,72,1,34,1,3,123,23,47,32,35,47,23,\n123,1,1,1,34,71,0,2,0,215,5,14,3,41,5,217,\n0,3,0,7,0,165,64,13,4,0,206,6,2,8,1,100,\n0,5,100,4,8,16,212,252,220,236,49,0,16,212,60,236,\n50,48,0,75,176,14,84,75,176,17,84,91,88,189,0,8,\n0,64,0,1,0,8,0,8,255,192,56,17,55,56,89,1,\n75,176,14,84,75,176,13,84,91,75,176,23,84,91,88,189,\n0,8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,\n89,1,75,176,17,84,75,176,25,84,91,88,189,0,8,0,\n64,0,1,0,8,0,8,255,192,56,17,55,56,89,0,75,\n176,24,84,88,189,0,8,255,192,0,1,0,8,0,8,0,\n64,56,17,55,56,89,64,17,96,1,96,2,96,5,96,6,\n112,1,112,2,112,5,112,6,8,1,93,1,51,21,35,37,\n51,21,35,2,94,203,203,254,121,203,203,5,217,203,203,203,\n0,1,1,115,4,238,2,240,5,246,0,3,0,127,64,17,\n2,3,0,3,1,0,0,3,66,0,2,250,4,1,3,3,\n4,16,196,16,192,49,0,16,244,204,48,75,83,88,7,16,\n5,201,7,16,5,201,89,34,0,75,176,12,84,88,189,0,\n4,255,192,0,1,0,4,0,4,0,64,56,17,55,56,89,\n0,75,176,14,84,88,189,0,4,0,64,0,1,0,4,0,\n4,255,192,56,17,55,56,89,64,32,6,2,21,2,37,1,\n37,2,54,2,70,2,86,2,106,1,103,2,9,15,0,15,\n1,31,0,31,1,47,0,47,1,6,93,1,93,1,51,3,\n35,2,55,185,228,153,5,246,254,248,0,1,0,182,5,14,\n3,74,5,233,0,29,0,117,64,33,22,16,15,3,19,12,\n7,1,0,3,8,23,12,195,4,19,195,27,8,250,30,16,\n1,15,0,7,22,86,24,7,86,9,30,16,212,236,212,236,\n17,57,57,57,57,49,0,16,244,60,236,212,236,50,18,23,\n57,17,18,23,57,48,0,75,176,12,84,88,189,0,30,255,\n192,0,1,0,30,0,30,0,64,56,17,55,56,89,0,75,\n176,14,84,88,189,0,30,0,64,0,1,0,30,0,30,255,\n192,56,17,55,56,89,180,16,11,31,26,2,93,1,39,46,\n1,35,34,6,29,1,35,52,54,51,50,22,31,1,30,1,\n51,50,54,61,1,51,14,1,35,34,38,1,252,57,25,31,\n12,36,40,125,103,86,36,61,48,57,23,34,15,32,40,125,\n2,103,84,34,59,5,57,33,14,11,50,45,6,101,118,16,\n27,30,13,12,51,41,6,100,119,16,0,1,1,12,4,238,\n2,139,5,246,0,3,0,137,64,17,1,2,3,2,0,3,\n3,2,66,0,1,250,4,1,3,3,4,16,196,16,192,49,\n0,16,244,204,48,75,83,88,7,16,5,201,7,16,5,201,\n89,34,0,75,176,12,84,88,189,0,4,255,192,0,1,0,\n4,0,4,0,64,56,17,55,56,89,0,75,176,14,84,88,\n189,0,4,0,64,0,1,0,4,0,4,255,192,56,17,55,\n56,89,64,42,6,0,6,1,22,0,18,1,36,0,36,1,\n53,1,67,1,85,0,85,1,159,0,159,1,175,0,175,1,\n14,15,0,15,3,31,0,31,3,47,0,47,3,6,93,1,\n93,1,19,35,3,1,199,196,153,230,5,246,254,248,1,8,\n0,1,0,207,4,238,3,49,5,248,0,6,0,119,64,10,\n4,0,5,2,250,7,4,2,6,7,16,212,196,57,49,0,\n16,244,60,196,57,48,0,75,176,12,84,88,189,0,7,255,\n192,0,1,0,7,0,7,0,64,56,17,55,56,89,0,75,\n176,14,84,88,189,0,7,0,64,0,1,0,7,0,7,255,\n192,56,17,55,56,89,1,75,176,14,84,88,189,0,7,255,\n192,0,1,0,7,0,7,0,64,56,17,55,56,89,64,19,\n15,0,15,1,12,4,31,0,31,1,29,4,47,0,47,1,\n45,4,9,0,93,1,51,19,35,39,7,35,1,162,188,211,\n139,166,166,139,5,248,254,246,178,178,0,1,0,207,4,238,\n3,49,5,248,0,6,0,134,64,10,3,4,1,0,250,7,\n3,5,1,7,16,212,196,57,49,0,16,244,196,50,57,48,\n0,75,176,12,84,75,176,9,84,91,75,176,10,84,91,75,\n176,11,84,91,88,189,0,7,255,192,0,1,0,7,0,7,\n0,64,56,17,55,56,89,0,75,176,14,84,88,189,0,7,\n0,64,0,1,0,7,0,7,255,192,56,17,55,56,89,1,\n75,176,14,84,88,189,0,7,255,192,0,1,0,7,0,7,\n0,64,56,17,55,56,89,64,19,0,0,3,3,0,6,16,\n0,18,3,16,6,32,0,34,3,32,6,9,0,93,1,3,\n51,23,55,51,3,1,162,211,139,166,166,139,211,4,238,1,\n10,178,178,254,246,0,0,2,0,63,2,156,2,244,5,223,\n0,2,0,13,0,212,64,22,0,3,11,7,221,5,1,9,\n247,3,145,14,1,12,10,0,93,6,8,4,12,14,16,220,\n212,60,196,236,50,17,57,49,0,16,244,252,212,60,236,50,\n18,57,48,1,75,176,14,84,75,176,15,84,91,75,176,16,\n84,91,75,176,17,84,91,75,176,11,84,91,75,176,10,84,\n91,88,189,0,14,0,64,0,1,0,14,0,14,255,192,56,\n17,55,56,89,0,75,176,17,84,75,176,14,84,91,88,189,\n0,14,255,192,0,1,0,14,0,14,0,64,56,17,55,56,\n89,64,84,11,1,29,1,47,1,57,1,73,1,70,3,89,\n3,105,3,139,3,171,3,187,3,11,1,0,15,1,15,2,\n15,5,15,6,15,7,15,8,15,11,15,12,15,13,19,0,\n31,1,31,2,31,5,31,6,31,7,31,8,31,11,31,12,\n31,13,34,0,53,0,71,0,75,13,83,0,91,13,101,0,\n132,0,165,0,181,0,30,93,1,93,9,1,33,3,51,17,\n51,21,35,21,35,53,33,53,1,221,254,203,1,53,22,166,\n135,135,144,254,98,5,102,254,93,2,28,253,228,109,186,186,\n121,0,0,1,0,199,5,6,3,57,5,248,0,13,0,106,\n64,14,7,0,4,195,11,250,14,7,86,8,1,86,0,14,\n16,212,236,212,236,49,0,16,244,252,196,50,48,0,75,176,\n12,84,88,189,0,14,255,192,0,1,0,14,0,14,0,64,\n56,17,55,56,89,0,75,176,14,84,88,189,0,14,0,64,\n0,1,0,14,0,14,255,192,56,17,55,56,89,1,75,176,\n14,84,75,176,15,84,91,88,189,0,14,255,192,0,1,0,\n14,0,14,0,64,56,17,55,56,89,19,51,30,1,51,50,\n54,55,51,14,1,35,34,38,199,118,13,99,83,82,97,16,\n118,10,160,143,144,159,5,248,54,57,55,56,119,123,122,0,\n0,1,1,154,5,14,2,102,5,219,0,3,0,17,182,0,\n2,250,4,1,0,4,16,212,204,49,0,16,244,204,48,1,\n51,21,35,1,154,204,204,5,219,205,0,0,0,0,0,2,\n0,1,0,0,0,0,0,20,0,3,0,1,0,0,1,26,\n0,0,1,6,0,0,1,0,0,0,0,0,0,0,1,3,\n0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,1,0,0,3,4,5,6,7,8,9,10,11,12,\n13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,\n29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,\n45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,\n61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,\n77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,\n93,94,95,96,97,0,98,99,100,101,102,103,104,105,106,107,\n108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,\n124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,\n140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,\n156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,\n172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,\n188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,\n204,205,206,207,208,209,0,210,211,212,213,214,215,216,217,218,\n219,220,221,222,223,224,0,4,2,62,0,0,0,58,0,32,\n0,4,0,26,0,126,0,255,1,7,1,17,1,31,1,49,\n1,66,1,83,1,97,1,120,1,126,1,146,2,199,2,221,\n3,169,3,192,32,38,32,48,32,58,32,172,33,34,34,6,\n34,30,34,43,34,72,34,101,37,202,251,2,255,255,0,0,\n0,32,0,160,1,6,1,12,1,30,1,48,1,65,1,82,\n1,94,1,120,1,125,1,146,2,198,2,216,3,169,3,192,\n32,19,32,48,32,57,32,172,33,34,34,2,34,15,34,43,\n34,72,34,96,37,202,251,1,255,255,255,227,0,0,255,245,\n0,0,255,216,0,0,255,160,255,94,0,0,255,67,255,104,\n255,20,0,0,0,0,252,246,252,219,0,0,224,150,224,133,\n224,86,223,106,0,0,0,0,222,113,222,95,0,0,218,239,\n5,191,0,1,0,0,0,56,0,0,0,244,0,0,0,252,\n0,0,0,0,0,250,0,0,0,0,0,0,0,250,0,252,\n0,0,0,0,1,2,0,0,0,0,0,0,0,0,1,32,\n1,40,0,0,0,0,1,66,0,0,0,0,0,0,0,172,\n0,163,0,132,0,133,0,189,0,150,0,231,0,134,0,142,\n0,139,0,157,0,169,0,164,1,0,0,138,0,217,0,131,\n0,147,0,241,0,242,0,141,0,151,0,136,0,195,0,221,\n0,240,0,158,0,170,0,243,0,244,0,245,0,162,0,173,\n0,201,0,199,0,174,0,98,0,99,0,144,0,100,0,203,\n0,101,0,200,0,202,0,207,0,204,0,205,0,206,0,232,\n0,102,0,210,0,208,0,209,0,175,0,103,0,239,0,145,\n0,213,0,211,0,212,0,104,0,234,0,236,0,137,0,106,\n0,105,0,107,0,109,0,108,0,110,0,160,0,111,0,113,\n0,112,0,114,0,115,0,117,0,116,0,118,0,119,0,233,\n0,120,0,122,0,121,0,123,0,125,0,124,0,184,0,161,\n0,127,0,126,0,128,0,129,0,235,0,237,0,186,0,253,\n0,254,0,0,0,0,0,0,0,255,0,248,0,214,0,249,\n0,250,0,227,0,228,0,215,0,224,0,218,0,219,0,220,\n0,223,0,216,0,222,0,178,0,179,0,0,0,0,0,0,\n0,182,0,183,0,196,0,0,0,180,0,181,0,197,0,0,\n0,130,0,194,0,135,0,0,0,0,0,0,0,171,0,152,\n0,0,0,0,0,0,0,168,0,154,0,0,0,153,0,238,\n0,0,0,0,0,188,0,0,0,0,0,0,1,1,0,165,\n0,0,0,0,0,0,0,146,0,143,0,0,0,0,0,0,\n0,148,0,149,4,205,0,102,0,0,0,0,2,139,0,0,\n2,139,0,0,3,53,1,53,3,174,0,197,6,180,0,158,\n5,23,0,170,7,154,0,113,6,61,0,129,2,51,0,197,\n3,31,0,176,3,31,0,164,4,0,0,61,6,180,0,217,\n2,139,0,158,2,227,0,100,2,139,0,219,2,178,0,0,\n5,23,0,135,5,23,0,225,5,23,0,150,5,23,0,156,\n5,23,0,100,5,23,0,158,5,23,0,143,5,23,0,168,\n5,23,0,139,5,23,0,129,2,178,0,240,2,178,0,158,\n6,180,0,217,6,180,0,217,6,180,0,217,4,63,0,147,\n8,0,0,135,5,121,0,16,5,125,0,201,5,150,0,115,\n6,41,0,201,5,14,0,201,4,154,0,201,6,51,0,115,\n6,4,0,201,2,92,0,201,2,92,255,150,5,63,0,201,\n4,117,0,201,6,231,0,201,5,252,0,201,6,76,0,115,\n4,211,0,201,6,76,0,115,5,143,0,201,5,20,0,135,\n4,227,255,250,5,219,0,178,5,121,0,16,7,233,0,68,\n5,123,0,61,4,227,255,252,5,123,0,92,3,31,0,176,\n2,178,0,0,3,31,0,199,6,180,0,217,4,0,255,236,\n4,0,0,170,4,231,0,123,5,20,0,186,4,102,0,113,\n5,20,0,113,4,236,0,113,2,209,0,47,5,20,0,113,\n5,18,0,186,2,57,0,193,2,57,255,219,4,162,0,186,\n2,57,0,193,7,203,0,186,5,18,0,186,4,229,0,113,\n5,20,0,186,5,20,0,113,3,74,0,186,4,43,0,111,\n3,35,0,55,5,18,0,174,4,188,0,61,6,139,0,86,\n4,188,0,59,4,188,0,61,4,51,0,88,5,23,1,0,\n2,178,1,4,5,23,1,0,6,180,0,217,5,121,0,16,\n5,121,0,16,5,150,0,115,5,14,0,201,5,252,0,201,\n6,76,0,115,5,219,0,178,4,231,0,123,4,231,0,123,\n4,231,0,123,4,231,0,123,4,231,0,123,4,231,0,123,\n4,102,0,113,4,236,0,113,4,236,0,113,4,236,0,113,\n4,236,0,113,2,57,0,144,2,57,255,199,2,57,255,222,\n2,57,255,244,5,18,0,186,4,229,0,113,4,229,0,113,\n4,229,0,113,4,229,0,113,4,229,0,113,5,18,0,174,\n5,18,0,174,5,18,0,174,5,18,0,174,4,0,0,57,\n4,0,0,195,5,23,0,172,5,23,0,129,4,0,0,92,\n4,184,1,51,5,23,0,158,5,10,0,186,8,0,1,27,\n8,0,1,27,8,0,1,39,4,0,1,115,4,0,0,215,\n6,180,0,217,7,203,0,8,6,76,0,102,6,170,0,221,\n6,180,0,217,6,180,0,217,6,180,0,217,5,23,0,82,\n5,23,0,174,4,35,0,104,5,100,0,25,6,14,0,156,\n4,182,255,225,4,43,0,47,3,197,0,115,3,197,0,96,\n6,29,0,78,7,219,0,123,4,229,0,72,4,63,0,143,\n3,53,1,53,6,180,0,217,5,25,0,61,5,23,0,31,\n6,180,0,217,5,90,255,250,4,229,0,158,4,229,0,193,\n8,0,0,236,5,23,0,0,5,121,0,16,5,121,0,16,\n6,76,0,115,8,143,0,115,8,47,0,113,4,0,0,0,\n8,0,0,0,4,37,0,174,4,37,0,174,2,139,0,174,\n2,139,0,178,6,180,0,217,3,244,0,6,4,188,0,61,\n4,227,255,252,1,86,254,137,5,23,0,94,3,51,0,158,\n3,51,0,193,5,10,0,47,5,10,0,47,4,0,0,57,\n2,139,0,219,2,139,0,174,4,37,0,174,10,188,0,113,\n5,121,0,16,5,14,0,201,5,121,0,16,5,14,0,201,\n5,14,0,201,2,92,0,162,2,92,255,254,2,92,0,6,\n2,92,0,59,6,76,0,115,6,76,0,115,6,76,0,115,\n5,219,0,178,5,219,0,178,5,219,0,178,2,57,0,193,\n4,0,0,193,4,0,0,182,4,0,0,213,4,0,0,199,\n4,0,1,154,4,0,0,238,4,0,1,35,4,0,0,240,\n4,0,1,76,4,0,0,193,4,127,255,242,2,70,0,2,\n5,20,0,135,4,43,0,111,5,123,0,92,4,51,0,88,\n2,178,1,4,6,51,0,10,4,229,0,113,4,227,255,252,\n4,188,0,61,4,215,0,201,5,20,0,186,6,180,0,217,\n6,180,1,25,3,53,0,137,3,53,0,94,3,53,0,98,\n7,193,0,137,7,193,0,137,7,193,0,98,6,51,0,115,\n5,20,0,113,2,92,0,201,5,20,0,135,4,43,0,111,\n5,150,0,115,4,102,0,113,5,150,0,115,4,102,0,113,\n5,20,0,113,2,227,0,100,2,139,0,219,5,23,0,0,\n4,0,0,215,4,0,1,115,4,0,0,182,4,0,1,12,\n4,0,0,207,4,0,0,207,3,53,0,63,4,0,0,199,\n4,0,1,154,0,2,0,0,0,0,0,0,255,43,0,143,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1,12,0,0,0,1,0,2,0,3,0,4,\n0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,\n0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,\n0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,\n0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,\n0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,\n0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,\n0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,\n0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,\n0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,\n0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84,\n0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,\n0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,\n0,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,\n0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,\n0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,\n0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,\n0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,\n0,141,0,142,0,143,0,144,0,145,0,146,0,147,0,148,\n0,149,0,150,0,151,0,152,0,153,0,154,0,155,0,156,\n0,157,0,158,0,159,0,160,0,161,0,162,0,163,0,164,\n0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,\n0,173,0,174,0,175,0,176,0,177,0,178,0,179,0,180,\n0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,\n0,189,0,190,0,191,0,192,0,193,0,194,0,195,0,196,\n0,197,0,198,0,199,0,200,0,201,0,202,0,203,0,204,\n0,205,0,206,0,207,0,208,0,209,0,211,0,212,0,213,\n0,214,0,215,0,216,0,217,0,218,0,219,0,220,0,221,\n0,222,0,223,0,224,0,225,0,226,0,227,0,228,0,229,\n0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,\n0,238,0,239,0,240,0,241,0,242,0,243,0,245,0,244,\n0,246,0,248,0,249,0,250,0,251,0,252,0,253,0,254,\n0,255,1,0,1,1,1,2,1,3,1,4,1,5,1,6,\n1,7,1,8,1,9,1,10,1,11,1,12,1,13,9,115,\n102,116,104,121,112,104,101,110,14,112,101,114,105,111,100,99,\n101,110,116,101,114,101,100,4,69,117,114,111,5,99,54,52,\n53,57,5,99,54,52,54,48,5,99,54,52,54,49,5,99,\n54,52,54,50,5,99,54,52,54,51,5,99,54,52,54,54,\n5,99,54,52,54,55,5,99,54,52,54,56,5,99,54,52,\n54,57,0,0,0,0,0,34,0,34,0,34,0,34,0,88,\n0,147,0,255,1,182,2,79,3,131,3,178,3,246,4,33,\n4,110,4,152,4,180,4,202,4,222,5,3,5,69,5,130,\n6,5,6,126,6,225,7,76,7,183,7,252,8,101,8,207,\n8,238,9,22,9,82,9,115,9,174,10,31,10,223,11,88,\n11,176,11,251,12,58,12,105,12,147,12,230,13,20,13,61,\n13,122,14,13,14,47,14,172,15,0,15,69,15,133,15,235,\n16,117,16,241,17,41,17,112,17,224,18,189,19,138,19,235,\n20,80,20,139,20,177,20,225,21,3,21,24,21,64,21,214,\n22,34,22,109,22,185,23,35,23,123,23,223,24,27,24,67,\n24,128,24,248,25,22,25,119,25,179,26,4,26,82,26,161,\n26,216,27,135,27,196,28,0,28,157,29,186,30,135,31,119,\n31,232,32,91,32,114,32,243,33,53,33,66,33,226,33,239,\n33,252,34,9,34,22,34,35,34,48,34,61,34,74,34,87,\n34,100,34,113,34,126,34,139,34,152,34,165,34,178,34,191,\n34,204,34,217,34,230,34,243,35,0,35,13,35,26,35,39,\n35,52,35,65,35,78,35,91,35,104,35,148,35,207,36,52,\n36,143,37,51,37,83,37,129,38,20,38,186,39,75,39,144,\n39,183,40,19,40,88,40,195,41,95,42,37,42,92,42,163,\n42,233,43,122,43,211,44,68,44,143,44,177,45,80,45,160,\n46,14,46,82,46,170,47,135,48,65,48,189,49,5,49,33,\n49,80,49,207,50,72,50,122,50,223,51,70,51,112,51,112,\n51,125,51,138,51,151,51,230,52,122,52,143,52,163,52,209,\n52,255,53,28,53,57,53,103,53,145,53,158,53,171,53,207,\n54,91,54,147,54,205,55,67,55,169,55,235,56,0,56,28,\n56,74,57,15,57,28,57,41,57,54,57,67,57,80,57,93,\n57,106,57,119,57,132,57,145,57,158,57,171,57,184,57,197,\n57,210,57,239,58,28,58,123,58,160,58,229,59,8,59,94,\n59,142,59,196,59,244,60,34,60,95,60,167,60,180,60,193,\n60,206,60,219,60,254,61,99,62,59,62,72,62,85,62,152,\n62,231,62,253,63,97,63,141,63,220,64,58,64,75,64,92,\n64,109,64,122,64,135,64,148,64,161,64,174,64,187,64,200,\n64,213,64,226,65,64,65,86,65,107,66,69,66,170,66,247,\n67,95,67,178,67,255,68,85,68,219,69,42,69,63,0,0,\n0,0,0,1,0,0,45,134,0,1,7,148,24,0,0,10,\n21,120,0,16,0,36,255,211,0,16,0,37,255,183,0,16,\n0,38,0,0,0,16,0,39,0,0,0,16,0,41,0,0,\n0,16,0,42,0,75,0,16,0,43,0,0,0,16,0,45,\n0,114,0,16,0,46,0,0,0,16,0,47,0,0,0,16,\n0,50,0,57,0,16,0,51,0,0,0,16,0,52,0,75,\n0,16,0,53,0,0,0,16,0,55,255,68,0,16,0,57,\n255,136,0,16,0,58,255,173,0,16,0,59,255,154,0,16,\n0,60,255,13,0,16,0,61,0,0,0,16,0,73,0,0,\n0,16,0,81,0,0,0,16,0,82,0,38,0,16,0,85,\n0,0,0,16,0,89,255,201,0,16,0,90,0,0,0,16,\n0,92,255,220,0,16,0,98,255,211,0,16,0,100,0,0,\n0,16,0,103,0,57,0,16,0,120,0,0,0,16,0,121,\n0,38,0,16,0,122,0,38,0,16,0,123,0,38,0,16,\n0,124,0,38,0,16,0,125,0,38,0,16,0,137,0,0,\n0,16,0,144,0,0,0,16,0,173,255,211,0,16,0,174,\n255,211,0,16,0,175,0,57,0,16,0,186,255,220,0,16,\n0,187,255,13,0,16,0,199,255,211,0,16,0,201,255,211,\n0,16,0,208,0,57,0,16,0,209,0,57,0,16,0,210,\n0,57,0,16,0,229,0,0,0,16,0,233,0,0,0,16,\n0,234,255,13,0,16,0,235,255,220,0,16,0,236,0,0,\n0,16,0,246,0,75,0,16,0,251,0,0,0,16,0,253,\n0,0,0,36,0,16,255,211,0,36,0,17,255,220,0,36,\n0,29,255,220,0,36,0,36,0,57,0,36,0,38,255,220,\n0,36,0,42,255,220,0,36,0,50,255,220,0,36,0,52,\n255,220,0,36,0,54,0,0,0,36,0,55,255,97,0,36,\n0,56,0,0,0,36,0,57,255,125,0,36,0,58,255,144,\n0,36,0,59,0,0,0,36,0,60,255,97,0,36,0,70,\n255,220,0,36,0,71,255,220,0,36,0,72,255,220,0,36,\n0,73,255,183,0,36,0,82,255,220,0,36,0,84,255,220,\n0,36,0,87,255,220,0,36,0,88,0,0,0,36,0,89,\n255,136,0,36,0,90,255,173,0,36,0,92,255,117,0,36,\n0,98,0,57,0,36,0,100,255,220,0,36,0,103,255,220,\n0,36,0,104,0,0,0,36,0,111,255,220,0,36,0,112,\n255,220,0,36,0,113,255,220,0,36,0,114,255,220,0,36,\n0,115,255,220,0,36,0,121,255,220,0,36,0,122,255,220,\n0,36,0,123,255,220,0,36,0,124,255,220,0,36,0,125,\n255,220,0,36,0,126,0,0,0,36,0,127,0,0,0,36,\n0,128,0,0,0,36,0,129,0,0,0,36,0,169,255,183,\n0,36,0,170,0,0,0,36,0,173,0,57,0,36,0,174,\n0,57,0,36,0,175,255,220,0,36,0,180,254,248,0,36,\n0,181,255,3,0,36,0,186,255,117,0,36,0,187,255,97,\n0,36,0,197,0,47,0,36,0,199,0,57,0,36,0,201,\n0,57,0,36,0,208,255,220,0,36,0,209,255,220,0,36,\n0,210,255,220,0,36,0,211,0,0,0,36,0,212,0,0,\n0,36,0,213,0,0,0,36,0,227,0,0,0,36,0,234,\n255,97,0,36,0,235,255,117,0,36,0,246,255,220,0,36,\n0,249,0,0,0,36,0,251,255,220,0,36,0,252,255,220,\n0,36,0,253,255,220,0,36,0,254,255,220,0,37,0,16,\n0,0,0,37,0,38,255,220,0,37,0,42,255,220,0,37,\n0,50,255,220,0,37,0,54,255,220,0,37,0,57,255,193,\n0,37,0,58,255,183,0,37,0,60,255,144,0,37,0,100,\n255,220,0,37,0,103,255,220,0,37,0,169,255,193,0,37,\n0,170,255,220,0,37,0,175,255,220,0,37,0,180,255,144,\n0,37,0,181,255,144,0,37,0,187,255,144,0,37,0,197,\n255,173,0,37,0,208,255,220,0,37,0,209,255,220,0,37,\n0,210,255,220,0,37,0,227,255,220,0,37,0,234,255,144,\n0,37,0,246,255,220,0,37,0,249,255,220,0,37,0,251,\n255,220,0,37,0,253,255,220,0,38,0,16,0,0,0,38,\n0,36,0,0,0,38,0,54,0,0,0,38,0,60,255,220,\n0,38,0,98,0,0,0,38,0,169,255,220,0,38,0,170,\n255,220,0,38,0,173,0,0,0,38,0,174,0,0,0,38,\n0,180,0,0,0,38,0,181,0,38,0,38,0,187,255,220,\n0,38,0,197,0,0,0,38,0,199,0,0,0,38,0,201,\n0,0,0,38,0,227,0,0,0,38,0,234,255,220,0,38,\n0,249,0,0,0,39,0,16,0,0,0,39,0,36,255,220,\n0,39,0,57,255,220,0,39,0,58,0,0,0,39,0,60,\n255,144,0,39,0,98,255,220,0,39,0,169,255,220,0,39,\n0,170,255,220,0,39,0,173,255,220,0,39,0,174,255,220,\n0,39,0,180,255,211,0,39,0,181,255,201,0,39,0,187,\n255,144,0,39,0,197,255,68,0,39,0,199,255,220,0,39,\n0,201,255,220,0,39,0,234,255,144,0,41,0,16,0,0,\n0,41,0,17,254,183,0,41,0,29,255,97,0,41,0,36,\n255,68,0,41,0,54,255,220,0,41,0,55,255,220,0,41,\n0,68,255,68,0,41,0,72,255,144,0,41,0,76,255,107,\n0,41,0,82,255,183,0,41,0,85,255,107,0,41,0,88,\n255,144,0,41,0,92,255,68,0,41,0,98,255,68,0,41,\n0,105,255,68,0,41,0,106,255,68,0,41,0,107,255,68,\n0,41,0,108,255,68,0,41,0,109,255,68,0,41,0,110,\n255,68,0,41,0,112,255,144,0,41,0,113,255,144,0,41,\n0,114,255,144,0,41,0,115,255,144,0,41,0,121,255,183,\n0,41,0,122,255,183,0,41,0,123,255,183,0,41,0,124,\n255,183,0,41,0,125,255,183,0,41,0,126,255,144,0,41,\n0,127,255,144,0,41,0,128,255,144,0,41,0,129,255,144,\n0,41,0,169,0,0,0,41,0,170,0,0,0,41,0,173,\n255,68,0,41,0,174,255,68,0,41,0,180,255,211,0,41,\n0,181,0,0,0,41,0,186,255,68,0,41,0,197,254,136,\n0,41,0,199,255,68,0,41,0,201,255,68,0,41,0,227,\n255,220,0,41,0,235,255,68,0,41,0,249,255,220,0,42,\n0,16,0,0,0,42,0,36,0,0,0,42,0,55,255,183,\n0,42,0,58,0,0,0,42,0,60,255,154,0,42,0,98,\n0,0,0,42,0,169,255,220,0,42,0,170,255,220,0,42,\n0,173,0,0,0,42,0,174,0,0,0,42,0,180,255,211,\n0,42,0,181,255,211,0,42,0,187,255,154,0,42,0,197,\n255,201,0,42,0,199,0,0,0,42,0,201,0,0,0,42,\n0,234,255,154,0,43,0,16,0,0,0,43,0,17,255,220,\n0,43,0,29,0,0,0,43,0,169,0,0,0,43,0,170,\n0,0,0,43,0,180,255,183,0,43,0,181,255,193,0,43,\n0,197,255,183,0,45,0,16,255,183,0,45,0,36,255,220,\n0,45,0,98,255,220,0,45,0,169,255,220,0,45,0,170,\n255,220,0,45,0,173,255,220,0,45,0,174,255,220,0,45,\n0,180,255,183,0,45,0,181,255,193,0,45,0,197,255,144,\n0,45,0,199,255,220,0,45,0,201,255,220,0,46,0,16,\n255,41,0,46,0,36,255,220,0,46,0,38,255,144,0,46,\n0,50,255,144,0,46,0,55,255,97,0,46,0,56,255,201,\n0,46,0,58,255,183,0,46,0,60,255,183,0,46,0,68,\n255,220,0,46,0,72,255,154,0,46,0,82,255,154,0,46,\n0,88,255,154,0,46,0,92,255,107,0,46,0,98,255,220,\n0,46,0,100,255,144,0,46,0,103,255,144,0,46,0,104,\n255,201,0,46,0,105,255,220,0,46,0,106,255,220,0,46,\n0,107,255,220,0,46,0,108,255,220,0,46,0,109,255,220,\n0,46,0,110,255,220,0,46,0,112,255,154,0,46,0,113,\n255,154,0,46,0,114,255,154,0,46,0,115,255,154,0,46,\n0,121,255,154,0,46,0,122,255,154,0,46,0,123,255,154,\n0,46,0,124,255,154,0,46,0,125,255,154,0,46,0,126,\n255,154,0,46,0,127,255,154,0,46,0,128,255,154,0,46,\n0,129,255,154,0,46,0,169,255,125,0,46,0,170,0,0,\n0,46,0,173,255,220,0,46,0,174,255,220,0,46,0,175,\n255,144,0,46,0,180,255,193,0,46,0,181,255,193,0,46,\n0,186,255,107,0,46,0,187,255,183,0,46,0,197,0,0,\n0,46,0,199,255,220,0,46,0,201,255,220,0,46,0,208,\n255,144,0,46,0,209,255,144,0,46,0,210,255,144,0,46,\n0,211,255,201,0,46,0,212,255,201,0,46,0,213,255,201,\n0,46,0,234,255,183,0,46,0,235,255,107,0,46,0,251,\n255,144,0,46,0,253,255,144,0,47,0,16,255,220,0,47,\n0,36,0,47,0,47,0,50,255,183,0,47,0,55,254,230,\n0,47,0,56,255,154,0,47,0,57,255,31,0,47,0,58,\n255,68,0,47,0,60,254,240,0,47,0,68,0,0,0,47,\n0,72,255,220,0,47,0,82,255,220,0,47,0,88,255,220,\n0,47,0,92,255,68,0,47,0,98,0,47,0,47,0,103,\n255,183,0,47,0,104,255,154,0,47,0,105,0,0,0,47,\n0,106,0,0,0,47,0,107,0,0,0,47,0,108,0,0,\n0,47,0,109,0,0,0,47,0,110,0,0,0,47,0,112,\n255,220,0,47,0,113,255,220,0,47,0,114,255,220,0,47,\n0,115,255,220,0,47,0,121,255,220,0,47,0,122,255,220,\n0,47,0,123,255,220,0,47,0,124,255,220,0,47,0,125,\n255,220,0,47,0,126,255,220,0,47,0,127,255,220,0,47,\n0,128,255,220,0,47,0,129,255,220,0,47,0,169,0,0,\n0,47,0,170,0,0,0,47,0,173,0,47,0,47,0,174,\n0,47,0,47,0,175,255,183,0,47,0,180,254,97,0,47,\n0,181,253,230,0,47,0,186,255,68,0,47,0,187,254,240,\n0,47,0,197,0,0,0,47,0,199,0,47,0,47,0,201,\n0,47,0,47,0,208,255,183,0,47,0,209,255,183,0,47,\n0,210,255,183,0,47,0,211,255,154,0,47,0,212,255,154,\n0,47,0,213,255,154,0,47,0,234,254,240,0,47,0,235,\n255,68,0,50,0,16,0,57,0,50,0,17,255,173,0,50,\n0,29,255,220,0,50,0,36,255,220,0,50,0,57,255,220,\n0,50,0,59,255,125,0,50,0,60,255,144,0,50,0,98,\n255,220,0,50,0,169,255,220,0,50,0,170,0,0,0,50,\n0,173,255,220,0,50,0,174,255,220,0,50,0,180,255,211,\n0,50,0,181,255,220,0,50,0,187,255,144,0,50,0,197,\n255,68,0,50,0,199,255,220,0,50,0,201,255,220,0,50,\n0,234,255,144,0,51,0,16,255,211,0,51,0,17,254,193,\n0,51,0,29,0,0,0,51,0,36,255,125,0,51,0,56,\n0,0,0,51,0,58,0,0,0,51,0,60,255,211,0,51,\n0,68,255,164,0,51,0,72,255,183,0,51,0,76,255,211,\n0,51,0,81,255,220,0,51,0,82,255,183,0,51,0,85,\n255,220,0,51,0,86,255,220,0,51,0,88,255,220,0,51,\n0,92,0,0,0,51,0,98,255,125,0,51,0,104,0,0,\n0,51,0,105,255,164,0,51,0,106,255,164,0,51,0,107,\n255,164,0,51,0,108,255,164,0,51,0,109,255,164,0,51,\n0,110,255,164,0,51,0,112,255,183,0,51,0,113,255,183,\n0,51,0,114,255,183,0,51,0,115,255,183,0,51,0,120,\n255,220,0,51,0,121,255,183,0,51,0,122,255,183,0,51,\n0,123,255,183,0,51,0,124,255,183,0,51,0,125,255,183,\n0,51,0,126,255,220,0,51,0,127,255,220,0,51,0,128,\n255,220,0,51,0,129,255,220,0,51,0,169,255,220,0,51,\n0,170,0,0,0,51,0,173,255,125,0,51,0,174,255,125,\n0,51,0,180,0,38,0,51,0,181,0,38,0,51,0,186,\n0,0,0,51,0,187,255,211,0,51,0,197,254,183,0,51,\n0,199,255,125,0,51,0,201,255,125,0,51,0,211,0,0,\n0,51,0,212,0,0,0,51,0,213,0,0,0,51,0,228,\n255,220,0,51,0,234,255,211,0,51,0,235,0,0,0,51,\n0,250,255,220,0,52,0,16,0,57,0,52,0,169,0,0,\n0,52,0,170,0,0,0,52,0,180,255,211,0,52,0,181,\n255,220,0,52,0,197,255,125,0,53,0,16,255,173,0,53,\n0,17,255,183,0,53,0,29,255,193,0,53,0,36,255,173,\n0,53,0,38,255,154,0,53,0,55,255,107,0,53,0,57,\n255,144,0,53,0,58,255,173,0,53,0,60,255,125,0,53,\n0,68,255,211,0,53,0,72,255,164,0,53,0,82,255,164,\n0,53,0,88,255,164,0,53,0,92,255,144,0,53,0,98,\n255,173,0,53,0,100,255,154,0,53,0,105,255,211,0,53,\n0,106,255,211,0,53,0,107,255,211,0,53,0,108,255,211,\n0,53,0,109,255,211,0,53,0,110,255,211,0,53,0,112,\n255,164,0,53,0,113,255,164,0,53,0,114,255,164,0,53,\n0,115,255,164,0,53,0,121,255,164,0,53,0,122,255,164,\n0,53,0,123,255,164,0,53,0,124,255,164,0,53,0,125,\n255,164,0,53,0,126,255,164,0,53,0,127,255,164,0,53,\n0,128,255,164,0,53,0,129,255,164,0,53,0,169,255,144,\n0,53,0,170,255,220,0,53,0,173,255,173,0,53,0,174,\n255,173,0,53,0,180,255,107,0,53,0,181,255,125,0,53,\n0,186,255,144,0,53,0,187,255,125,0,53,0,197,255,220,\n0,53,0,199,255,173,0,53,0,201,255,173,0,53,0,234,\n255,125,0,53,0,235,255,144,0,53,0,251,255,154,0,53,\n0,253,255,154,0,54,0,36,0,38,0,54,0,38,0,0,\n0,54,0,42,0,0,0,54,0,50,0,0,0,54,0,52,\n0,0,0,54,0,54,0,0,0,54,0,98,0,38,0,54,\n0,100,0,0,0,54,0,103,0,0,0,54,0,173,0,38,\n0,54,0,174,0,38,0,54,0,175,0,0,0,54,0,199,\n0,38,0,54,0,201,0,38,0,54,0,208,0,0,0,54,\n0,209,0,0,0,54,0,210,0,0,0,54,0,227,0,0,\n0,54,0,246,0,0,0,54,0,249,0,0,0,54,0,251,\n0,0,0,54,0,253,0,0,0,55,0,16,255,68,0,55,\n0,17,255,13,0,55,0,29,255,31,0,55,0,36,255,97,\n0,55,0,38,255,136,0,55,0,55,255,220,0,55,0,68,\n254,173,0,55,0,70,254,164,0,55,0,72,254,164,0,55,\n0,76,255,193,0,55,0,82,254,164,0,55,0,85,254,211,\n0,55,0,86,254,173,0,55,0,88,254,201,0,55,0,90,\n254,173,0,55,0,92,254,193,0,55,0,98,255,97,0,55,\n0,100,255,136,0,55,0,105,254,173,0,55,0,106,254,173,\n0,55,0,107,254,173,0,55,0,108,254,173,0,55,0,109,\n254,173,0,55,0,110,254,173,0,55,0,111,254,164,0,55,\n0,112,254,164,0,55,0,113,254,164,0,55,0,114,254,164,\n0,55,0,115,254,164,0,55,0,121,254,164,0,55,0,122,\n254,164,0,55,0,123,254,164,0,55,0,124,254,164,0,55,\n0,125,254,164,0,55,0,126,254,201,0,55,0,127,254,201,\n0,55,0,128,254,201,0,55,0,129,254,201,0,55,0,169,\n255,68,0,55,0,170,255,144,0,55,0,173,255,97,0,55,\n0,174,255,97,0,55,0,180,0,0,0,55,0,181,255,211,\n0,55,0,186,254,193,0,55,0,197,254,248,0,55,0,199,\n255,97,0,55,0,201,255,97,0,55,0,228,254,173,0,55,\n0,235,254,193,0,55,0,250,254,173,0,55,0,251,255,136,\n0,55,0,252,254,164,0,55,0,253,255,136,0,55,0,254,\n254,164,0,56,0,36,0,0,0,56,0,45,0,0,0,56,\n0,61,255,220,0,56,0,98,0,0,0,56,0,173,0,0,\n0,56,0,174,0,0,0,56,0,199,0,0,0,56,0,201,\n0,0,0,56,0,229,255,220,0,57,0,16,255,136,0,57,\n0,17,254,248,0,57,0,29,255,89,0,57,0,36,255,125,\n0,57,0,50,255,220,0,57,0,68,255,97,0,57,0,72,\n255,97,0,57,0,76,255,211,0,57,0,82,255,97,0,57,\n0,88,255,117,0,57,0,92,255,201,0,57,0,98,255,125,\n0,57,0,103,255,220,0,57,0,105,255,97,0,57,0,106,\n255,97,0,57,0,107,255,97,0,57,0,108,255,97,0,57,\n0,109,255,97,0,57,0,110,255,97,0,57,0,112,255,97,\n0,57,0,113,255,97,0,57,0,114,255,97,0,57,0,115,\n255,97,0,57,0,121,255,97,0,57,0,122,255,97,0,57,\n0,123,255,97,0,57,0,124,255,97,0,57,0,125,255,97,\n0,57,0,126,255,117,0,57,0,127,255,117,0,57,0,128,\n255,117,0,57,0,129,255,117,0,57,0,169,255,78,0,57,\n0,170,255,144,0,57,0,173,255,125,0,57,0,174,255,125,\n0,57,0,175,255,220,0,57,0,180,0,0,0,57,0,181,\n0,0,0,57,0,186,255,201,0,57,0,197,254,230,0,57,\n0,199,255,125,0,57,0,201,255,125,0,57,0,208,255,220,\n0,57,0,209,255,220,0,57,0,210,255,220,0,57,0,235,\n255,201,0,58,0,16,255,173,0,58,0,17,255,21,0,58,\n0,29,255,136,0,58,0,36,255,144,0,58,0,68,255,125,\n0,58,0,72,255,136,0,58,0,76,255,211,0,58,0,82,\n255,136,0,58,0,85,255,164,0,58,0,88,255,183,0,58,\n0,92,255,220,0,58,0,98,255,144,0,58,0,105,255,125,\n0,58,0,106,255,125,0,58,0,107,255,125,0,58,0,108,\n255,125,0,58,0,109,255,125,0,58,0,110,255,125,0,58,\n0,112,255,136,0,58,0,113,255,136,0,58,0,114,255,136,\n0,58,0,115,255,136,0,58,0,121,255,136,0,58,0,122,\n255,136,0,58,0,123,255,136,0,58,0,124,255,136,0,58,\n0,125,255,136,0,58,0,126,255,183,0,58,0,127,255,183,\n0,58,0,128,255,183,0,58,0,129,255,183,0,58,0,169,\n255,144,0,58,0,170,255,220,0,58,0,173,255,144,0,58,\n0,174,255,144,0,58,0,180,255,220,0,58,0,181,0,0,\n0,58,0,186,255,220,0,58,0,197,254,248,0,58,0,199,\n255,144,0,58,0,201,255,144,0,58,0,235,255,220,0,59,\n0,16,255,154,0,59,0,36,0,0,0,59,0,38,255,107,\n0,59,0,50,255,125,0,59,0,55,255,220,0,59,0,72,\n255,164,0,59,0,98,0,0,0,59,0,100,255,107,0,59,\n0,103,255,125,0,59,0,112,255,164,0,59,0,113,255,164,\n0,59,0,114,255,164,0,59,0,115,255,164,0,59,0,169,\n255,144,0,59,0,170,0,0,0,59,0,173,0,0,0,59,\n0,174,0,0,0,59,0,175,255,125,0,59,0,180,255,97,\n0,59,0,181,255,173,0,59,0,197,255,211,0,59,0,199,\n0,0,0,59,0,201,0,0,0,59,0,208,255,125,0,59,\n0,209,255,125,0,59,0,210,255,125,0,59,0,251,255,107,\n0,59,0,253,255,107,0,60,0,16,255,13,0,60,0,17,\n254,97,0,60,0,29,254,240,0,60,0,36,255,97,0,60,\n0,38,255,144,0,60,0,50,255,144,0,60,0,68,254,230,\n0,60,0,72,254,240,0,60,0,76,255,183,0,60,0,82,\n254,240,0,60,0,88,255,21,0,60,0,98,255,97,0,60,\n0,100,255,144,0,60,0,103,255,144,0,60,0,105,254,230,\n0,60,0,106,254,230,0,60,0,107,254,230,0,60,0,108,\n254,230,0,60,0,109,254,230,0,60,0,110,254,230,0,60,\n0,112,254,240,0,60,0,113,254,240,0,60,0,114,254,240,\n0,60,0,115,254,240,0,60,0,121,254,240,0,60,0,122,\n254,240,0,60,0,123,254,240,0,60,0,124,254,240,0,60,\n0,125,254,240,0,60,0,126,255,21,0,60,0,127,255,21,\n0,60,0,128,255,21,0,60,0,129,255,21,0,60,0,169,\n255,31,0,60,0,170,255,107,0,60,0,173,255,97,0,60,\n0,174,255,97,0,60,0,175,255,144,0,60,0,180,255,144,\n0,60,0,181,255,220,0,60,0,197,254,248,0,60,0,199,\n255,97,0,60,0,201,255,97,0,60,0,208,255,144,0,60,\n0,209,255,144,0,60,0,210,255,144,0,60,0,251,255,144,\n0,60,0,253,255,144,0,61,0,16,255,220,0,61,0,169,\n0,0,0,61,0,170,0,0,0,61,0,180,255,220,0,61,\n0,181,255,220,0,61,0,197,255,220,0,72,0,91,255,220,\n0,73,0,16,255,144,0,73,0,17,255,107,0,73,0,29,\n255,183,0,73,0,87,255,220,0,73,0,90,255,220,0,73,\n0,92,255,220,0,73,0,169,255,183,0,73,0,170,255,220,\n0,73,0,180,0,65,0,73,0,181,0,0,0,73,0,186,\n255,220,0,73,0,197,255,21,0,73,0,235,255,220,0,78,\n0,68,255,220,0,78,0,72,255,183,0,78,0,82,255,183,\n0,78,0,88,255,193,0,78,0,92,255,183,0,78,0,105,\n255,220,0,78,0,106,255,220,0,78,0,107,255,220,0,78,\n0,108,255,220,0,78,0,109,255,220,0,78,0,110,255,220,\n0,78,0,112,255,183,0,78,0,113,255,183,0,78,0,114,\n255,183,0,78,0,115,255,183,0,78,0,121,255,183,0,78,\n0,122,255,183,0,78,0,123,255,183,0,78,0,124,255,183,\n0,78,0,125,255,183,0,78,0,126,255,193,0,78,0,127,\n255,193,0,78,0,128,255,193,0,78,0,129,255,193,0,78,\n0,186,255,183,0,78,0,235,255,183,0,81,0,16,0,0,\n0,81,0,17,0,0,0,81,0,29,0,0,0,81,0,169,\n0,0,0,81,0,170,0,0,0,81,0,180,255,107,0,81,\n0,181,255,144,0,81,0,197,255,164,0,82,0,16,0,38,\n0,82,0,17,255,220,0,82,0,29,0,0,0,82,0,91,\n255,193,0,82,0,169,0,0,0,82,0,170,0,0,0,82,\n0,180,255,107,0,82,0,181,255,183,0,82,0,197,255,125,\n0,85,0,16,255,125,0,85,0,17,255,68,0,85,0,29,\n255,220,0,85,0,70,255,211,0,85,0,71,255,220,0,85,\n0,72,255,211,0,85,0,73,0,0,0,85,0,74,255,220,\n0,85,0,75,255,220,0,85,0,80,255,220,0,85,0,81,\n255,220,0,85,0,82,255,211,0,85,0,84,255,220,0,85,\n0,85,255,220,0,85,0,88,0,0,0,85,0,89,0,0,\n0,85,0,90,0,0,0,85,0,91,255,201,0,85,0,92,\n0,0,0,85,0,93,0,0,0,85,0,111,255,211,0,85,\n0,112,255,211,0,85,0,113,255,211,0,85,0,114,255,211,\n0,85,0,115,255,211,0,85,0,120,255,220,0,85,0,121,\n255,211,0,85,0,122,255,211,0,85,0,123,255,211,0,85,\n0,124,255,211,0,85,0,125,255,211,0,85,0,126,0,0,\n0,85,0,127,0,0,0,85,0,128,0,0,0,85,0,129,\n0,0,0,85,0,169,255,183,0,85,0,170,0,0,0,85,\n0,180,0,0,0,85,0,181,0,86,0,85,0,186,0,0,\n0,85,0,197,254,201,0,85,0,230,0,0,0,85,0,235,\n0,0,0,85,0,247,255,220,0,85,0,252,255,211,0,85,\n0,254,255,211,0,89,0,16,255,201,0,89,0,17,255,97,\n0,89,0,29,255,144,0,89,0,169,255,220,0,89,0,170,\n255,220,0,89,0,180,0,0,0,89,0,181,255,220,0,89,\n0,197,254,240,0,90,0,16,0,0,0,90,0,17,255,68,\n0,90,0,29,255,144,0,90,0,169,255,220,0,90,0,170,\n255,220,0,90,0,180,0,0,0,90,0,181,0,0,0,90,\n0,197,255,41,0,91,0,70,255,220,0,91,0,72,255,193,\n0,91,0,82,255,193,0,91,0,111,255,220,0,91,0,112,\n255,193,0,91,0,113,255,193,0,91,0,114,255,193,0,91,\n0,115,255,193,0,91,0,121,255,193,0,91,0,122,255,193,\n0,91,0,123,255,193,0,91,0,124,255,193,0,91,0,125,\n255,193,0,91,0,252,255,220,0,91,0,254,255,220,0,92,\n0,16,255,220,0,92,0,17,254,220,0,92,0,29,255,107,\n0,92,0,169,255,220,0,92,0,170,255,220,0,92,0,180,\n0,0,0,92,0,181,0,0,0,92,0,197,254,211,0,98,\n0,16,255,211,0,98,0,17,255,220,0,98,0,29,255,220,\n0,98,0,36,0,57,0,98,0,38,255,220,0,98,0,42,\n255,220,0,98,0,50,255,220,0,98,0,52,255,220,0,98,\n0,54,0,0,0,98,0,55,255,97,0,98,0,56,0,0,\n0,98,0,57,255,125,0,98,0,58,255,144,0,98,0,59,\n0,0,0,98,0,60,255,97,0,98,0,70,255,220,0,98,\n0,71,255,220,0,98,0,72,255,220,0,98,0,73,255,183,\n0,98,0,82,255,220,0,98,0,84,255,220,0,98,0,87,\n255,220,0,98,0,88,0,0,0,98,0,89,255,136,0,98,\n0,90,255,173,0,98,0,92,255,117,0,98,0,98,0,57,\n0,98,0,100,255,220,0,98,0,103,255,220,0,98,0,104,\n0,0,0,98,0,111,255,220,0,98,0,112,255,220,0,98,\n0,113,255,220,0,98,0,114,255,220,0,98,0,115,255,220,\n0,98,0,121,255,220,0,98,0,122,255,220,0,98,0,123,\n255,220,0,98,0,124,255,220,0,98,0,125,255,220,0,98,\n0,126,0,0,0,98,0,127,0,0,0,98,0,128,0,0,\n0,98,0,129,0,0,0,98,0,169,255,183,0,98,0,170,\n0,0,0,98,0,173,0,57,0,98,0,174,0,57,0,98,\n0,175,255,220,0,98,0,180,254,248,0,98,0,181,255,3,\n0,98,0,186,255,117,0,98,0,187,255,97,0,98,0,197,\n0,47,0,98,0,199,0,57,0,98,0,201,0,57,0,98,\n0,208,255,220,0,98,0,209,255,220,0,98,0,210,255,220,\n0,98,0,211,0,0,0,98,0,212,0,0,0,98,0,213,\n0,0,0,98,0,227,0,0,0,98,0,234,255,97,0,98,\n0,235,255,117,0,98,0,246,255,220,0,98,0,249,0,0,\n0,98,0,251,255,220,0,98,0,252,255,220,0,98,0,253,\n255,220,0,98,0,254,255,220,0,100,0,16,0,0,0,100,\n0,36,0,0,0,100,0,54,0,0,0,100,0,60,255,220,\n0,100,0,98,0,0,0,100,0,169,255,220,0,100,0,170,\n255,220,0,100,0,173,0,0,0,100,0,174,0,0,0,100,\n0,180,0,0,0,100,0,181,0,38,0,100,0,187,255,220,\n0,100,0,197,0,0,0,100,0,199,0,0,0,100,0,201,\n0,0,0,100,0,227,0,0,0,100,0,234,255,220,0,100,\n0,249,0,0,0,103,0,16,0,57,0,103,0,17,255,173,\n0,103,0,29,255,220,0,103,0,36,255,220,0,103,0,57,\n255,220,0,103,0,59,255,125,0,103,0,60,255,144,0,103,\n0,98,255,220,0,103,0,169,255,220,0,103,0,170,0,0,\n0,103,0,173,255,220,0,103,0,174,255,220,0,103,0,180,\n255,211,0,103,0,181,255,220,0,103,0,187,255,144,0,103,\n0,197,255,68,0,103,0,199,255,220,0,103,0,201,255,220,\n0,103,0,234,255,144,0,104,0,36,0,0,0,104,0,45,\n0,0,0,104,0,61,255,220,0,104,0,98,0,0,0,104,\n0,173,0,0,0,104,0,174,0,0,0,104,0,199,0,0,\n0,104,0,201,0,0,0,104,0,229,255,220,0,112,0,91,\n255,220,0,113,0,91,255,220,0,114,0,91,255,220,0,115,\n0,91,255,220,0,120,0,16,0,0,0,120,0,17,0,0,\n0,120,0,29,0,0,0,120,0,169,0,0,0,120,0,170,\n0,0,0,120,0,180,255,107,0,120,0,181,255,144,0,120,\n0,197,255,164,0,121,0,16,0,38,0,121,0,17,255,220,\n0,121,0,29,0,0,0,121,0,91,255,193,0,121,0,169,\n0,0,0,121,0,170,0,0,0,121,0,180,255,107,0,121,\n0,181,255,183,0,121,0,197,255,125,0,122,0,16,0,38,\n0,122,0,17,255,220,0,122,0,29,0,0,0,122,0,91,\n255,193,0,122,0,169,0,0,0,122,0,170,0,0,0,122,\n0,180,255,107,0,122,0,181,255,183,0,122,0,197,255,125,\n0,123,0,16,0,38,0,123,0,17,255,220,0,123,0,29,\n0,0,0,123,0,91,255,193,0,123,0,169,0,0,0,123,\n0,170,0,0,0,123,0,180,255,107,0,123,0,181,255,183,\n0,123,0,197,255,125,0,124,0,16,0,38,0,124,0,17,\n255,220,0,124,0,29,0,0,0,124,0,91,255,193,0,124,\n0,169,0,0,0,124,0,170,0,0,0,124,0,180,255,107,\n0,124,0,181,255,183,0,124,0,197,255,125,0,125,0,16,\n0,38,0,125,0,17,255,220,0,125,0,29,0,0,0,125,\n0,91,255,193,0,125,0,169,0,0,0,125,0,170,0,0,\n0,125,0,180,255,107,0,125,0,181,255,183,0,125,0,197,\n255,125,0,137,0,16,0,38,0,137,0,169,0,0,0,137,\n0,170,0,0,0,137,0,180,255,144,0,137,0,181,255,144,\n0,137,0,197,255,173,0,144,0,16,0,0,0,144,0,169,\n0,0,0,144,0,170,0,0,0,144,0,180,255,173,0,144,\n0,181,255,164,0,144,0,197,255,144,0,169,0,36,0,0,\n0,169,0,37,255,220,0,169,0,38,255,220,0,169,0,39,\n255,220,0,169,0,41,0,0,0,169,0,42,255,220,0,169,\n0,43,0,0,0,169,0,45,255,220,0,169,0,46,0,0,\n0,169,0,47,0,0,0,169,0,50,0,0,0,169,0,51,\n0,0,0,169,0,52,0,0,0,169,0,53,0,0,0,169,\n0,55,255,144,0,169,0,57,255,144,0,169,0,58,255,220,\n0,169,0,59,0,0,0,169,0,60,255,107,0,169,0,61,\n0,0,0,169,0,73,0,0,0,169,0,81,0,0,0,169,\n0,82,0,0,0,169,0,85,0,0,0,169,0,89,255,220,\n0,169,0,90,255,220,0,169,0,92,255,220,0,169,0,98,\n0,0,0,169,0,100,255,220,0,169,0,103,0,0,0,169,\n0,120,0,0,0,169,0,121,0,0,0,169,0,122,0,0,\n0,169,0,123,0,0,0,169,0,124,0,0,0,169,0,125,\n0,0,0,169,0,137,0,0,0,169,0,144,0,151,0,169,\n0,173,0,0,0,169,0,174,0,0,0,169,0,175,0,0,\n0,169,0,186,255,220,0,169,0,187,255,107,0,169,0,199,\n0,0,0,169,0,201,0,0,0,169,0,208,0,0,0,169,\n0,209,0,0,0,169,0,210,0,0,0,169,0,229,0,0,\n0,169,0,233,0,0,0,169,0,234,255,107,0,169,0,235,\n255,220,0,169,0,236,0,0,0,169,0,246,255,220,0,169,\n0,251,255,220,0,169,0,253,255,220,0,170,0,36,255,183,\n0,170,0,37,255,183,0,170,0,38,255,220,0,170,0,39,\n255,220,0,170,0,41,0,0,0,170,0,42,0,0,0,170,\n0,43,0,0,0,170,0,45,255,220,0,170,0,46,0,0,\n0,170,0,47,0,0,0,170,0,50,255,220,0,170,0,51,\n0,0,0,170,0,52,0,0,0,170,0,53,0,0,0,170,\n0,55,255,68,0,170,0,57,255,78,0,170,0,58,255,144,\n0,170,0,59,255,144,0,170,0,60,255,31,0,170,0,61,\n0,0,0,170,0,73,0,0,0,170,0,81,0,0,0,170,\n0,82,0,0,0,170,0,85,0,0,0,170,0,89,255,220,\n0,170,0,90,255,220,0,170,0,92,255,220,0,170,0,98,\n255,183,0,170,0,100,255,220,0,170,0,103,255,220,0,170,\n0,120,0,0,0,170,0,121,0,0,0,170,0,122,0,0,\n0,170,0,123,0,0,0,170,0,124,0,0,0,170,0,125,\n0,0,0,170,0,137,0,0,0,170,0,144,0,0,0,170,\n0,173,255,183,0,170,0,174,255,183,0,170,0,175,255,220,\n0,170,0,186,255,220,0,170,0,187,255,31,0,170,0,199,\n255,183,0,170,0,201,255,183,0,170,0,208,255,220,0,170,\n0,209,255,220,0,170,0,210,255,220,0,170,0,229,0,0,\n0,170,0,233,0,0,0,170,0,234,255,31,0,170,0,235,\n255,220,0,170,0,236,0,0,0,170,0,246,0,0,0,170,\n0,251,255,220,0,170,0,253,255,220,0,173,0,16,255,211,\n0,173,0,17,255,220,0,173,0,29,255,220,0,173,0,36,\n0,57,0,173,0,38,255,220,0,173,0,42,255,220,0,173,\n0,50,255,220,0,173,0,52,255,220,0,173,0,54,0,0,\n0,173,0,55,255,97,0,173,0,56,0,0,0,173,0,57,\n255,125,0,173,0,58,255,144,0,173,0,59,0,0,0,173,\n0,60,255,97,0,173,0,70,255,220,0,173,0,71,255,220,\n0,173,0,72,255,220,0,173,0,73,255,183,0,173,0,82,\n255,220,0,173,0,84,255,220,0,173,0,87,255,220,0,173,\n0,88,0,0,0,173,0,89,255,136,0,173,0,90,255,173,\n0,173,0,92,255,117,0,173,0,98,0,57,0,173,0,100,\n255,220,0,173,0,103,255,220,0,173,0,104,0,0,0,173,\n0,111,255,220,0,173,0,112,255,220,0,173,0,113,255,220,\n0,173,0,114,255,220,0,173,0,115,255,220,0,173,0,121,\n255,220,0,173,0,122,255,220,0,173,0,123,255,220,0,173,\n0,124,255,220,0,173,0,125,255,220,0,173,0,126,0,0,\n0,173,0,127,0,0,0,173,0,128,0,0,0,173,0,129,\n0,0,0,173,0,169,255,183,0,173,0,170,0,0,0,173,\n0,173,0,57,0,173,0,174,0,57,0,173,0,175,255,220,\n0,173,0,180,254,248,0,173,0,181,255,3,0,173,0,186,\n255,117,0,173,0,187,255,97,0,173,0,197,0,47,0,173,\n0,199,0,57,0,173,0,201,0,57,0,173,0,208,255,220,\n0,173,0,209,255,220,0,173,0,210,255,220,0,173,0,211,\n0,0,0,173,0,212,0,0,0,173,0,213,0,0,0,173,\n0,227,0,0,0,173,0,234,255,97,0,173,0,235,255,117,\n0,173,0,246,255,220,0,173,0,249,0,0,0,173,0,251,\n255,220,0,173,0,252,255,220,0,173,0,253,255,220,0,173,\n0,254,255,220,0,174,0,16,255,211,0,174,0,17,255,220,\n0,174,0,29,255,220,0,174,0,36,0,57,0,174,0,38,\n255,220,0,174,0,42,255,220,0,174,0,50,255,220,0,174,\n0,52,255,220,0,174,0,54,0,0,0,174,0,55,255,97,\n0,174,0,56,0,0,0,174,0,57,255,125,0,174,0,58,\n255,144,0,174,0,59,0,0,0,174,0,60,255,97,0,174,\n0,70,255,220,0,174,0,71,255,220,0,174,0,72,255,220,\n0,174,0,73,255,183,0,174,0,82,255,220,0,174,0,84,\n255,220,0,174,0,87,255,220,0,174,0,88,0,0,0,174,\n0,89,255,136,0,174,0,90,255,173,0,174,0,92,255,117,\n0,174,0,98,0,57,0,174,0,100,255,220,0,174,0,103,\n255,220,0,174,0,104,0,0,0,174,0,111,255,220,0,174,\n0,112,255,220,0,174,0,113,255,220,0,174,0,114,255,220,\n0,174,0,115,255,220,0,174,0,121,255,220,0,174,0,122,\n255,220,0,174,0,123,255,220,0,174,0,124,255,220,0,174,\n0,125,255,220,0,174,0,126,0,0,0,174,0,127,0,0,\n0,174,0,128,0,0,0,174,0,129,0,0,0,174,0,169,\n255,183,0,174,0,170,0,0,0,174,0,173,0,57,0,174,\n0,174,0,57,0,174,0,175,255,220,0,174,0,180,254,248,\n0,174,0,181,255,3,0,174,0,186,255,117,0,174,0,187,\n255,97,0,174,0,197,0,47,0,174,0,199,0,57,0,174,\n0,201,0,57,0,174,0,208,255,220,0,174,0,209,255,220,\n0,174,0,210,255,220,0,174,0,211,0,0,0,174,0,212,\n0,0,0,174,0,213,0,0,0,174,0,227,0,0,0,174,\n0,234,255,97,0,174,0,235,255,117,0,174,0,246,255,220,\n0,174,0,249,0,0,0,174,0,251,255,220,0,174,0,252,\n255,220,0,174,0,253,255,220,0,174,0,254,255,220,0,175,\n0,16,0,57,0,175,0,17,255,173,0,175,0,29,255,220,\n0,175,0,36,255,220,0,175,0,57,255,220,0,175,0,59,\n255,125,0,175,0,60,255,144,0,175,0,98,255,220,0,175,\n0,169,255,220,0,175,0,170,0,0,0,175,0,173,255,220,\n0,175,0,174,255,220,0,175,0,180,255,211,0,175,0,181,\n255,220,0,175,0,187,255,144,0,175,0,197,255,68,0,175,\n0,199,255,220,0,175,0,201,255,220,0,175,0,234,255,144,\n0,180,0,36,254,248,0,180,0,37,255,193,0,180,0,38,\n255,183,0,180,0,39,255,193,0,180,0,41,255,193,0,180,\n0,42,255,183,0,180,0,43,255,193,0,180,0,45,255,193,\n0,180,0,46,255,193,0,180,0,47,255,193,0,180,0,50,\n255,183,0,180,0,51,255,193,0,180,0,52,255,183,0,180,\n0,53,255,193,0,180,0,55,0,0,0,180,0,57,0,0,\n0,180,0,58,0,0,0,180,0,59,255,136,0,180,0,60,\n0,0,0,180,0,61,255,220,0,180,0,73,255,183,0,180,\n0,81,255,144,0,180,0,82,255,107,0,180,0,85,255,144,\n0,180,0,89,255,183,0,180,0,90,255,183,0,180,0,92,\n255,183,0,180,0,98,254,248,0,180,0,100,255,183,0,180,\n0,103,255,183,0,180,0,120,255,144,0,180,0,121,255,107,\n0,180,0,122,255,107,0,180,0,123,255,107,0,180,0,124,\n255,107,0,180,0,125,255,107,0,180,0,137,255,193,0,180,\n0,144,254,125,0,180,0,173,254,248,0,180,0,174,254,248,\n0,180,0,175,255,183,0,180,0,186,255,183,0,180,0,187,\n0,0,0,180,0,199,254,248,0,180,0,201,254,248,0,180,\n0,208,255,183,0,180,0,209,255,183,0,180,0,210,255,183,\n0,180,0,229,255,220,0,180,0,233,255,183,0,180,0,234,\n0,0,0,180,0,235,255,183,0,180,0,236,255,193,0,180,\n0,246,255,183,0,180,0,251,255,183,0,180,0,253,255,183,\n0,186,0,16,255,220,0,186,0,17,254,220,0,186,0,29,\n255,107,0,186,0,169,255,220,0,186,0,170,255,220,0,186,\n0,180,0,0,0,186,0,181,0,0,0,186,0,197,254,211,\n0,187,0,16,255,13,0,187,0,17,254,97,0,187,0,29,\n254,240,0,187,0,36,255,97,0,187,0,38,255,144,0,187,\n0,50,255,144,0,187,0,68,254,230,0,187,0,72,254,240,\n0,187,0,76,255,183,0,187,0,82,254,240,0,187,0,88,\n255,21,0,187,0,98,255,97,0,187,0,100,255,144,0,187,\n0,103,255,144,0,187,0,105,254,230,0,187,0,106,254,230,\n0,187,0,107,254,230,0,187,0,108,254,230,0,187,0,109,\n254,230,0,187,0,110,254,230,0,187,0,112,254,240,0,187,\n0,113,254,240,0,187,0,114,254,240,0,187,0,115,254,240,\n0,187,0,121,254,240,0,187,0,122,254,240,0,187,0,123,\n254,240,0,187,0,124,254,240,0,187,0,125,254,240,0,187,\n0,126,255,21,0,187,0,127,255,21,0,187,0,128,255,21,\n0,187,0,129,255,21,0,187,0,169,255,31,0,187,0,170,\n255,107,0,187,0,173,255,97,0,187,0,174,255,97,0,187,\n0,175,255,144,0,187,0,180,255,144,0,187,0,181,255,220,\n0,187,0,197,254,248,0,187,0,199,255,97,0,187,0,201,\n255,97,0,187,0,208,255,144,0,187,0,209,255,144,0,187,\n0,210,255,144,0,187,0,251,255,144,0,187,0,253,255,144,\n0,197,0,36,0,38,0,197,0,37,255,183,0,197,0,38,\n255,144,0,197,0,39,255,183,0,197,0,41,255,183,0,197,\n0,42,255,183,0,197,0,43,255,183,0,197,0,45,0,47,\n0,197,0,46,255,183,0,197,0,47,255,183,0,197,0,50,\n255,144,0,197,0,51,255,183,0,197,0,52,255,144,0,197,\n0,53,255,183,0,197,0,55,254,230,0,197,0,57,254,136,\n0,197,0,58,255,3,0,197,0,59,255,183,0,197,0,60,\n254,136,0,197,0,61,0,0,0,197,0,73,255,220,0,197,\n0,81,255,183,0,197,0,82,255,183,0,197,0,85,255,183,\n0,197,0,89,255,21,0,197,0,90,255,60,0,197,0,92,\n255,144,0,197,0,98,0,38,0,197,0,100,255,144,0,197,\n0,103,255,144,0,197,0,120,255,183,0,197,0,121,255,183,\n0,197,0,122,255,183,0,197,0,123,255,183,0,197,0,124,\n255,183,0,197,0,125,255,183,0,197,0,137,255,183,0,197,\n0,144,0,38,0,197,0,173,0,38,0,197,0,174,0,38,\n0,197,0,175,255,144,0,197,0,186,255,144,0,197,0,187,\n254,136,0,197,0,199,0,38,0,197,0,201,0,38,0,197,\n0,208,255,144,0,197,0,209,255,144,0,197,0,210,255,144,\n0,197,0,229,0,0,0,197,0,233,255,183,0,197,0,234,\n254,136,0,197,0,235,255,144,0,197,0,236,255,183,0,197,\n0,246,255,183,0,197,0,251,255,144,0,197,0,253,255,144,\n0,199,0,16,255,211,0,199,0,17,255,220,0,199,0,29,\n255,220,0,199,0,36,0,57,0,199,0,38,255,220,0,199,\n0,42,255,220,0,199,0,50,255,220,0,199,0,52,255,220,\n0,199,0,54,0,0,0,199,0,55,255,97,0,199,0,56,\n0,0,0,199,0,57,255,125,0,199,0,58,255,144,0,199,\n0,59,0,0,0,199,0,60,255,97,0,199,0,70,255,220,\n0,199,0,71,255,220,0,199,0,72,255,220,0,199,0,73,\n255,183,0,199,0,82,255,220,0,199,0,84,255,220,0,199,\n0,87,255,220,0,199,0,88,0,0,0,199,0,89,255,136,\n0,199,0,90,255,173,0,199,0,92,255,117,0,199,0,98,\n0,57,0,199,0,100,255,220,0,199,0,103,255,220,0,199,\n0,104,0,0,0,199,0,111,255,220,0,199,0,112,255,220,\n0,199,0,113,255,220,0,199,0,114,255,220,0,199,0,115,\n255,220,0,199,0,121,255,220,0,199,0,122,255,220,0,199,\n0,123,255,220,0,199,0,124,255,220,0,199,0,125,255,220,\n0,199,0,126,0,0,0,199,0,127,0,0,0,199,0,128,\n0,0,0,199,0,129,0,0,0,199,0,169,255,183,0,199,\n0,170,0,0,0,199,0,173,0,57,0,199,0,174,0,57,\n0,199,0,175,255,220,0,199,0,180,254,248,0,199,0,181,\n255,3,0,199,0,186,255,117,0,199,0,187,255,97,0,199,\n0,197,0,47,0,199,0,199,0,57,0,199,0,201,0,57,\n0,199,0,208,255,220,0,199,0,209,255,220,0,199,0,210,\n255,220,0,199,0,211,0,0,0,199,0,212,0,0,0,199,\n0,213,0,0,0,199,0,227,0,0,0,199,0,234,255,97,\n0,199,0,235,255,117,0,199,0,246,255,220,0,199,0,249,\n0,0,0,199,0,251,255,220,0,199,0,252,255,220,0,199,\n0,253,255,220,0,199,0,254,255,220,0,201,0,16,255,211,\n0,201,0,17,255,220,0,201,0,29,255,220,0,201,0,36,\n0,57,0,201,0,38,255,220,0,201,0,42,255,220,0,201,\n0,50,255,220,0,201,0,52,255,220,0,201,0,54,0,0,\n0,201,0,55,255,97,0,201,0,56,0,0,0,201,0,57,\n255,125,0,201,0,58,255,144,0,201,0,59,0,0,0,201,\n0,60,255,97,0,201,0,70,255,220,0,201,0,71,255,220,\n0,201,0,72,255,220,0,201,0,73,255,183,0,201,0,82,\n255,220,0,201,0,84,255,220,0,201,0,87,255,220,0,201,\n0,88,0,0,0,201,0,89,255,136,0,201,0,90,255,173,\n0,201,0,92,255,117,0,201,0,98,0,57,0,201,0,100,\n255,220,0,201,0,103,255,220,0,201,0,104,0,0,0,201,\n0,111,255,220,0,201,0,112,255,220,0,201,0,113,255,220,\n0,201,0,114,255,220,0,201,0,115,255,220,0,201,0,121,\n255,220,0,201,0,122,255,220,0,201,0,123,255,220,0,201,\n0,124,255,220,0,201,0,125,255,220,0,201,0,126,0,0,\n0,201,0,127,0,0,0,201,0,128,0,0,0,201,0,129,\n0,0,0,201,0,169,255,183,0,201,0,170,0,0,0,201,\n0,173,0,57,0,201,0,174,0,57,0,201,0,175,255,220,\n0,201,0,180,254,248,0,201,0,181,255,3,0,201,0,186,\n255,117,0,201,0,187,255,97,0,201,0,197,0,47,0,201,\n0,199,0,57,0,201,0,201,0,57,0,201,0,208,255,220,\n0,201,0,209,255,220,0,201,0,210,255,220,0,201,0,211,\n0,0,0,201,0,212,0,0,0,201,0,213,0,0,0,201,\n0,227,0,0,0,201,0,234,255,97,0,201,0,235,255,117,\n0,201,0,246,255,220,0,201,0,249,0,0,0,201,0,251,\n255,220,0,201,0,252,255,220,0,201,0,253,255,220,0,201,\n0,254,255,220,0,208,0,16,0,57,0,208,0,17,255,173,\n0,208,0,29,255,220,0,208,0,36,255,220,0,208,0,57,\n255,220,0,208,0,59,255,125,0,208,0,60,255,144,0,208,\n0,98,255,220,0,208,0,169,255,220,0,208,0,170,0,0,\n0,208,0,173,255,220,0,208,0,174,255,220,0,208,0,180,\n255,211,0,208,0,181,255,220,0,208,0,187,255,144,0,208,\n0,197,255,68,0,208,0,199,255,220,0,208,0,201,255,220,\n0,208,0,234,255,144,0,209,0,16,0,57,0,209,0,17,\n255,173,0,209,0,29,255,220,0,209,0,36,255,220,0,209,\n0,57,255,220,0,209,0,59,255,125,0,209,0,60,255,144,\n0,209,0,98,255,220,0,209,0,169,255,220,0,209,0,170,\n0,0,0,209,0,173,255,220,0,209,0,174,255,220,0,209,\n0,180,255,211,0,209,0,181,255,220,0,209,0,187,255,144,\n0,209,0,197,255,68,0,209,0,199,255,220,0,209,0,201,\n255,220,0,209,0,234,255,144,0,210,0,16,0,57,0,210,\n0,17,255,173,0,210,0,29,255,220,0,210,0,36,255,220,\n0,210,0,57,255,220,0,210,0,59,255,125,0,210,0,60,\n255,144,0,210,0,98,255,220,0,210,0,169,255,220,0,210,\n0,170,0,0,0,210,0,173,255,220,0,210,0,174,255,220,\n0,210,0,180,255,211,0,210,0,181,255,220,0,210,0,187,\n255,144,0,210,0,197,255,68,0,210,0,199,255,220,0,210,\n0,201,255,220,0,210,0,234,255,144,0,211,0,36,0,0,\n0,211,0,45,0,0,0,211,0,61,255,220,0,211,0,98,\n0,0,0,211,0,173,0,0,0,211,0,174,0,0,0,211,\n0,199,0,0,0,211,0,201,0,0,0,211,0,229,255,220,\n0,212,0,36,0,0,0,212,0,45,0,0,0,212,0,61,\n255,220,0,212,0,98,0,0,0,212,0,173,0,0,0,212,\n0,174,0,0,0,212,0,199,0,0,0,212,0,201,0,0,\n0,212,0,229,255,220,0,213,0,36,0,0,0,213,0,45,\n0,0,0,213,0,61,255,220,0,213,0,98,0,0,0,213,\n0,173,0,0,0,213,0,174,0,0,0,213,0,199,0,0,\n0,213,0,201,0,0,0,213,0,229,255,220,0,227,0,36,\n0,38,0,227,0,38,0,0,0,227,0,42,0,0,0,227,\n0,50,0,0,0,227,0,52,0,0,0,227,0,54,0,0,\n0,227,0,98,0,38,0,227,0,100,0,0,0,227,0,103,\n0,0,0,227,0,173,0,38,0,227,0,174,0,38,0,227,\n0,175,0,0,0,227,0,199,0,38,0,227,0,201,0,38,\n0,227,0,208,0,0,0,227,0,209,0,0,0,227,0,210,\n0,0,0,227,0,227,0,0,0,227,0,246,0,0,0,227,\n0,249,0,0,0,227,0,251,0,0,0,227,0,253,0,0,\n0,229,0,16,255,220,0,229,0,169,0,0,0,229,0,170,\n0,0,0,229,0,180,255,220,0,229,0,181,255,220,0,229,\n0,197,255,220,0,233,0,16,0,0,0,233,0,169,0,0,\n0,233,0,170,0,0,0,233,0,180,255,164,0,233,0,181,\n255,144,0,233,0,197,255,183,0,234,0,16,255,13,0,234,\n0,17,254,97,0,234,0,29,254,240,0,234,0,36,255,97,\n0,234,0,38,255,144,0,234,0,50,255,144,0,234,0,68,\n254,230,0,234,0,72,254,240,0,234,0,76,255,183,0,234,\n0,82,254,240,0,234,0,88,255,21,0,234,0,98,255,97,\n0,234,0,100,255,144,0,234,0,103,255,144,0,234,0,105,\n254,230,0,234,0,106,254,230,0,234,0,107,254,230,0,234,\n0,108,254,230,0,234,0,109,254,230,0,234,0,110,254,230,\n0,234,0,112,254,240,0,234,0,113,254,240,0,234,0,114,\n254,240,0,234,0,115,254,240,0,234,0,121,254,240,0,234,\n0,122,254,240,0,234,0,123,254,240,0,234,0,124,254,240,\n0,234,0,125,254,240,0,234,0,126,255,21,0,234,0,127,\n255,21,0,234,0,128,255,21,0,234,0,129,255,21,0,234,\n0,169,255,31,0,234,0,170,255,107,0,234,0,173,255,97,\n0,234,0,174,255,97,0,234,0,175,255,144,0,234,0,180,\n255,144,0,234,0,181,255,220,0,234,0,197,254,248,0,234,\n0,199,255,97,0,234,0,201,255,97,0,234,0,208,255,144,\n0,234,0,209,255,144,0,234,0,210,255,144,0,234,0,251,\n255,144,0,234,0,253,255,144,0,235,0,16,255,220,0,235,\n0,17,254,220,0,235,0,29,255,107,0,235,0,169,255,220,\n0,235,0,170,255,220,0,235,0,180,0,0,0,235,0,181,\n0,0,0,235,0,197,254,211,0,236,0,16,0,0,0,236,\n0,17,255,107,0,236,0,29,255,183,0,236,0,169,0,0,\n0,236,0,170,0,0,0,236,0,180,255,220,0,236,0,181,\n0,0,0,236,0,197,255,68,0,246,0,16,0,0,0,246,\n0,36,0,0,0,246,0,55,255,183,0,246,0,58,0,0,\n0,246,0,60,255,154,0,246,0,98,0,0,0,246,0,169,\n255,220,0,246,0,170,255,220,0,246,0,173,0,0,0,246,\n0,174,0,0,0,246,0,180,255,211,0,246,0,181,255,211,\n0,246,0,187,255,154,0,246,0,197,255,201,0,246,0,199,\n0,0,0,246,0,201,0,0,0,246,0,234,255,154,0,249,\n0,36,0,38,0,249,0,38,0,0,0,249,0,42,0,0,\n0,249,0,50,0,0,0,249,0,52,0,0,0,249,0,54,\n0,0,0,249,0,98,0,38,0,249,0,100,0,0,0,249,\n0,103,0,0,0,249,0,173,0,38,0,249,0,174,0,38,\n0,249,0,175,0,0,0,249,0,199,0,38,0,249,0,201,\n0,38,0,249,0,208,0,0,0,249,0,209,0,0,0,249,\n0,210,0,0,0,249,0,227,0,0,0,249,0,246,0,0,\n0,249,0,249,0,0,0,249,0,251,0,0,0,249,0,253,\n0,0,0,251,0,16,0,0,0,251,0,36,0,0,0,251,\n0,54,0,0,0,251,0,60,255,220,0,251,0,98,0,0,\n0,251,0,169,255,220,0,251,0,170,255,220,0,251,0,173,\n0,0,0,251,0,174,0,0,0,251,0,180,0,0,0,251,\n0,181,0,38,0,251,0,187,255,220,0,251,0,197,0,0,\n0,251,0,199,0,0,0,251,0,201,0,0,0,251,0,227,\n0,0,0,251,0,234,255,220,0,251,0,249,0,0,0,253,\n0,16,0,0,0,253,0,36,0,0,0,253,0,54,0,0,\n0,253,0,60,255,220,0,253,0,98,0,0,0,253,0,169,\n255,220,0,253,0,170,255,220,0,253,0,173,0,0,0,253,\n0,174,0,0,0,253,0,180,0,0,0,253,0,181,0,38,\n0,253,0,187,255,220,0,253,0,197,0,0,0,253,0,199,\n0,0,0,253,0,201,0,0,0,253,0,227,0,0,0,253,\n0,234,255,220,0,253,0,249,0,0,0,0,0,1,0,0,\n1,12,0,77,0,7,0,66,0,4,0,2,0,16,0,64,\n0,7,0,0,4,21,5,104,0,3,0,1,0,1,0,0,\n7,109,254,29,0,0,10,188,254,137,254,137,10,76,0,1,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,\n0,1,4,14,1,144,0,5,0,4,5,71,4,204,0,0,\n254,66,5,71,4,204,0,0,2,83,0,143,2,102,8,2,\n2,11,6,3,3,8,4,2,2,4,128,0,0,175,16,0,\n32,74,0,0,0,0,0,0,0,0,66,105,116,115,0,64,\n0,32,251,2,6,20,254,20,1,154,7,109,1,227,0,0,\n0,1,0,0,0,0,0,0,0,1,0,0,66,0,29,177,\n2,139,4,96,0,0,35,99,5,213,0,0,86,101,114,97,\n83,97,110,115,0,0,0,0,0,0,0,0,255,255,255,255,\n54,255,255,254,54,50,56,82,48,48,0,0,64,0,0,0,\n0,0,0,20,0,0,1,16,9,12,5,0,3,3,3,4,\n8,6,9,8,2,4,4,5,8,3,3,3,3,6,6,6,\n6,6,6,6,6,6,6,3,3,8,8,8,5,10,6,7,\n7,7,6,6,7,7,3,3,6,5,8,7,7,6,7,6,\n7,5,7,6,7,6,5,5,4,3,4,8,5,5,6,6,\n6,6,6,3,6,6,3,3,5,3,9,6,6,6,6,4,\n5,4,6,5,7,5,5,6,5,3,5,8,6,6,7,6,\n7,7,7,6,6,6,6,6,6,6,6,6,6,6,3,3,\n3,3,6,6,6,6,6,6,6,6,6,6,5,5,6,6,\n5,5,6,6,9,9,9,5,5,8,9,7,8,8,8,8,\n6,6,5,6,7,5,5,4,4,7,9,6,5,3,8,6,\n6,8,6,6,6,9,6,6,6,7,10,9,5,9,5,5,\n3,3,8,4,5,5,2,6,4,4,6,6,5,3,3,5,\n12,6,6,6,6,6,3,3,3,3,7,7,7,7,7,7,\n3,5,5,5,5,5,5,5,5,5,5,5,3,7,5,5,\n6,3,7,6,5,5,6,6,8,8,4,4,4,9,9,9,\n7,6,3,7,5,7,6,7,6,6,3,3,6,5,5,5,\n5,5,5,4,5,5,0,0,10,13,6,0,3,3,4,5,\n8,6,10,9,3,4,4,5,8,3,4,3,3,6,6,6,\n6,6,6,6,6,6,6,3,3,8,8,8,5,11,7,7,\n8,8,7,6,8,8,3,3,7,6,9,8,8,7,8,7,\n7,5,8,7,9,6,7,6,4,3,4,8,5,5,6,6,\n5,6,6,4,6,6,2,2,5,2,10,6,6,6,6,4,\n5,4,6,6,8,6,6,5,6,3,6,8,7,7,8,7,\n8,8,8,6,6,6,6,6,6,5,6,6,6,6,2,2,\n2,2,6,6,6,6,6,6,6,6,6,6,5,5,6,6,\n5,6,6,6,10,10,10,5,5,8,10,8,8,8,8,8,\n6,7,5,7,8,6,5,5,5,8,10,6,5,4,8,6,\n6,8,7,6,6,10,6,7,7,8,11,10,5,10,5,5,\n3,3,8,5,6,7,2,6,4,4,6,6,5,3,3,5,\n13,7,7,7,7,7,3,3,3,3,8,8,8,8,8,8,\n2,5,5,5,5,5,5,5,5,5,5,6,2,7,5,6,\n5,3,8,6,7,6,7,6,8,8,4,4,4,10,10,10,\n8,6,3,7,5,8,5,8,5,6,4,3,6,5,5,5,\n5,5,5,4,5,5,0,0,11,15,7,0,3,3,3,5,\n9,7,10,10,3,4,4,6,9,4,4,4,4,7,7,7,\n7,7,7,7,7,7,7,4,4,9,9,9,6,12,7,8,\n8,8,7,6,9,8,3,3,7,6,9,8,9,7,9,7,\n8,7,8,7,9,7,7,9,4,4,4,9,6,6,7,7,\n6,7,7,4,7,7,3,3,6,3,11,7,7,7,7,5,\n7,4,7,6,9,6,6,5,7,4,7,9,7,7,8,7,\n8,9,8,7,7,7,7,7,7,6,7,7,7,7,3,3,\n3,3,7,7,7,7,7,7,7,7,7,7,6,6,7,7,\n6,6,7,7,11,11,11,6,6,9,11,9,9,9,9,9,\n7,7,6,7,8,6,6,5,5,8,11,7,6,3,9,7,\n7,9,7,7,7,11,7,7,7,9,12,11,6,11,6,6,\n4,4,9,5,6,7,2,7,4,4,7,7,6,4,4,6,\n15,7,7,7,7,7,3,3,3,3,9,9,9,8,8,8,\n3,6,6,6,6,6,6,6,6,6,6,6,3,8,7,9,\n5,4,8,7,7,6,7,7,9,9,4,4,4,11,11,11,\n9,7,3,8,7,8,6,8,6,7,4,4,7,6,6,6,\n6,6,6,4,6,6,0,0,12,16,7,0,4,4,5,5,\n10,8,11,10,3,5,5,6,10,4,4,4,4,8,8,8,\n8,8,8,8,8,8,8,4,4,10,10,10,6,13,8,8,\n8,9,8,7,9,9,3,3,7,6,10,9,9,8,9,8,\n8,7,9,8,11,9,7,9,5,4,5,10,6,6,8,8,\n7,8,8,4,8,8,3,3,7,3,11,8,8,8,8,5,\n7,5,8,6,9,6,6,5,8,4,8,10,8,8,8,8,\n9,9,9,8,8,8,8,8,8,7,8,8,8,8,3,3,\n3,3,8,8,8,8,8,8,8,8,8,8,6,6,8,8,\n6,7,8,8,12,12,12,6,6,10,12,9,10,10,10,10,\n8,8,6,8,9,7,6,6,6,9,12,8,6,5,10,8,\n8,10,8,7,7,12,8,8,8,9,13,13,6,12,6,6,\n4,4,10,6,6,7,2,8,5,5,7,7,6,4,4,6,\n16,8,8,8,8,8,3,3,3,3,9,9,9,9,9,9,\n3,6,6,6,6,6,6,6,6,6,6,6,3,8,7,9,\n5,4,9,8,7,6,8,8,10,10,5,5,5,12,12,12,\n9,8,3,8,7,8,7,8,7,8,4,4,8,6,6,6,\n6,6,6,5,6,6,0,0,13,17,8,0,4,4,5,5,\n11,8,12,11,3,5,5,7,11,4,5,4,4,8,8,8,\n8,8,8,8,8,8,8,4,4,11,11,11,7,13,9,9,\n9,10,8,7,10,10,3,3,8,7,11,10,10,8,10,8,\n9,7,10,9,11,10,7,10,5,4,5,11,7,7,8,8,\n7,8,8,4,8,8,3,3,7,3,13,8,8,8,8,5,\n7,5,8,7,9,7,7,7,8,4,8,11,9,9,9,8,\n10,10,10,8,8,8,8,8,8,7,8,8,8,8,3,3,\n3,3,8,8,8,8,8,8,8,8,8,8,7,7,8,8,\n7,8,8,8,13,13,13,7,7,11,13,10,11,11,11,11,\n8,8,7,9,10,8,7,6,6,10,13,8,7,5,11,8,\n8,11,9,8,8,13,8,9,9,10,14,13,7,13,7,7,\n4,4,11,6,7,7,2,8,5,5,8,8,7,4,4,7,\n17,9,8,9,8,8,3,3,3,3,10,10,10,10,10,10,\n3,7,7,7,7,7,7,7,7,7,7,7,3,9,7,10,\n7,4,10,8,7,7,8,8,11,11,5,5,5,13,13,13,\n10,8,3,9,7,9,7,9,7,8,5,4,8,7,7,7,\n7,7,7,5,7,7,0,0,14,19,8,0,4,4,5,5,\n12,9,13,12,3,5,5,7,12,4,5,4,5,9,9,9,\n9,9,9,9,9,9,9,5,5,12,12,12,7,14,9,10,\n10,11,9,8,11,10,3,3,9,7,12,10,11,9,11,10,\n9,9,10,9,13,11,9,10,5,5,5,12,7,7,8,9,\n8,9,9,4,9,9,3,3,8,3,13,9,9,9,9,5,\n8,5,9,7,11,7,7,8,9,5,9,12,9,9,10,9,\n10,11,10,8,8,8,8,8,8,8,9,9,9,9,3,3,\n3,3,9,9,9,9,9,9,9,9,9,9,7,7,9,9,\n7,8,9,9,14,14,14,7,7,12,14,11,12,12,12,12,\n9,9,7,9,11,8,7,7,7,11,14,9,7,5,12,9,\n9,12,9,9,9,14,9,9,9,11,15,15,7,14,7,7,\n4,4,12,7,7,9,2,9,6,6,8,8,7,4,4,7,\n19,9,9,9,9,9,3,3,3,3,11,11,11,10,10,10,\n3,7,7,7,7,7,7,7,7,7,7,7,3,9,8,10,\n8,5,11,9,9,7,9,9,12,12,6,6,6,14,14,14,\n11,9,3,9,8,10,8,10,8,9,5,4,9,7,7,7,\n7,7,7,6,7,7,0,0,15,20,9,0,5,5,6,6,\n13,10,14,11,3,6,6,8,13,5,5,5,5,10,10,10,\n10,10,10,10,10,10,10,5,5,13,13,13,8,15,10,10,\n10,11,9,9,12,11,3,3,10,8,13,11,12,9,12,10,\n10,9,11,10,15,10,9,11,6,5,6,13,8,8,9,9,\n8,9,9,5,9,9,3,3,8,3,15,9,9,9,9,6,\n8,6,9,8,13,10,8,8,10,5,10,13,10,10,10,9,\n11,12,11,9,9,9,9,9,9,8,9,9,9,9,3,3,\n3,3,9,9,9,9,9,9,9,9,9,9,8,8,10,10,\n8,9,10,9,15,15,15,8,8,13,15,12,13,13,13,13,\n10,9,8,10,11,9,8,7,7,11,15,9,8,6,13,10,\n10,13,10,9,9,15,10,10,10,12,16,15,8,15,8,8,\n5,5,13,7,8,9,3,10,6,6,9,9,8,5,5,8,\n20,10,9,10,9,9,3,3,3,3,12,12,12,11,11,11,\n3,8,8,8,8,8,8,8,8,8,8,8,3,10,8,11,\n8,5,12,9,9,8,9,9,13,13,6,6,6,15,15,15,\n12,9,3,10,8,10,8,10,8,9,5,5,10,8,8,8,\n8,8,8,6,8,8,0,0,16,21,10,0,5,5,6,6,\n13,10,15,12,3,6,6,8,13,5,6,5,5,10,10,10,\n10,10,10,10,10,10,10,5,5,13,13,13,9,16,11,11,\n11,12,10,9,12,12,5,5,10,9,13,12,13,10,13,11,\n10,9,12,11,17,11,9,12,6,5,6,13,8,8,9,10,\n9,10,9,6,10,10,3,3,9,3,15,10,10,10,10,7,\n9,6,10,9,13,10,9,9,10,5,10,13,11,11,11,10,\n12,13,12,9,9,9,9,9,9,9,9,9,9,9,3,3,\n3,3,10,10,10,10,10,10,10,10,10,10,8,8,10,10,\n8,9,10,10,16,16,16,8,8,13,16,13,13,13,13,13,\n10,10,8,11,12,9,8,8,8,12,16,10,9,6,13,10,\n10,13,11,10,10,16,10,11,11,13,17,15,8,16,8,8,\n5,5,13,8,9,9,3,10,6,6,10,10,8,5,5,8,\n21,11,10,11,10,10,5,5,5,5,13,13,13,12,12,12,\n3,8,8,8,8,8,8,8,8,8,8,9,4,10,9,12,\n9,5,13,10,9,9,10,10,13,13,6,6,6,16,16,16,\n12,10,5,10,9,11,9,11,9,10,6,5,10,8,8,8,\n8,8,8,6,8,8,0,0,17,23,10,0,5,5,7,8,\n14,11,16,13,5,7,7,9,14,5,6,5,6,11,11,11,\n11,11,11,11,11,11,11,6,6,14,14,14,9,17,11,12,\n12,13,11,10,13,13,6,6,12,9,15,13,13,10,13,12,\n11,10,13,11,18,13,10,12,7,6,7,14,9,9,10,10,\n8,10,10,6,10,11,5,5,10,5,17,11,10,10,10,7,\n8,7,11,10,15,10,10,8,11,6,11,14,11,11,12,11,\n13,13,13,10,10,10,10,10,10,8,10,10,10,10,5,5,\n5,5,11,10,10,10,10,10,11,11,11,11,9,9,11,11,\n9,10,11,11,17,17,17,9,9,14,16,13,14,14,14,14,\n11,11,9,11,13,10,9,8,8,13,16,10,9,7,14,11,\n11,14,11,10,10,17,11,11,11,13,18,17,9,17,9,9,\n5,5,14,8,10,10,3,11,7,7,10,10,9,5,5,9,\n23,11,11,11,11,11,6,6,6,6,13,13,13,13,13,13,\n5,9,9,9,9,9,9,9,9,9,9,10,5,11,8,12,\n8,6,13,10,10,10,10,10,14,14,7,7,7,16,16,16,\n13,10,6,11,8,12,8,12,8,10,6,5,11,9,9,9,\n9,9,9,7,9,9,0,0,18,24,11,0,6,6,7,8,\n15,11,17,13,4,7,7,9,15,6,7,6,6,11,11,11,\n11,11,11,11,11,11,11,6,6,15,15,15,10,18,12,12,\n13,14,11,10,14,14,6,6,12,10,16,14,14,11,14,13,\n11,12,14,12,19,13,12,13,7,6,7,15,9,9,10,11,\n9,11,11,6,11,11,5,5,10,5,17,11,11,11,11,8,\n8,7,11,11,16,11,11,9,11,6,11,15,12,12,13,11,\n14,14,14,10,10,10,10,10,10,9,11,11,11,11,5,5,\n5,5,11,11,11,11,11,11,11,11,11,11,9,9,11,11,\n9,11,11,11,18,18,18,9,9,15,17,14,15,15,15,15,\n11,11,9,12,14,11,9,8,8,14,17,11,10,7,15,11,\n11,15,12,11,11,18,11,12,12,14,19,19,9,18,9,9,\n6,6,15,9,11,12,3,11,7,7,11,11,9,6,6,9,\n24,12,11,12,11,11,6,6,6,6,14,14,14,14,14,14,\n5,9,9,9,9,9,9,9,9,9,9,10,5,11,8,13,\n9,6,14,11,12,11,11,11,15,15,7,7,7,17,17,17,\n14,11,6,11,8,13,9,13,9,11,7,6,11,9,9,9,\n9,9,9,7,9,9,0,0,19,26,11,0,6,6,8,8,\n16,12,18,14,4,7,7,10,16,6,7,6,6,12,12,12,\n12,12,12,12,12,12,12,6,6,16,16,16,10,19,13,13,\n13,15,12,11,15,14,6,6,12,11,16,14,15,12,15,13,\n12,12,14,13,20,14,12,13,7,6,7,16,10,10,11,11,\n9,11,11,6,11,12,5,5,11,5,17,12,11,11,11,8,\n9,8,12,11,17,11,11,11,12,6,12,16,13,13,13,12,\n14,15,14,11,11,11,11,11,11,9,11,11,11,11,5,5,\n5,5,12,11,11,11,11,11,12,12,12,12,10,10,12,12,\n10,11,12,12,19,19,19,10,10,16,18,15,16,16,16,16,\n12,12,10,13,14,11,10,9,9,15,18,11,10,8,16,12,\n12,16,13,12,12,19,12,13,13,15,20,19,10,19,10,10,\n6,6,16,9,11,12,3,12,8,8,11,11,10,6,6,10,\n26,13,12,13,12,12,6,6,6,6,15,15,15,14,14,14,\n5,10,10,10,10,10,10,10,10,10,10,11,5,12,9,13,\n11,6,15,11,12,11,12,11,16,16,8,8,8,18,18,18,\n15,11,6,12,9,13,9,13,9,11,7,6,12,10,10,10,\n10,10,10,8,10,10,0,0,20,27,12,0,6,6,8,10,\n17,13,19,15,6,8,8,10,17,6,7,6,7,13,13,13,\n13,13,13,13,13,13,13,7,7,17,17,17,11,20,14,14,\n14,15,13,12,16,15,6,6,13,11,17,15,16,12,16,14,\n13,12,15,14,20,14,12,14,8,7,8,17,10,10,12,13,\n11,13,12,7,13,13,6,6,12,6,20,13,12,13,13,8,\n10,8,13,11,17,11,11,11,13,7,13,17,14,14,14,13,\n15,16,15,12,12,12,12,12,12,11,12,12,12,12,6,6,\n6,6,13,12,12,12,12,12,13,13,13,13,10,10,13,13,\n10,12,13,13,20,20,20,10,10,17,20,16,17,17,17,17,\n13,13,10,13,15,12,10,9,9,15,19,12,11,8,17,13,\n13,17,13,12,12,20,13,14,14,16,21,20,10,20,10,10,\n6,6,17,10,11,12,3,13,8,8,13,13,10,6,6,10,\n27,14,13,14,13,13,6,6,6,6,16,16,16,15,15,15,\n6,10,10,10,10,10,10,10,10,10,10,11,6,13,10,14,\n11,7,15,12,12,11,12,13,17,17,8,8,8,19,19,19,\n16,13,6,13,10,14,11,14,11,13,7,6,13,10,10,10,\n10,10,10,8,10,10,0,0,21,28,13,0,7,7,8,10,\n18,13,20,16,6,8,8,11,18,7,8,7,7,13,13,13,\n13,13,13,13,13,13,13,7,7,18,18,18,11,21,14,14,\n15,16,13,12,16,16,6,6,14,12,18,16,17,13,17,15,\n13,13,15,14,21,14,13,14,8,7,8,18,11,11,13,13,\n12,13,13,7,13,13,6,6,12,6,20,14,13,13,13,9,\n11,8,14,11,17,13,13,11,13,7,13,18,14,14,15,13,\n16,17,15,13,13,13,13,13,13,12,13,13,13,13,6,6,\n6,6,14,13,13,13,13,13,14,14,14,14,11,11,13,13,\n11,12,13,13,21,21,21,11,11,18,20,17,18,18,18,18,\n13,14,11,14,16,12,11,10,10,16,20,13,11,8,18,13,\n13,18,14,13,13,21,13,14,14,17,22,22,11,21,11,11,\n7,7,18,10,13,13,4,13,8,8,13,13,11,7,7,11,\n28,14,13,14,13,13,6,6,6,6,17,17,17,15,15,15,\n6,11,11,11,11,11,11,11,11,11,11,12,6,13,11,14,\n11,7,16,13,13,13,13,13,18,18,8,8,8,20,20,20,\n16,13,6,13,11,15,12,15,12,13,8,7,13,11,11,11,\n11,11,11,8,11,11,0,0,22,30,13,0,7,7,9,10,\n18,14,21,17,6,9,9,11,18,7,8,7,7,14,14,14,\n14,14,14,14,14,14,14,7,7,18,18,18,12,22,15,15,\n15,17,14,13,17,17,6,6,14,12,19,16,17,13,17,15,\n14,13,16,15,22,15,13,15,9,7,9,18,11,11,13,14,\n12,14,13,8,14,14,6,6,13,6,22,14,13,14,14,9,\n11,9,14,14,18,14,14,12,14,7,14,18,15,15,15,14,\n16,17,16,13,13,13,13,13,13,12,13,13,13,13,6,6,\n6,6,14,13,13,13,13,13,14,14,14,14,11,11,14,14,\n11,13,14,14,22,22,22,11,11,18,21,17,18,18,18,18,\n14,14,11,15,17,13,11,10,10,17,21,13,12,9,18,14,\n14,18,15,13,13,22,14,15,15,17,24,22,11,22,11,11,\n7,7,18,11,14,13,4,14,9,9,13,13,11,7,7,11,\n30,15,14,15,14,14,6,6,6,6,17,17,17,16,16,16,\n6,11,11,11,11,11,11,11,11,11,11,12,6,14,11,15,\n12,7,17,13,13,14,13,14,18,18,9,9,9,21,21,21,\n17,14,6,14,11,15,12,15,12,14,8,7,14,11,11,11,\n11,11,11,9,11,11,0,0,23,31,14,0,7,7,9,11,\n19,15,22,18,6,9,9,12,19,7,8,7,8,15,15,15,\n15,15,15,15,15,15,15,8,8,19,19,19,12,23,16,16,\n16,18,15,13,18,17,7,7,15,13,20,17,18,14,18,16,\n15,14,17,16,23,16,14,16,9,8,9,19,12,12,14,15,\n13,15,14,8,15,15,6,6,13,6,22,15,14,14,14,9,\n12,9,15,14,19,14,14,12,15,8,15,19,16,16,16,15,\n17,18,17,14,14,14,14,14,14,13,14,14,14,14,6,6,\n6,6,15,14,14,14,14,14,15,15,15,15,12,12,15,15,\n12,14,15,14,23,23,23,12,12,19,22,18,19,19,19,19,\n15,15,12,16,17,14,12,11,11,18,21,14,12,9,19,15,\n15,19,15,14,14,23,15,16,16,18,25,24,12,23,12,12,\n7,7,19,11,14,14,4,15,9,9,15,15,12,7,7,12,\n31,16,15,16,15,15,7,7,7,7,18,18,18,17,17,17,\n6,12,12,12,12,12,12,12,12,12,12,13,6,15,12,16,\n12,8,18,14,14,14,14,14,19,19,9,9,9,22,22,22,\n18,15,7,15,12,16,13,16,13,15,8,7,15,12,12,12,\n12,12,12,9,12,12,0,0,24,32,14,0,8,8,10,11,\n20,15,23,19,7,9,9,12,20,8,9,8,8,15,15,15,\n15,15,15,15,15,15,15,8,8,20,20,20,13,24,16,16,\n17,18,15,14,19,18,7,7,16,13,21,18,19,14,19,17,\n15,15,18,16,24,16,15,16,9,8,9,20,12,12,14,15,\n13,15,14,8,15,15,7,7,14,6,24,15,14,15,15,10,\n12,9,15,15,20,15,15,13,15,8,15,20,16,16,17,15,\n18,19,18,14,14,14,14,14,14,13,14,14,14,14,7,7,\n7,7,15,14,14,14,14,14,15,15,15,15,12,12,15,15,\n12,14,15,15,24,24,24,12,12,20,23,19,20,20,20,20,\n15,15,12,16,18,14,13,11,11,18,23,14,13,10,20,15,\n15,20,16,15,15,24,15,16,16,19,26,24,12,24,12,12,\n8,8,20,12,15,15,4,15,10,10,15,15,12,8,8,12,\n32,16,15,16,15,15,7,7,7,7,19,19,19,18,18,18,\n7,12,12,12,12,12,12,12,12,12,12,13,6,15,12,16,\n13,8,19,14,15,15,15,15,20,20,10,10,10,23,23,23,\n19,15,7,15,12,17,13,17,13,15,9,8,15,12,12,12,\n12,12,12,10,12,12,0,0,25,34,15,0,8,8,10,12,\n21,16,24,20,7,10,10,13,21,8,9,8,8,16,16,16,\n16,16,16,16,16,16,16,8,8,21,21,21,13,25,17,17,\n17,19,16,14,19,19,7,7,16,14,22,19,20,15,20,17,\n16,15,18,17,25,17,15,17,10,8,10,21,13,13,15,16,\n14,16,15,9,16,16,7,7,14,7,24,16,15,16,16,10,\n13,10,16,15,20,15,15,13,16,8,16,21,17,17,17,16,\n19,20,18,15,15,15,15,15,15,14,15,15,15,15,7,7,\n7,7,16,15,15,15,15,15,16,16,16,16,13,13,16,16,\n13,15,16,16,25,25,25,13,13,21,24,20,21,21,21,21,\n16,16,13,17,19,15,13,12,12,19,25,15,13,10,21,16,\n16,21,17,15,15,25,16,17,17,20,27,26,13,25,13,13,\n8,8,21,12,15,15,4,16,10,10,16,16,13,8,8,13,\n34,17,16,17,16,16,7,7,7,7,20,20,20,18,18,18,\n7,13,13,13,13,13,13,13,13,13,13,14,7,16,13,17,\n13,8,19,15,15,15,15,16,21,21,10,10,10,24,24,24,\n19,16,7,16,13,17,14,17,14,16,9,8,16,13,13,13,\n13,13,13,10,13,13,0,0,26,35,16,0,8,8,10,12,\n22,17,25,20,7,10,10,13,22,8,9,8,9,17,17,17,\n17,17,17,17,17,17,17,9,9,22,22,22,14,26,18,18,\n18,20,16,15,20,20,8,8,17,14,22,19,20,16,20,18,\n17,16,19,18,26,18,16,18,10,9,10,22,13,13,16,17,\n14,17,16,9,17,16,7,7,15,7,25,16,16,17,17,11,\n14,10,16,15,21,15,15,14,17,9,17,22,18,18,18,16,\n19,20,19,16,16,16,16,16,16,14,16,16,16,16,7,7,\n7,7,16,16,16,16,16,16,16,16,16,16,13,13,17,17,\n13,15,17,16,26,26,26,13,13,22,25,20,22,22,22,22,\n17,17,13,18,20,15,14,12,12,20,26,16,14,10,22,17,\n17,22,17,16,16,26,17,18,18,20,28,27,13,26,13,13,\n8,8,22,13,15,16,4,17,10,10,16,16,13,8,8,13,\n35,18,16,18,16,16,8,8,8,8,20,20,20,19,19,19,\n7,13,13,13,13,13,13,13,13,13,13,15,7,17,14,18,\n14,9,20,16,16,15,16,17,22,22,10,10,10,25,25,25,\n20,17,8,17,14,18,14,18,14,17,9,8,17,13,13,13,\n13,13,13,10,13,13,0,0,27,36,16,0,9,9,11,12,\n23,17,26,21,7,11,11,14,23,9,10,9,9,17,17,17,\n17,17,17,17,17,17,17,9,9,23,23,23,14,27,18,19,\n19,21,17,16,21,20,8,8,18,15,23,20,21,16,21,19,\n17,17,20,18,27,19,17,19,11,9,11,23,14,14,17,17,\n15,17,17,10,17,17,8,8,16,8,26,17,17,17,17,11,\n14,11,17,16,22,16,16,14,17,9,17,23,18,18,19,17,\n20,21,20,17,17,17,17,17,17,15,17,17,17,17,8,8,\n8,8,17,17,17,17,17,17,17,17,17,17,14,14,17,17,\n14,16,17,17,27,27,27,14,14,23,26,21,22,23,23,23,\n17,17,14,18,20,16,14,13,13,21,27,17,14,11,23,17,\n17,23,18,17,17,27,17,18,18,21,29,28,14,27,14,14,\n9,9,23,13,16,17,5,17,11,11,17,17,14,9,9,14,\n36,18,17,18,17,17,8,8,8,8,21,21,21,20,20,20,\n8,14,14,14,14,14,14,14,14,14,14,15,8,17,14,19,\n14,9,21,17,17,16,16,17,23,23,11,11,11,26,26,26,\n21,17,8,17,14,19,15,19,15,17,10,9,17,14,14,14,\n14,14,14,11,14,14,0,0,28,38,17,0,9,9,11,13,\n23,18,27,22,8,11,11,14,23,9,10,9,9,18,18,18,\n18,18,18,18,18,18,18,9,9,23,23,23,15,28,19,19,\n20,22,18,16,22,21,8,8,18,16,24,21,22,17,22,19,\n18,17,21,19,28,19,17,19,11,9,11,23,14,14,17,18,\n15,18,17,10,18,18,8,8,16,8,27,18,17,18,18,12,\n15,11,18,17,23,17,17,15,18,9,18,23,19,19,20,18,\n21,22,21,17,17,17,17,17,17,15,17,17,17,17,8,8,\n8,8,18,17,17,17,17,17,18,18,18,18,14,14,18,18,\n14,17,18,18,28,28,28,14,14,23,27,22,23,23,23,23,\n18,18,14,19,21,16,15,13,13,21,28,17,15,11,23,18,\n18,23,19,17,17,28,18,19,19,22,30,29,14,28,15,15,\n9,9,23,14,17,17,5,18,11,11,18,18,14,9,9,15,\n38,19,18,19,18,18,8,8,8,8,22,22,22,21,21,21,\n8,14,14,14,14,14,14,14,14,14,14,16,8,18,15,19,\n15,9,22,17,17,17,17,18,23,23,11,11,11,27,27,27,\n22,18,8,18,15,20,15,20,15,18,10,9,18,14,14,14,\n14,14,14,11,14,14,0,0,0,0,0,2,0,8,0,2,\n255,255,0,3,0,1,0,0,0,2,0,0,12,80,10,236,\n95,15,60,245,0,31,8,0,0,0,0,0,186,185,240,184,\n0,0,0,0,186,194,103,145,254,137,254,29,10,76,7,109,\n0,0,0,8,0,1,0,0,0,0,0,0\n};\n", "includes"=>[]}, :fileopen=>{"code"=>"static int32_t fileopen(int32_t h, const char *fname, const char *mode) {\n    int handle;\n    if (h < 0) {\n        handle = unused_fh();\n        if (handle == 0)\n          return 0;\n    } else {\n        handle = h;\n    }\n    if (fh[handle]) {\n        fclose(fh[handle]);\n        fh[handle] = 0;\n    }\n    fh[handle] = fopen(fname, mode);\n    if (!fh[handle])\n      return 0;\n    return (h < 0) ? handle : 1;\n}\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"]}, :random=>{"code"=>"static void init_random() {\n    struct timeval tv;\n    unsigned int seed;\n\n    gettimeofday(&tv, 0);\n    seed = tv.tv_usec ^ tv.tv_sec ^ getpid();\n    srandom(seed);\n}\n", "includes"=>[], "initialize"=>"init_random();"}, :sprites=>{"code"=>"static SDL_Surface *sprites[1024];\nstatic SDL_Rect spriteclips[1024];\nstatic int32_t unused_sprite() {\n    int i;\n    for (i = 1; i < 1024; i++) {\n      if (!sprites[i])\n        return i;\n    }\n    return 0;\n}\n", "includes"=>["SDL.h"]}, :ttf=>{"code"=>"static TTF_Font *font;\nstatic void init_text() {\n    SDL_RWops *fontrw = SDL_RWFromMem((void *)fontbits, sizeof(fontbits));\n    if (!TTF_WasInit()) {\n        TTF_Init();\n        font = TTF_OpenFontRW(fontrw, 0, 12);\n    }\n}\n", "fragments"=>[:basicfont], "includes"=>["SDL_ttf.h"], "initialize"=>"init_text();"}, :pack=>{"code"=>"static ssize_t fullwrite(int fd, unsigned char *buf, size_t count) {\n\tsize_t n = 0;\n\twhile (n < count) {\n\t\tssize_t r = write(fd, buf + n, count - n);\n\t\tif (r < 0 && errno == EINTR)\n\t\t\tcontinue;\n\t\tif (r < 0)\n\t\t\treturn r;\n\t\tif (r == 0)\n\t\t\treturn n;\n\t\tn += r;\n\t}\n\treturn n;\n}\n\nstatic int copyfds(int out_fd, int in_fd, size_t count) {\n\tunsigned char buf[32768];\n\tsize_t n = 0;\n\tssize_t r, r2, maxread;\n\twhile (n < count) {\n\t\tif (n + sizeof(buf) <= count) {\n\t\t\tmaxread = sizeof(buf);\n\t\t} else {\n\t\t\tmaxread = count - n;\n\t\t}\n\t\tr = read(in_fd, buf, maxread);\n\t\tif (r < 0 && errno == EINTR)\n\t\t\tcontinue;\n\t\tif (r < 0)\n\t\t\treturn r;\n\t\tif (r == 0)\n\t\t\treturn n;\n\t\tr2 = fullwrite(out_fd, buf, r);\n\t\tif (r2 < 0)\n\t\t\treturn r2;\n\t\tif (r2 == 0)\n\t\t\treturn n;\n\t\tn += r;\n\t}\n\treturn n;\n}\n\nstatic int putword(int fd, uint32_t w) {\n\tunsigned char s[4];\n\n\ts[0] = w;\n\ts[1] = w >> 8;\n\ts[2] = w >> 16;\n\ts[3] = w >> 24;\n\treturn fullwrite(fd, s, 4) == 4;\n}\n\nstatic int addpackfile(const char *name) {\n\tint fromfd;\n\tstruct stat statbuf;\n\tint r;\n\n\tif (packfd < 0)\n\t\treturn 0;\n\tfromfd = open(name, O_RDONLY);\n\tif (fromfd < 0)\n\t\treturn 0;\n\t/* Get file size */\n\tif (fstat(fromfd, &statbuf) < 0) {\n\t\tclose(fromfd);\n\t\treturn 0;\n\t}\n\n\t/* Go to end to add new file */\n\tlseek(packfd, 0, SEEK_END);\n\n\t/* Store without compression, so compressed and uncompressed sizes\n\t * will be the same. */\n\tputword(packfd, statbuf.st_size);\n\tputword(packfd, statbuf.st_size);\n\n\tr = copyfds(packfd, fromfd, statbuf.st_size);\n\tclose(fromfd);\n\tif (r != statbuf.st_size)\n\t\treturn 0;\n\treturn 1;\n}\n", "fragments"=>[:packfile], "includes"=>["unistd.h", "sys/types.h", "sys/stat.h", "fcntl.h", "errno.h"]}, :linedraw=>{"code"=>"static void putpixel(SDL_Surface *surface, int x, int y, uint32_t color) {\n\tif (x < 0 || y < 0 || x > surface->w || y > surface->h)\n\t\treturn;\n\n\tswitch (surface->format->BytesPerPixel) {\n\tcase 1:\n\t\t((uint8_t *)surface->pixels)[x + y * surface->pitch] = color;\n\t\tbreak;\n\tcase 2:\n\t\t((uint16_t *)surface->pixels)[x + y * surface->pitch/2] = color;\n\t\tbreak;\n\tcase 4:\n\t\t((uint32_t *)surface->pixels)[x + y * surface->pitch/4] = color;\n\t\tbreak;\n\t}\n}\n\nstatic void linedraw(int x, int y, int dx, int dy, Uint32 color) {\n\tint i, j;\n\n\tSDL_LockSurface(screen);\n\n\tif (abs(dx) > abs(dy)) {\n\t\t/* Normalize dx positive */\n\t\tif (dx < 0) {\n\t\t\tx += dx;\n\t\t\ty += dy;\n\t\t\tdx = -dx;\n\t\t\tdy = -dy;\n\t\t}\n\t\tj = 0;\n\t\tfor (i = 0; i < dx; i++) {\n\t\t\tputpixel(screen, x + i, y, color);\n\t\t\tj += dy;\n\t\t\tif (j >= dx) {\n\t\t\t\tj -= dx;\n\t\t\t\ty += dy > 0 ? 1 : -1;\n\t\t\t}\n\t\t}\n\t} else {\n\t\t/* Normalize dy positive */\n\t\tif (dy < 0) {\n\t\t\tx += dx;\n\t\t\ty += dy;\n\t\t\tdx = -dx;\n\t\t\tdy = -dy;\n\t\t}\n\t\tj = 0;\n\t\tfor (i = 0; i < dy; i++) {\n\t\t\tputpixel(screen, x, y + i, color);\n\t\t\tj += dx;\n\t\t\tif (j >= dy) {\n\t\t\t\tj -= dy;\n\t\t\t\tx += dx > 0 ? 1 : -1;\n\t\t\t}\n\t\t}\n\t}\n\n\tSDL_UnlockSurface(screen);\n}\n", "fragments"=>[:screen], "includes"=>["SDL.h"]}, :packfile=>{"code"=>"static unsigned char *packfile;\nstatic int32_t packfilesize;\nstatic int packfd = -1;\nstatic void closepack() {\n    if (packfd >= 0) {\n        close(packfd);\n        packfd = -1;\n        delete[] packfile;\n        packfile = 0;\n        packfilesize = 0;\n    }\n}\n", "includes"=>["unistd.h", "stdlib.h"]}, :listdecl=>{"code"=>"struct ListElement {\n    struct ListElement *next;\n    struct ListElement *prev;\n    /* element data starts here */\n};\nclass LinkedList {\n  public:\n    struct ListElement *root;\n    struct ListElement *current;\n    struct ListElement *last;\n    int length;\n    int index;\n    LinkedList() : root(0), current(0), last(0), length(0), index(-1) {};\n    virtual struct ListElement *alloc_elem() = 0;\n    virtual void del_elem(struct ListElement *elem) = 0;\n};\ntemplate <typename T>\nclass TypedList : public LinkedList {\n  public:\n    static T empty_T;\n    struct ListElement *alloc_elem() {\n        char *space = new char [sizeof(struct ListElement) + sizeof(T)];\n        T *elem = new (space + sizeof(struct ListElement)) T(empty_T);\n        return reinterpret_cast<struct ListElement *>(space);\n    }\n    void del_elem(struct ListElement *elem) {\n        T *realelem = reinterpret_cast<T *> (elem + 1);\n        realelem->~T();\n        delete[] reinterpret_cast<char *>(elem);\n    }\n};\ntemplate <typename T>\nT TypedList<T>::empty_T;\n#define LIST_CURRENT(list,type) (* (type *) ((list)->current + 1))\n", "includes"=>[]}, :mods=>{"code"=>"static Mix_Music *mods[1024];\nstatic int32_t unused_mod() {\n    int i;\n    for (i = 1; i < 1024; i++) {\n        if (!mods[i])\n            return i;\n    }\n    return 0;\n}\n", "includes"=>["SDL_mixer.h"]}, :joystick=>{"code"=>"static SDL_Joystick *joystick;\n", "includes"=>[]}, :screen=>{"code"=>"static SDL_Surface *screen;\n", "includes"=>["SDL.h"]}, :unpack=>{"code"=>"static uint32_t word(unsigned char *w) {\n\treturn w[0] | (w[1]<<8) | (w[2]<<16) | (w[3]<<24);\n}\n\nstatic ssize_t fullread(int fd, unsigned char *buf, size_t count) {\n\tsize_t n = 0;\n\tssize_t r = 0;\n\twhile (n < count) {\n\t\tr = read(fd, buf + n, count - n);\n\t\tif (r < 0 && errno == EINTR)\n\t\t\tcontinue;\n\t\tif (r < 0)\n\t\t\treturn r;\n\t\tif (r == 0)\n\t\t\treturn n;\n\t\tn += r;\n\t}\n\treturn n;\n}\n\nstatic unsigned char *packed;\nstatic int packedsize;\n\nstatic unsigned char *packp;\nstatic uint64_t curword;\nstatic int bitsleft;\n\nstatic uint32_t getbits(int bits) {\n\tif (bits > bitsleft) {\n\t\tcurword <<= 32;\n\t\tcurword |= word(packp);\n\t\tpackp += 4;\n\t\tbitsleft += 32;\n\t}\n\tbitsleft -= bits;\n\treturn (curword >> bitsleft) & ((1 << bits) - 1);\n}\n\nstatic uint32_t decodegamma() {\n\tuint32_t w = 1;\n\tdo {\n\t\tw = (w << 1) | getbits(1);\n\t} while (getbits(1));\n\treturn w;\n}\n\nstatic int decode() {\n\tint indexbase = 8;\n\tint lastindex = 1;\n\tint minimumliteral = 0;\n\tint literalbits = 8;\n\tunsigned char *dest = packfile;\n\n\tbitsleft = 0;\n\tcurword = 0;\n\n\tfor (;;) {\n\t\tif (packp - packed > packedsize + 4)\n\t\t\treturn 0;\n\t\tif (dest - packfile > packfilesize)\n\t\t\treturn 0;\n\t\tif (getbits(1)) {\n\t\t\t/* 1 Literal */\n\t\t\t*dest++ = getbits(literalbits) + minimumliteral;\n\t\t} else if (getbits(1)) {\n\t\t\t/* 01 Normal phrase */\n\t\t\tint l;\n\t\t\tint g = decodegamma();\n\t\t\tif (g == 2) {\n\t\t\t\t/* 0100 repeated normal phrase */\n\t\t\t\tl = decodegamma();\n\t\t\t} else {\n\t\t\t\tlastindex = getbits(indexbase) | ((g-3) << indexbase);\n\t\t\t\tl = decodegamma();\n\t\t\t\tif (lastindex >= 0x10000)\n\t\t\t\t\tl += 3;\n\t\t\t\telse if (lastindex >= 0x37ff)\n\t\t\t\t\tl += 2;\n\t\t\t\telse if (lastindex >= 0x27f)\n\t\t\t\t\tl += 1;\n\t\t\t\telse if (lastindex <= 0x7f)\n\t\t\t\t\tl += 4;\n\t\t\t}\n\t\t\tif (dest - packfile < lastindex)\n\t\t\t\treturn 0;\n\t\t\tif (dest - packfile + l > packfilesize)\n\t\t\t\treturn 0;\n\t\t\t/* Unfortunately can't use memmove or memcpy here,\n                         * because l > lastindex is allowed, and the\n                         * overlapping copy should be handled in this\n                         * specific way. */\n\t\t\twhile (l--) {\n\t\t\t\t*dest = *(dest - lastindex);\n\t\t\t\tdest++;\n\t\t\t}\n\t\t} else if (getbits(1)) {\n\t\t\tint x = getbits(4);\n\t\t\tif (!x) {\n\t\t\t\tif (getbits(1)) {\n\t\t\t\t\t/* 00100001 Block sequence */\n\t\t\t\t\tdo {\n\t\t\t\t\t\tint n;\n\t\t\t\t\t\tif (dest - packfile + 256 > packfilesize)\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\tfor (n = 0; n < 256; n++) {\n\t\t\t\t\t\t\t*dest++ = getbits(8);\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (getbits(1));\n\t\t\t\t} else if (getbits(1)) {\n\t\t\t\t\t/* 001000001 */\n\t\t\t\t\tliteralbits = 8;\n\t\t\t\t\tminimumliteral = 0;\n\t\t\t\t} else {\n\t\t\t\t\t/* 001000000xxxxxxxx */\n\t\t\t\t\tliteralbits = 7;\n\t\t\t\t\tminimumliteral = getbits(8);\n\t\t\t\t}\n\t\t\t} else if (x == 1) {\n\t\t\t\t/* 0010001 literal byte 00 */\n\t\t\t\t*dest++ = 0;\n\t\t\t} else {\n\t\t\t\t/* 001xxxx single byte match */\n\t\t\t\tif (dest - packfile < x-1)\n\t\t\t\t\treturn 0;\n\t\t\t\t*dest = *(dest-(x-1));\n\t\t\t\tdest++;\n\t\t\t}\n\t\t} else {\n\t\t\tint x = getbits(7);\n\t\t\tint y = getbits(2);\n\t\t\tif (!x && !y) {\n\t\t\t\t/* 000000000000 done */\n\t\t\t\treturn dest - packfile; /* decoded size */\n\t\t\t}\n\t\t\tif (x) {\n\t\t\t\tif (dest - packfile < x)\n\t\t\t\t\treturn 0;\n\t\t\t\tif (dest - packfile + y+2 > packfilesize)\n\t\t\t\t\treturn 0;\n\t\t\t\t/* 000xxxxxxxyy Short match */\n\t\t\t\tlastindex = x;\n\t\t\t\ty += 2;\n\t\t\t\t/* can't memmove, same reason as above */\n\t\t\t        while (y--) {\n\t\t\t\t\t*dest = *(dest - lastindex);\n\t\t\t\t\tdest++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* 0000000000yybbbb New index base */\n\t\t\t\tindexbase = getbits(y+3);\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic int nextpack() {\n\tunsigned char sizes[8];\n\tif (packfd < 0)\n\t\treturn 0;\n\tif (fullread(packfd, sizes, 8) < 8) {\n\t\tclosepack();\n\t\treturn 0;\n\t}\n\tpackfilesize = word(sizes);\n\tpackedsize = word(sizes + 4);\n\tif (packedsize > packfilesize) {\n\t\tclosepack();\n\t\treturn 0;\n\t}\n\tpackfile = new unsigned char [packfilesize];\n\tif (packedsize == packfilesize) {  /* not compressed */\n\t\tif (fullread(packfd, packfile, packfilesize) < packfilesize) {\n\t\t\tclosepack();\n\t\t\treturn 0;\n\t\t}\n\t\treturn 1;\n\t}\n\tpacked = new unsigned char [packedsize];\n\tpackp = packed + 10;\n\tif (packedsize < 14 ||\n\t    fullread(packfd, packed, packedsize) < packedsize ||\n\t    word(packed + 2) != packfilesize ||\n\t    packed[0] != 'J' || packed[1] != 'C' ||\n\t    decode() != packfilesize) {\n\t\tdelete[] packed;\n\t\tclosepack();\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n", "fragments"=>[:packfile], "includes"=>["unistd.h", "errno.h"]}, :mouse=>{"code"=>"static Uint8 mousebuttons;\nstatic int mousex;\nstatic int mousey;\n", "includes"=>[]}, :keyboard=>{"code"=>"static Uint8 *keystate;  /* for KeyboardPushed */\nstatic int numkeys;\nstatic Uint8 keyrel[SDLK_LAST];  /* for KeyboardReleased */\n", "includes"=>["SDL.h"]}, :listfuncs=>{"code"=>"static void insertonly(LinkedList *list, struct ListElement *elem) {\n    elem->next = 0;\n    elem->prev = 0;\n    list->root = elem;\n    list->last = elem;\n    list->current = elem;\n    list->length = 1;\n    list->index = 0;\n}\nstatic void insertfirst(LinkedList *list, struct ListElement *elem) {\n    elem->next = list->root;\n    elem->prev = 0;\n    list->root->prev = elem;\n    list->root = elem;\n    list->current = elem;\n    list->length += 1;\n    list->index = 0;\n}\nstatic void insertlast(LinkedList *list, struct ListElement *elem) {\n    elem->next = 0;\n    elem->prev = list->last;\n    list->last->next = elem;\n    list->last = elem;\n    list->current = elem;\n    list->length += 1;\n    list->index = list->length - 1;\n}\n", "includes"=>["stdlib.h"]}, :frontcolor=>{"code"=>"static SDL_Color frontcolor;\n", "includes"=>["SDL.h"]}, :sounds=>{"code"=>"static Mix_Chunk *sounds[1024];\nstatic int32_t unused_sound() {\n    int i;\n    for (i = 1; i < 1024; i++) {\n      if (!sounds[i])\n        return i;\n    }\n    return 0;\n}\n", "includes"=>["SDL_mixer.h"]}, :framerate=>{"code"=>"static int framerate = 60;", "includes"=>[]}, :filehandles=>{"code"=>"static FILE *fh[1024];\nstatic int32_t unused_fh() {\n    /* Find a filehandle number to use for a new file.\n     * It must not be handle 0, because 0 is returned as a failure code.\n     */\n    int i;\n    for (i = 1; i < 1024; i++) {\n      if (!fh[i])\n        return i;\n    }\n    return 0;\n}\n", "includes"=>["stdio.h"]}}
BF = {:catchsprite=>{"code"=>"int handle;\nSDL_RWops *rw;\nif (p1 < 0) {\n    handle = unused_sprite();\n    if (handle == 0)\n      return 0;\n} else {\n    handle = p1;\n}\nif (sprites[handle]) {\n    SDL_FreeSurface(sprites[handle]);\n    sprites[handle] = 0;\n}\n/* Cheat: ignore p2, assume that the source is the current packfile */\nif (!packfile)\n    return 0;\nrw = SDL_RWFromMem(packfile, packfilesize);\nif (!rw)\n    return 0;\nsprites[handle] = IMG_Load_RW(rw, 0);\nif (!sprites[handle])\n    return 0;\ndelete[] packfile;\npackfile = 0;\npackfilesize = 0;\nreturn (p2 < 0) ? handle : 1;\n", "fragments"=>[:sprites], "includes"=>["SDL.h", "SDL_image.h"], "rtype"=>:w, "params"=>[:w, :l], "defaults"=>[], "return"=>"w"}, :str=>{"code"=>"char s[256];\nsprintf(s, \"%ld\", (long) p1);\nreturn s;\n", "includes"=>["stdio.h"], "rtype"=>:s, "params"=>[:l], "defaults"=>[], "return"=>"s"}, :readstring=>{"code"=>"size_t bufsz = 1024;\nsize_t n = 0;\nchar *buffer = 0;\nif (!fh[p1])\n    return 0;\nfor (;;) {\n    buffer = (char *) realloc(buffer, bufsz);\n    if (fgets(buffer + n, bufsz - n, fh[p1])) {\n        n += strlen(buffer + n);\n        if (buffer[n - 1] == '\\n') {\n            buffer[--n] = 0;\n            break;\n        }\n    } else {\n        break;\n    }\n    bufsz = bufsz * 2;\n}\nif (n > 1 && buffer[n - 1] == '\\r')\n  buffer[--n] = 0;\nstd::string r (buffer, n);\nfree(buffer);\nreturn r;\n", "fragments"=>[:filehandles], "includes"=>["stdlib.h", "stdio.h", "string.h"], "rtype"=>:s, "params"=>[:w], "defaults"=>[], "return"=>"s"}, :closescreen=>{"code"=>"SDL_QuitSubSystem(SDL_INIT_VIDEO);\nscreen = 0;\n", "fragments"=>[:screen], "includes"=>["SDL.h"], "params"=>[], "defaults"=>[]}, :rset=>{"code"=>"int spaces;\nspaces = p2 - p1.length();\nif (spaces < 0)\n  spaces = 0;\nreturn std::string(spaces, ' ') + p1.substr(0, p2);\n", "includes"=>[], "rtype"=>:s, "params"=>[:s, :l], "defaults"=>[], "return"=>"s"}, :cos=>{"code"=>"return cos(p1);\n", "includes"=>["math.h"], "rtype"=>:f, "params"=>[:f], "defaults"=>[], "return"=>"f"}, :initkeyboard=>{"code"=>"keystate = SDL_GetKeyState(&numkeys);\nreturn 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :getenvironmentvariable=>{"code"=>"char *s = getenv(p1.c_str());\nreturn s ? s : \"\";\n", "includes"=>["stdlib.h"], "rtype"=>:s, "params"=>[:s], "defaults"=>[], "return"=>"s"}, :displaysprite=>{"code"=>"SDL_Rect dstrect = { p2, p3, 0, 0 };\nif (p1 >= 1024 || !sprites[p1])\n    return;\nSDL_SetColorKey(sprites[p1], 0, 0);\nSDL_SetAlpha(sprites[p1], 0, 0);\nSDL_BlitSurface(sprites[p1], &spriteclips[p1], screen, &dstrect);\n", "fragments"=>[:sprites, :screen], "includes"=>["SDL.h"], "params"=>[:w, :l, :l], "defaults"=>[]}, :writestringn=>{"code"=>"if (!fh[p1])\n    return;\nfputs(p2.c_str(), fh[p1]);\nfputc('\\n', fh[p1]);\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "params"=>[:w, :s], "defaults"=>[]}, :keyboardreleased=>{"code"=>"if (p1 >= numkeys)\n  return 0;\nif (p1 < 0)\n  return 0;\nreturn keyrel[p1] != 0;\n", "fragments"=>[:keyboard], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :stopdrawing=>{"code"=>";  /* cheat -- all output to main screen */\n", "includes"=>[], "params"=>[], "defaults"=>[]}, :len=>{"code"=>"return p1.length();\n", "includes"=>[], "rtype"=>:l, "params"=>[:s], "defaults"=>[], "return"=>"l"}, :isdirectory=>{"code"=>"return p1 < 1024 && dh[p1].dir;\n", "fragments"=>[:dirhandles], "includes"=>[], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :playsound=>{"code"=>"if (p1 > 1024 || p1 < 0 || !sounds[p1])\n    return;\nMix_PlayChannel(-1, sounds[p1], 0);\n", "fragments"=>[:sounds], "includes"=>["SDL_mixer.h"], "params"=>[:w], "defaults"=>[]}, :box=>{"code"=>"SDL_Rect dstrect;\nUint32 color;\ndstrect.x = p1;\ndstrect.y = p2;\ndstrect.w = p3;\ndstrect.h = p4;\nif (p5 < 0) {\n  color = SDL_MapRGB(screen->format, frontcolor.r, frontcolor.g, frontcolor.b);\n} else {\n  color = SDL_MapRGB(screen->format, (p5 >> 16) && 0xff, (p5 >> 8) && 0xff, p5 && 0xff);\n}\nSDL_FillRect(screen, &dstrect, color);\n", "fragments"=>[:screen], "includes"=>["SDL.h"], "params"=>[:l, :l, :l, :l, :l], "defaults"=>[-1]}, :examinejoystick=>{"code"=>"SDL_JoystickUpdate();\n", "includes"=>["SDL.h"], "params"=>[], "defaults"=>[]}, :flipbuffers=>{"code"=>"static struct timeval lastflip;\nstruct timeval now;\nlong elapsed;\nif (!screen)\n    return;\ngettimeofday(&now, 0);\nelapsed = now.tv_usec - lastflip.tv_usec\n        + (now.tv_sec - lastflip.tv_sec) * 1000000;\nif (elapsed < 1000000 / framerate)\n    usleep(1000000 / framerate - elapsed);\nSDL_Flip(screen);\ngettimeofday(&lastflip, 0);\n", "fragments"=>[:framerate, :screen], "includes"=>["SDL.h", "sys/time.h", "time.h"], "params"=>[:l], "defaults"=>[1]}, :lcase=>{"code"=>"std::string::iterator it;\nfor (it = p1.begin(); it < p1.end(); it++) {\n  *it = tolower(*it);\n}\nreturn p1;\n", "includes"=>["cctype"], "rtype"=>:s, "params"=>[:s], "defaults"=>[], "return"=>"s"}, :listindex=>{"code"=>"return p1->index;\n", "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :playmodule=>{"code"=>"if (p1 > 1024 || p1 < 0 || !mods[p1])\n    return;\nMix_PlayMusic(mods[p1], -1);\n", "fragments"=>[:mods], "includes"=>[], "params"=>[:w], "defaults"=>[]}, :linexy=>{"code"=>"linedraw(p1, p2, p3 - p1, p4 - p2, -1);\n", "fragments"=>[:linedraw], "includes"=>[], "params"=>[:l, :l, :l, :l], "defaults"=>[]}, :directoryentryname=>{"code"=>"if (!dh[p1].dir)\n    return \"\";\nreturn dh[p1].curdent.d_name;\n", "fragments"=>[:dirhandles], "includes"=>["string.h"], "rtype"=>:s, "params"=>[:w], "defaults"=>[], "return"=>"s"}, :selectelement=>{"code"=>"int i;\nstruct ListElement *p = p1->root;\nfor (i = 0; p && i < p2; i++) {\n    p = p->next;\n}\nif (p) {\n    p1->current = p;\n    p1->index = i;\n}\n", "includes"=>[], "params"=>[:"()", :l], "defaults"=>[]}, :joystickbutton=>{"code"=>"return SDL_JoystickGetButton(joystick, p1-1);\n", "fragments"=>[:joystick], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :frontcolor=>{"code"=>"frontcolor.r = (p1 >> 16) & 0xff;\nfrontcolor.g = (p1 >> 8) & 0xff;;\nfrontcolor.b = p1 & 0xff;\n", "fragments"=>[:frontcolor], "includes"=>[], "params"=>[:l], "defaults"=>[]}, :openpack=>{"code"=>"closepack();\npackfd = open(p1.c_str(), O_RDONLY);\nreturn packfd >= 0;\n", "fragments"=>[:packfile], "includes"=>["sys/types.h", "sys/stat.h", "fcntl.h"], "rtype"=>:l, "params"=>[:s], "defaults"=>[], "return"=>"l"}, :formatdate=>{"code"=>"char c;\n/* Allocating s at same length as p1 is safe as long as all formatting\n * codes are at least as long as the string they represent.\n * That's going to be true until the year 100000. Remember to fix\n * this before then. */\nchar *s = new char [p1.length() + 1];\nconst char *q = p1.c_str();\nchar *r = s;\ntime_t t = p2;\nstruct tm *tm = localtime(&t);\nwhile (c = *q++) {\n    if (c == '%') {\n        if (q[0] == 'y' && q[1] == 'y' && q[2] == 'y' && q[3] == 'y') {\n            sprintf(s, \"%04d\", tm->tm_year + 1900);\n            s += strlen(s);\n            q += 4;\n        } else if (q[0] == 'y' && q[1] == 'y') {\n            sprintf(s, \"%02d\", tm->tm_year % 100);\n            s += 2;\n            q += 2;\n        } else if (q[0] == 'm' && q[1] == 'm') {\n            sprintf(s, \"%02d\", tm->tm_mon + 1);\n            s += 2;\n            q += 2;\n        } else if (q[0] == 'd' && q[1] == 'd') {\n            sprintf(s, \"%02d\", tm->tm_mday);\n            s += 2;\n            q += 2;\n        } else if (q[0] == 'h' && q[1] == 'h') {\n            sprintf(s, \"%02d\", tm->tm_hour);\n            s += 2;\n            q += 2;\n        } else if (q[0] == 'i' && q[1] == 'i') {\n            sprintf(s, \"%02d\", tm->tm_min);\n            s += 2;\n            q += 2;\n        } else if (q[0] == 's' && q[1] == 's') {\n            sprintf(s, \"%02d\", tm->tm_sec);\n            s += 2;\n            q += 2;\n        } else {\n            *s++ = c;\n        }\n    } else {\n        *s++ = c;\n    }\n}\n*s++ = 0;\nstd::string rs = r;\ndelete[] r;\nreturn rs;\n", "includes"=>["time.h"], "rtype"=>:s, "params"=>[:s, :l], "defaults"=>[], "return"=>"s"}, :peekc=>{"code"=>"return * (uint8_t *) p1;\n", "includes"=>[], "rtype"=>:c, "params"=>[:*], "defaults"=>[], "return"=>"c"}, :examinemouse=>{"code"=>"SDL_PumpEvents();\nmousebuttons = SDL_GetMouseState(&mousex, &mousey);\nreturn 1;\n", "fragments"=>[:mouse], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :readfile=>{"code"=>"return fileopen(p1, p2.c_str(), \"r\");\n", "fragments"=>[:fileopen], "includes"=>[], "rtype"=>:w, "params"=>[:w, :s], "defaults"=>[], "return"=>"w"}, :addpackfile=>{"code"=>"return addpackfile(p1.c_str());\n", "fragments"=>[:pack], "includes"=>[], "rtype"=>:l, "params"=>[:s, :l], "defaults"=>[0], "return"=>"l"}, :int=>{"code"=>"return p1;\n", "includes"=>[], "rtype"=>:l, "params"=>[:f], "defaults"=>[], "return"=>"l"}, :textheight=>{"code"=>"int h = 0;\nTTF_SizeText(font, p1.c_str(), 0, &h);\nreturn h;\n", "fragments"=>[:ttf, :screen], "includes"=>["SDL_ttf.h"], "rtype"=>:l, "params"=>[:s], "defaults"=>[], "return"=>"l"}, :mousebutton=>{"code"=>"if (p1 == 1)\n    return (mousebuttons & SDL_BUTTON(SDL_BUTTON_LEFT)) != 0;\nif (p1 == 2)\n    return (mousebuttons & SDL_BUTTON(SDL_BUTTON_RIGHT)) != 0;\n", "fragments"=>[:mouse], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :copysprite=>{"code"=>"int handle;\nSDL_Surface *src;\nif (p1 >= 1024 || !sprites[p1])\n    return 0;\nsrc = sprites[p1];\nif (p2 < 0) {\n    handle = unused_sprite();\n    if (handle == 0)\n      return 0;\n} else {\n    handle = p2;\n}\nif (sprites[handle]) {\n  SDL_FreeSurface(sprites[handle]);\n  sprites[handle] = 0;\n}\nsprites[handle] = SDL_CreateRGBSurface(SDL_HWSURFACE,\n    src->w, src->h, src->format->BitsPerPixel, src->format->Rmask,\n    src->format->Gmask, src->format->Bmask, src->format->Amask);\nif (!sprites[handle])\n    return 0;\nspriteclips[handle].x = 0;\nspriteclips[handle].y = 0;\nspriteclips[handle].w = src->w;\nspriteclips[handle].h = src->h;\nSDL_BlitSurface(src, NULL, sprites[handle], NULL);\nreturn (p2 < 0) ? handle : 1;\n", "fragments"=>[:sprites], "includes"=>["SDL.h"], "rtype"=>:w, "params"=>[:w, :l], "defaults"=>[], "return"=>"w"}, :loc=>{"code"=>"if (!fh[p1])\n  return 0;\nreturn ftell(fh[p1]);\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "rtype"=>:l, "params"=>[:w], "defaults"=>[], "return"=>"l"}, :closenetworkconnection=>{"code"=>"close(p1 - 1);\n", "includes"=>["unistd.h"], "params"=>[:l], "defaults"=>[]}, :usepngimagedecoder=>{"code"=>"return 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :screenoutput=>{"code"=>"return 1;  /* cheat -- all output to main screen */\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :readword=>{"code"=>"int b1, b2;\nif (!fh[p1])\n    return 0;\nb1 = fgetc(fh[p1]);\nif (b1 == EOF)\n  b1 = 0;\nb2 = fgetc(fh[p1]);\nif (b2 == EOF)\n  b2 = 0;\nreturn b1 + b2 * 256;\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "rtype"=>:w, "params"=>[:w], "defaults"=>[], "return"=>"w"}, :delay=>{"code"=>"usleep(p1*1000);\n", "includes"=>["unistd.h"], "params"=>[:l], "defaults"=>[]}, :createsprite=>{"code"=>"int handle;\nuint32_t color;\nif (p1 < 0) {\n    handle = unused_sprite();\n    if (handle == 0)\n      return 0;\n} else {\n    handle = p1;\n}\nif (sprites[handle])\n    SDL_FreeSurface(sprites[handle]);\nsprites[handle] = SDL_CreateRGBSurface(SDL_HWSURFACE,\n    p2, p3, screen->format->BitsPerPixel, screen->format->Rmask,\n    screen->format->Gmask, screen->format->Bmask, screen->format->Amask);\nif (!sprites[handle])\n    return 0;\ncolor = SDL_MapRGB(sprites[handle]->format, 0, 0, 0);\nSDL_FillRect(sprites[handle], 0, color);\nspriteclips[handle].x = 0;\nspriteclips[handle].y = 0;\nspriteclips[handle].w = p2; \nspriteclips[handle].h = p3;\nreturn (p2 < 0) ? handle : 1;\n", "fragments"=>[:sprites, :screen], "includes"=>["SDL.h"], "rtype"=>:w, "params"=>[:w, :l, :l], "defaults"=>[], "return"=>"w"}, :examinekeyboard=>{"code"=>"SDL_Event event;\n\n/* KeyboardReleased needs to report whether a key has actually gone\n * from pressed to released since the last poll. Unlike KeyboardPushed,\n * this cannot be done via the implicitly updated keystate array. */\nmemset(keyrel, 0, SDLK_LAST);\nwhile (SDL_PollEvent(&event)) {\n    if (event.type == SDL_KEYUP) {\n        SDLKey sym = event.key.keysym.sym;\n        if (sym >= 0 && sym < SDLK_LAST) {\n            keyrel[sym] = 1;\n        }\n        break;\n    }\n}\n", "fragments"=>[:keyboard], "includes"=>["SDL.h"], "params"=>[], "defaults"=>[]}, :openwindowedscreen=>{"code"=>"uint32_t flags = SDL_HWSURFACE | SDL_DOUBLEBUF;\nif (p6) {\n    flags |= SDL_RESIZABLE;\n}\nif (!SDL_WasInit(SDL_INIT_VIDEO)) {\n    SDL_InitSubSystem(SDL_INIT_VIDEO);\n}\nscreen = SDL_SetVideoMode(p4, p5, 0, flags);\nif (!screen)\n    return 0;\nSDL_ShowCursor(SDL_DISABLE);\n/* SDL_WM_GrabInput(SDL_GRAB_ON);    too annoying while debugging */\nreturn 1;\n", "fragments"=>[:screen], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l, :l, :l, :l, :l, :l, :l, :l], "defaults"=>[], "return"=>"l"}, :mid=>{"code"=>"if (p2 > p1.length())\n  return \"\";\nif (p2 <= 0)\n  p2 = 1;\nif (p3 < 0)\n  p3 = 0;\nreturn p1.substr(p2 - 1, p3);\n", "includes"=>[], "rtype"=>:s, "params"=>[:s, :l, :l], "defaults"=>[], "return"=>"s"}, :sin=>{"code"=>"return sin(p1);\n", "includes"=>["math.h"], "rtype"=>:f, "params"=>[:f], "defaults"=>[], "return"=>"f"}, :initsound=>{"code"=>"SDL_InitSubSystem(SDL_INIT_AUDIO);\nMix_OpenAudio(44100, AUDIO_S16SYS, 2, 4096);\n", "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :displaytransparentsprite=>{"code"=>"SDL_Rect dstrect = { p2, p3, 0, 0 };\nuint32_t color;\nif (p1 >= 1024 || !sprites[p1])\n    return;\ncolor = SDL_MapRGB(sprites[p1]->format, 0, 0, 0);\nSDL_SetColorKey(sprites[p1], SDL_SRCCOLORKEY, color);\nSDL_SetAlpha(sprites[p1], 0, 0);\nSDL_BlitSurface(sprites[p1], &spriteclips[p1], screen, &dstrect);\n", "fragments"=>[:sprites], "includes"=>["SDL.h"], "params"=>[:w, :l, :l], "defaults"=>[]}, :deletefile=>{"code"=>"unlink(p1.c_str());\n", "includes"=>["unistd.h"], "params"=>[:s], "defaults"=>[]}, :findstring=>{"code"=>"size_t pos;\np3--;  /* Convert to 0-based offset */\nif (p3 >= p1.length())\n  return 0;\nif (p3 < 0)\n  p3 = 0;\npos = p1.find(p2, p3);\nreturn pos == std::string::npos ? 0 : pos + 1;\n", "includes"=>["string.h"], "rtype"=>:l, "params"=>[:s, :s, :l], "defaults"=>[], "return"=>"l"}, :lastelement=>{"code"=>"if (!p1->last)\n    return 0;\np1->current = p1->last;\np1->index = p1->length - 1;\nreturn 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :createdirectory=>{"code"=>"mkdir(p1.c_str(), 0777);\n", "includes"=>["sys/stat.h", "sys/types.h"], "params"=>[:s], "defaults"=>[]}, :catchsound=>{"code"=>"int handle;\nSDL_RWops *rw;\nif (p1 < 0) {\n    handle = unused_sound();\n    if (handle == 0)\n        return 0;\n} else {\n   handle = p1;\n}\nif (sounds[handle]) {\n    Mix_FreeChunk(sounds[handle]);\n    sounds[handle] = 0;\n}\nrw = SDL_RWFromMem(packfile, packfilesize);\nif (!rw)\n    return 0;\nsounds[handle] = Mix_LoadWAV_RW(rw, 0);\nSDL_RWclose(rw);\nif (!sounds[handle])\n    return 0;\ndelete[] packfile;\npackfile = 0;\npackfilesize = 0;\nreturn (p1 < 0) ? handle : 1;\n", "fragments"=>[:packfile, :sounds], "includes"=>["SDL_mixer.h"], "rtype"=>:w, "params"=>[:w, :l], "defaults"=>[], "return"=>"w"}, :countlist=>{"code"=>"return p1->length;\n", "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :joystickaxisx=>{"code"=>"int x = SDL_JoystickGetAxis(joystick, 0);\nif (x < -100) return -1;\nif (x > 100) return 1;\nreturn 0;\n", "fragments"=>[:joystick], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :drawingmode=>{"code"=>";  /* cheat -- always draw in mode 1 */\n", "includes"=>[], "params"=>[:l], "defaults"=>[]}, :ucase=>{"code"=>"std::string::iterator it;\nfor (it = p1.begin(); it < p1.end(); it++) {\n  *it = toupper(*it);\n}\nreturn p1;\n", "includes"=>["cctype"], "rtype"=>:s, "params"=>[:s], "defaults"=>[], "return"=>"s"}, :stopmodule=>{"code"=>"Mix_HaltMusic();\n", "includes"=>["SDL_mixer.h"], "params"=>[:w], "defaults"=>[]}, :circle=>{"code"=>"Uint32 color;\nif (p4 < 0) {\n  color = SDL_MapRGB(screen->format, frontcolor.r, frontcolor.g, frontcolor.b);\n} else {\n  color = SDL_MapRGB(screen->format, (p4 >> 16) && 0xff, (p4 >> 8) && 0xff, p4 && 0xff);\n}\nfilledCircleColor(screen, p1, p2, p3, color);\n", "fragments"=>[:screen], "includes"=>["SDL.h", "SDL_gfxPrimitives.h"], "params"=>[:l, :l, :l, :l], "defaults"=>[]}, :getcurrentdirectory=>{"code"=>"static size_t bufsz = 128;\nchar *buf = new char[bufsz];\nwhile (!getcwd(buf, bufsz)) {\n    if (errno == ERANGE) {\n        bufsz *= 2;\n        continue;\n    }\n    delete[] buf;\n    return \"\";\n}\nstd::string s(buf);\ndelete[] buf;\nreturn s;\n", "includes"=>["unistd.h", "errno.h"], "rtype"=>:s, "params"=>[], "defaults"=>[], "return"=>"s"}, :print=>{"code"=>"puts(p1.c_str());\n", "includes"=>["stdio.h"], "params"=>[:s], "defaults"=>[]}, :rgb=>{"code"=>"return ((uint8_t) p1 << 16) | ((uint8_t) p2 << 8) | (uint8_t) p3;\n", "includes"=>[], "rtype"=>:l, "params"=>[:b, :b, :b], "defaults"=>[], "return"=>"l"}, :insertelement=>{"code"=>"struct ListElement *newelem = p1->alloc_elem();\nif (!newelem)\n    return 0;\nif (p1->length == 0) {\n    insertonly(p1, newelem);\n} else if (!p1->current || p1->current == p1->root) {\n    insertfirst(p1, newelem);\n} else {\n    newelem->next = p1->current;\n    newelem->prev = p1->current->prev;\n    newelem->next->prev = newelem;\n    newelem->prev->next = newelem;\n    p1->current = newelem;\n    p1->length += 1;\n}\nreturn 1;\n", "fragments"=>[:listfuncs], "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :parsedate=>{"code"=>"char c;\nint n;\nint v;\nstruct tm tm = { 0, 0, 0, 1, 0, 0, 0, 0, 0 };\nconst char *q = p1.c_str();\nconst char *r = p2.c_str();\nwhile (c = *q++) {\n    if (c == '%') {\n        if (q[0] == 'y' && q[1] == 'y' && q[2] == 'y' && q[3] == 'y') {\n            n = sscanf(r, \"%4d\", &v);\n            tm.tm_year = v - 1900;\n        } else if (q[0] == 'y' && q[1] == 'y') {\n            n = sscanf(r, \"%2d\", &v);\n            tm.tm_year = v + 100;\n        } else if (q[0] == 'm' && q[1] == 'm') {\n            n = sscanf(r, \"%2d\", &v);\n            tm.tm_mon = v - 1;\n        } else if (q[0] == 'd' && q[1] == 'd') {\n            n = sscanf(r, \"%2d\", &v);\n            tm.tm_mday = v;\n        } else if (q[0] == 'h' && q[1] == 'h') {\n            n = sscanf(r, \"%2d\", &v);\n            tm.tm_hour = v;\n        } else if (q[0] == 'i' && q[1] == 'i') {\n            n = sscanf(r, \"%2d\", &v);\n            tm.tm_min = v;\n        } else if (q[0] == 's' && q[1] == 's') {\n            n = sscanf(r, \"%2d\", &v);\n            tm.tm_sec = v;\n        } else {\n            n = 1;\n        }\n        if (n == EOF)\n            return -1;\n        r += n;\n    } else {\n        r++;\n    }\n}\nreturn mktime(&tm);\n", "includes"=>["stdio.h", "time.h"], "rtype"=>:l, "params"=>[:s, :s], "defaults"=>[], "return"=>"l"}, :drawtext=>{"code"=>"SDL_Rect textpos;\nSDL_Surface *textsurf;\nint w;\ntextpos.x = p1;\ntextpos.y = p2;\nif (!screen)\n    return textpos.x;\n/* background color is in p5, but it's not actually supported yet. */\nif (p4 < 0) {\n    textsurf = TTF_RenderText_Blended(font, p3.c_str(), frontcolor);\n} else {\n    SDL_Color color;\n    color.r = (p4 >> 16) & 0xff;\n    color.g = (p4 >> 8) & 0xff;\n    color.b = p4 & 0xff;\n    textsurf = TTF_RenderText_Blended(font, p3.c_str(), color);\n}\nif (!textsurf)\n    return textpos.x;\nSDL_BlitSurface(textsurf, NULL, screen, &textpos);\nw = textsurf->w;\nSDL_FreeSurface(textsurf);  /* cache this? */\nreturn textpos.x + w;\n", "fragments"=>[:ttf, :screen], "includes"=>["SDL_ttf.h"], "rtype"=>:l, "params"=>[:l, :l, :s, :l, :l], "defaults"=>[-1, 0], "return"=>"l"}, :nextpackfile=>{"code"=>"return nextpack();\n", "fragments"=>[:unpack], "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :createfile=>{"code"=>"return fileopen(p1, p2.c_str(), \"w\");\n", "fragments"=>[:fileopen], "includes"=>[], "rtype"=>:w, "params"=>[:w, :s], "defaults"=>[], "return"=>"w"}, :openconsole=>{"code"=>"return 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :mousex=>{"code"=>"return mousex;\n", "fragments"=>[:mouse], "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :issprite=>{"code"=>"return p1 < 1024 && sprites[p1];\n", "fragments"=>[:sprites], "includes"=>[], "rtype"=>:l, "params"=>[:w], "defaults"=>[], "return"=>"l"}, :sdl_wm_setcaption_=>{"code"=>"SDL_WM_SetCaption(p1.c_str(), p2.c_str());\n", "includes"=>["SDL.h"], "params"=>[:s, :s], "defaults"=>[]}, :closepack=>{"code"=>"closepack();\nreturn 1;\n", "fragments"=>[:pack], "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :chr=>{"code"=>"char *s = new char [2];\ns[0] = p1;\ns[1] = 0;\nreturn s;\n", "includes"=>["stdlib.h"], "rtype"=>:s, "params"=>[:b], "defaults"=>[], "return"=>"s"}, :initnetwork=>{"code"=>"return 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :releasemouse=>{"code"=>"SDL_WM_GrabInput(p1 ? SDL_GRAB_OFF : SDL_GRAB_ON);\n", "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :loadsprite=>{"includes"=>[], "rtype"=>:w, "params"=>[:w, :s], "defaults"=>[], "return"=>"w"}, :fileseek=>{"code"=>"if (!fh[p1])\n  return;\nfseek(fh[p1], p2, SEEK_SET);\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "params"=>[:w, :l], "defaults"=>[]}, :random=>{"code"=>"/* Generate a random integer from 0..p1 inclusive */\n/* Strategy: Use libc random(), which returns 0..RAND_MAX inclusive,\n * and take the result modulo (p1+1). Avoid bias if p1+1 does not\n * divide evenly into RAND_MAX+1. Be very careful about overflow. */\nlong v, limit, top;\nif (p1 <= 0)\n  return 0;\nif (p1 == 0x7FFFFFFF)  /* avoid overflow in p1+1 */\n  return random() & 0x7FFFFFFF;\nlimit = p1 + 1;\nif (RAND_MAX % limit == p1)  /* divides evenly? */\n  return random() % limit;\n/* RAND_MAX + 1 would overflow, so move the +1 out of the modulo */\n/* This is safe because of the \"divides evenly\" check above. */\ntop = RAND_MAX - ((RAND_MAX % limit) + 1);\ndo { v = random(); } while (v > top);\nreturn v % limit;\n", "fragments"=>[:random], "includes"=>[], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :sendnetworkstring=>{"code"=>"size_t count = p2.length();\nssize_t r = 0;\nsize_t n = 0;\nwhile (n < count) {\n    r = write(p1 - 1, p2.data() + n, count - n);\n    if (r < 0 && errno == EINTR)\n        continue;\n    if (r < 0)\n        return;\n    /* What should happen if write() returns 0 all the time?\n     * I assume it can sometimes return 0 legitimately,\n     * if it failed to write anything this time. */\n    n += r;\n }\n", "includes"=>["unistd.h"], "params"=>[:l, :s], "defaults"=>[]}, :openscreen=>{"code"=>"uint32_t flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN;\nif (!SDL_WasInit(SDL_INIT_VIDEO)) {\n    SDL_InitSubSystem(SDL_INIT_VIDEO);\n}\nscreen = SDL_SetVideoMode(p1, p2, p3, flags);\nif (!screen)\n    return 0;\nSDL_WM_SetCaption(p4.c_str(), \"\");\nSDL_ShowCursor(SDL_DISABLE);\nreturn 1;\n", "fragments"=>[:screen], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l, :l, :l, :s], "defaults"=>[], "return"=>"l"}, :clipsprite=>{"code"=>"if (p1 >= 1024 || !sprites[p1])\n    return;\nspriteclips[p1].x = p2;\nspriteclips[p1].y = p3;\nspriteclips[p1].w = p4;\nspriteclips[p1].h = p5;\n", "fragments"=>[:sprites], "includes"=>[], "params"=>[:w, :l, :l, :l, :l], "defaults"=>[]}, :writeword=>{"code"=>"if (!fh[p1])\n    return;\nfputc(p2, fh[p1]);\nfputc((p2 >> 8), fh[p1]);\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "params"=>[:w, :w], "defaults"=>[]}, :runprogram=>{"code"=>"/* stub */\n", "includes"=>[], "params"=>[:s], "defaults"=>[]}, :firstelement=>{"code"=>"if (!p1->root)\n    return 0;\np1->current = p1->root;\np1->index = 0;\nreturn 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :keyboardpushed=>{"code"=>"if (p1 >= numkeys)\n  return 0;\nif (p1 < 0)\n  return 0;\nreturn keystate[p1] != 0;\n", "fragments"=>[:keyboard], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[:l], "defaults"=>[], "return"=>"l"}, :startdrawing=>{"code"=>";  /* cheat -- all output to main screen */\n", "includes"=>[], "params"=>[:l], "defaults"=>[]}, :right=>{"code"=>"if (p2 >= p1.length())\n  return p1;\nreturn p1.substr(p1.length() - p2);\n", "includes"=>[], "rtype"=>:s, "params"=>[:s, :l], "defaults"=>[], "return"=>"s"}, :displaytranslucentsprite=>{"code"=>"SDL_Rect dstrect = { p2, p3, 0, 0 };\nuint32_t color;\nif (p1 >= 1024 || !sprites[p1])\n    return;\ncolor = SDL_MapRGB(sprites[p1]->format, 0, 0, 0);\nSDL_SetColorKey(sprites[p1], SDL_SRCCOLORKEY, color);\nSDL_SetAlpha(sprites[p1], SDL_SRCALPHA, p4);\nSDL_BlitSurface(sprites[p1], &spriteclips[p1], screen, &dstrect);\n", "fragments"=>[:sprites], "includes"=>["SDL.h"], "params"=>[:w, :l, :l, :l], "defaults"=>[]}, :examinedirectory=>{"code"=>"int handle;\nif (p1 < 0) {\n    handle = unused_dh();\n    if (handle == 0)\n      return 0;\n} else {\n    handle = p1;\n}\nif (dh[handle].dir) {\n    closedir(dh[handle].dir);\n    dh[handle].dir = 0;\n    free(dh[handle].pattern);\n    free(dh[handle].name);\n}\ndh[handle].dir = opendir(p2.c_str());\nif (!dh[handle].dir)\n  return 0;\ndh[handle].name = strdup(p2.c_str());\ndh[handle].pattern = strdup(p3.c_str());\nreturn (p1 < 0) ? handle : 1;\n", "fragments"=>[:dirhandles], "includes"=>["sys/types.h", "dirent.h", "stdlib.h", "string.h"], "rtype"=>:w, "params"=>[:w, :s, :s], "defaults"=>[], "return"=>"w"}, :setframerate=>{"code"=>"framerate = p1;\n", "fragments"=>[:framerate], "includes"=>[], "params"=>[:l], "defaults"=>[]}, :replacestring=>{"code"=>"size_t pos;\nif (p2.empty()) /* avoid infinite loop */\n    return p1;\npos = p1.find(p2);\nwhile (pos != std::string::npos) {\n    p1.replace(pos, p2.length(), p3);\n    pos = p1.find(p2, pos + p3.length());\n}\nreturn p1;\n", "includes"=>[], "rtype"=>:s, "params"=>[:s, :s, :s], "defaults"=>[], "return"=>"s"}, :nextelement=>{"code"=>"if (!p1->current)\n  p1->current = p1->root;\nelse\n  p1->current = p1->current->next;\np1->index += 1;\nreturn p1->current != 0;\n", "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :initjoystick=>{"code"=>"if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0)\n    return 0;\nif (SDL_NumJoysticks() == 0)\n    return 0;\njoystick = SDL_JoystickOpen(0);\nif (!joystick)\n    return 0;\nreturn 1;\n", "fragments"=>[:joystick], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :loadmodule=>{"code"=>"int handle;\nif (p1 < 0) {\n    handle = unused_mod();\n    if (handle == 0)\n        return 0;\n} else {\n    handle = p1;\n}\nif (mods[handle]) {\n    Mix_FreeMusic(mods[handle]);\n    mods[handle] = 0;\n}\nmods[handle] = Mix_LoadMUS(p2.c_str());\nif (!mods[handle])\n    return 0;\nreturn (p1 < 0) ? handle : 1;\n", "fragments"=>[:mods], "includes"=>[], "rtype"=>:w, "params"=>[:w, :s], "defaults"=>[], "return"=>"w"}, :line=>{"code"=>"Uint32 color;\nif (p5 < 0) {\n  color = SDL_MapRGB(screen->format, frontcolor.r, frontcolor.g, frontcolor.b);\n} else {\n  color = SDL_MapRGB(screen->format, (p5 >> 16) && 0xff, (p5 >> 8) && 0xff, p5 && 0xff);\n}\nlinedraw(p1, p2, p3, p4, color);\n", "fragments"=>[:linedraw], "includes"=>[], "params"=>[:l, :l, :l, :l, :l], "defaults"=>[-1]}, :nextdirectoryentry=>{"code"=>"struct dirent *ent;\nif (!dh[p1].dir)\n    return 0;\nent = readdir(dh[p1].dir);\nif (!ent)\n  return 0;\ndh[p1].curdent = *ent;\nif (dh[p1].curdent.d_type == DT_DIR)\n  return 1;\nreturn 2;\n", "fragments"=>[:dirhandles], "includes"=>["sys/types.h", "dirent.h", "unistd.h"], "rtype"=>:w, "params"=>[:w], "defaults"=>[], "return"=>"w"}, :clearlist=>{"code"=>"struct ListElement *p = p1->root;\nstruct ListElement *n;\nwhile (p) {\n    n = p->next;\n    p1->del_elem(p);\n    p = n;\n}\np1->root = 0;\np1->current = 0;\np1->last = 0;\np1->length = 0;\np1->index = -1;\n", "includes"=>[], "params"=>[:"()"], "defaults"=>[]}, :val=>{"code"=>"return strtol(p1.c_str(), 0, 10);\n", "includes"=>["stdlib.h"], "rtype"=>:l, "params"=>[:s], "defaults"=>[], "return"=>"l"}, :joystickaxisy=>{"code"=>"int y = SDL_JoystickGetAxis(joystick, 1);\nif (y < -100) return -1;\nif (y > 100) return 1;\nreturn 0;\n", "fragments"=>[:joystick], "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :clearscreen=>{"code"=>"int r, g, b;\nuint32_t color;\nif (!screen)\n    return;\nr = (p1 >> 16) & 0xff;\ng = (p1 >> 8) & 0xff;\nb = p1 & 0xff;\ncolor = SDL_MapRGB(screen->format, r, g, b);\nSDL_FillRect(screen, 0, color);\n", "fragments"=>[:screen], "includes"=>["SDL.h"], "params"=>[:l], "defaults"=>[]}, :date=>{"code"=>"return time(0);\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :initmouse=>{"code"=>"return 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :initsprite=>{"code"=>"return SDL_Init(SDL_INIT_VIDEO) == 0;\n", "includes"=>["SDL.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :openfile=>{"code"=>"return fileopen(p1, p2.c_str(), \"w+\");\n", "fragments"=>[:fileopen], "includes"=>[], "rtype"=>:w, "params"=>[:w, :s], "defaults"=>[], "return"=>"w"}, :addelement=>{"code"=>"struct ListElement *newelem = p1->alloc_elem();\nif (!newelem)\n    return 0;\nif (p1->length == 0) {\n    insertonly(p1, newelem);\n} else if (!p1->current) {\n    insertfirst(p1, newelem);\n} else if (p1->current == p1->last) {\n    insertlast(p1, newelem);\n} else {\n    newelem->next = p1->current->next;\n    newelem->prev = p1->current;\n    newelem->next->prev = newelem;\n    newelem->prev->next = newelem;\n    p1->current = newelem;\n    p1->length += 1;\n    p1->index += 1;\n}\nreturn 1;\n", "fragments"=>[:listfuncs], "includes"=>[], "rtype"=>:l, "params"=>[:"()"], "defaults"=>[], "return"=>"l"}, :elapsedmilliseconds=>{"code"=>"/* Instead of going out and parsing /proc/uptime or something,\n * just fake it. Pretend that the system was up for one hour,\n * at the first call to ElapsedMilliseconds. Callers are going\n * to be interested in time differences, not absolute time. */\nstatic struct timeval elapsedbasis;\nstruct timeval tv;\ngettimeofday(&tv, 0);\nif (elapsedbasis.tv_sec == 0) {\n    elapsedbasis = tv;\n    elapsedbasis.tv_sec -= 3600;\n}\nreturn (tv.tv_sec - elapsedbasis.tv_sec) * 1000 +\n       (tv.tv_usec - elapsedbasis.tv_usec) / 1000;\n", "includes"=>["sys/time.h", "time.h"], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :textwidth=>{"code"=>"int w = 0;\nTTF_SizeText(font, p1.c_str(), &w, 0);\nreturn w;\n", "fragments"=>[:ttf, :screen], "includes"=>["SDL_ttf.h"], "rtype"=>:l, "params"=>[:s], "defaults"=>[], "return"=>"l"}, :createpack=>{"code"=>"closepack();\npackfd = open(p1.c_str(), O_CREAT|O_TRUNC|O_WRONLY, 0666);\nreturn packfd >= 0;\n", "fragments"=>[:packfile], "includes"=>["sys/types.h", "sys/stat.h", "fcntl.h"], "rtype"=>:l, "params"=>[:s], "defaults"=>[], "return"=>"l"}, :printn=>{"code"=>"printf(\"%s\\n\", p1.c_str());\n", "includes"=>["stdio.h"], "params"=>[:s], "defaults"=>[]}, :freesprite=>{"code"=>"if (p1 < 1024 && sprites[p1]) {\n  SDL_FreeSurface(sprites[p1]);\n  sprites[p1] = 0;\n}\n", "fragments"=>[:sprites], "includes"=>["SDL.h"], "params"=>[:w], "defaults"=>[]}, :eof=>{"code"=>"/* Can't use feof() here. Eof() should return true when the file\n * pointer is actually at the end of the file, while feof only\n * returns true when a previous read has failed. */\nint c;\nif (!fh[p1])\n  return 0;\nc = getc(fh[p1]);\nif (c == EOF)\n  return 1;\nungetc(c, fh[p1]);\nreturn 0;\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "rtype"=>:w, "params"=>[:l], "defaults"=>[], "return"=>"w"}, :closefile=>{"code"=>"if (fh[p1]) {\n  fclose(fh[p1]);\n  fh[p1] = 0;\n}\n", "fragments"=>[:filehandles], "includes"=>["stdio.h"], "params"=>[:w], "defaults"=>[]}, :mousey=>{"code"=>"return mousey;\n", "fragments"=>[:mouse], "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}, :opennetworkconnection=>{"code"=>"struct hostent *h;\nint sockfd;\nh = gethostbyname(p1.c_str());\nif (!h)\n    return 0;\nsockfd = socket(h->h_addrtype, SOCK_STREAM, 0);\nif (sockfd < 0)\n    return 0;\nif (connect(sockfd, (struct sockaddr *) h->h_addr_list[0], h->h_length) < 0) {\n    close(sockfd);\n    return 0;\n}\nreturn sockfd + 1;  /* offset by one because sockfd might be 0 */\n", "includes"=>["netdb.h", "sys/types.h", "sys/socket.h", "unistd.h"], "rtype"=>:l, "params"=>[:s, :w], "defaults"=>[], "return"=>"l"}, :usejpegimagedecoder=>{"code"=>"return 1;\n", "includes"=>[], "rtype"=>:l, "params"=>[], "defaults"=>[], "return"=>"l"}}
#
# DO NOT MODIFY!!!!
# This file is automatically generated by racc 1.4.5
# from racc grammer file "elice.y".
#
#
# elice.tab.rb: generated by racc (runtime embedded)
#
###### racc/parser.rb begin
unless $".index 'racc/parser.rb'
$".push 'racc/parser.rb'

self.class.module_eval <<'..end racc/parser.rb modeval..id359005cf13', 'racc/parser.rb', 1
#
# $Id: parser.rb,v 1.7 2005/11/20 17:31:32 aamine Exp $
#
# Copyright (c) 1999-2005 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the same terms of ruby.
#
# As a special exception, when this code is copied by Racc
# into a Racc output file, you may use that output file
# without restriction.
#

unless defined?(NotImplementedError)
  NotImplementedError = NotImplementError
end

module Racc
  class ParseError < StandardError; end
end
unless defined?(::ParseError)
  ParseError = Racc::ParseError
end

module Racc

  unless defined?(Racc_No_Extentions)
    Racc_No_Extentions = false
  end

  class Parser

    Racc_Runtime_Version = '1.4.5'
    Racc_Runtime_Revision = '$Revision: 1.7 $'.split[1]

    Racc_Runtime_Core_Version_R = '1.4.5'
    Racc_Runtime_Core_Revision_R = '$Revision: 1.7 $'.split[1]
    begin
      require 'racc/cparse'
    # Racc_Runtime_Core_Version_C  = (defined in extention)
      Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split[2]
      unless new.respond_to?(:_racc_do_parse_c, true)
        raise LoadError, 'old cparse.so'
      end
      if Racc_No_Extentions
        raise LoadError, 'selecting ruby version of racc runtime core'
      end

      Racc_Main_Parsing_Routine    = :_racc_do_parse_c
      Racc_YY_Parse_Method         = :_racc_yyparse_c
      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_C
      Racc_Runtime_Core_Revision   = Racc_Runtime_Core_Revision_C
      Racc_Runtime_Type            = 'c'
    rescue LoadError
      Racc_Main_Parsing_Routine    = :_racc_do_parse_rb
      Racc_YY_Parse_Method         = :_racc_yyparse_rb
      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_R
      Racc_Runtime_Core_Revision   = Racc_Runtime_Core_Revision_R
      Racc_Runtime_Type            = 'ruby'
    end

    def Parser.racc_runtime_type
      Racc_Runtime_Type
    end

    private

    def _racc_setup
      @yydebug = false unless self.class::Racc_debug_parser
      @yydebug = false unless defined?(@yydebug)
      if @yydebug
        @racc_debug_out = $stderr unless defined?(@racc_debug_out)
        @racc_debug_out ||= $stderr
      end
      arg = self.class::Racc_arg
      arg[13] = true if arg.size < 14
      arg
    end

    def _racc_init_sysvars
      @racc_state  = [0]
      @racc_tstack = []
      @racc_vstack = []

      @racc_t = nil
      @racc_val = nil

      @racc_read_next = true

      @racc_user_yyerror = false
      @racc_error_status = 0
    end

    ###
    ### do_parse
    ###

    def do_parse
      __send__(Racc_Main_Parsing_Routine, _racc_setup(), false)
    end

    def next_token
      raise NotImplementedError, "#{self.class}\#next_token is not defined"
    end

    def _racc_do_parse_rb(arg, in_debug)
      action_table, action_check, action_default, action_pointer,
      goto_table,   goto_check,   goto_default,   goto_pointer,
      nt_base,      reduce_table, token_table,    shift_n,
      reduce_n,     use_result,   * = arg

      _racc_init_sysvars
      tok = act = i = nil
      nerr = 0

      catch(:racc_end_parse) {
        while true
          if i = action_pointer[@racc_state[-1]]
            if @racc_read_next
              if @racc_t != 0   # not EOF
                tok, @racc_val = next_token()
                unless tok      # EOF
                  @racc_t = 0
                else
                  @racc_t = (token_table[tok] or 1)   # error token
                end
                racc_read_token(@racc_t, tok, @racc_val) if @yydebug
                @racc_read_next = false
              end
            end
            i += @racc_t
            unless i >= 0 and
                   act = action_table[i] and
                   action_check[i] == @racc_state[-1]
              act = action_default[@racc_state[-1]]
            end
          else
            act = action_default[@racc_state[-1]]
          end
          while act = _racc_evalact(act, arg)
            ;
          end
        end
      }
    end

    ###
    ### yyparse
    ###

    def yyparse(recv, mid)
      __send__(Racc_YY_Parse_Method, recv, mid, _racc_setup(), true)
    end

    def _racc_yyparse_rb(recv, mid, arg, c_debug)
      action_table, action_check, action_default, action_pointer,
      goto_table,   goto_check,   goto_default,   goto_pointer,
      nt_base,      reduce_table, token_table,    shift_n,
      reduce_n,     use_result,   * = arg

      _racc_init_sysvars
      tok = nil
      act = nil
      i = nil
      nerr = 0

      catch(:racc_end_parse) {
        until i = action_pointer[@racc_state[-1]]
          while act = _racc_evalact(action_default[@racc_state[-1]], arg)
            ;
          end
        end
        recv.__send__(mid) do |tok, val|
          unless tok
            @racc_t = 0
          else
            @racc_t = (token_table[tok] or 1)   # error token
          end
          @racc_val = val
          @racc_read_next = false

          i += @racc_t
          unless i >= 0 and
                 act = action_table[i] and
                 action_check[i] == @racc_state[-1]
            act = action_default[@racc_state[-1]]
          end
          while act = _racc_evalact(act, arg)
            ;
          end

          while not (i = action_pointer[@racc_state[-1]]) or
                not @racc_read_next or
                @racc_t == 0   # $
            unless i and i += @racc_t and
                   i >= 0 and
                   act = action_table[i] and
                   action_check[i] == @racc_state[-1]
              act = action_default[@racc_state[-1]]
            end
            while act = _racc_evalact(act, arg)
              ;
            end
          end
        end
      }
    end

    ###
    ### common
    ###

    def _racc_evalact(act, arg)
      action_table, action_check, action_default, action_pointer,
      goto_table,   goto_check,   goto_default,   goto_pointer,
      nt_base,      reduce_table, token_table,    shift_n,
      reduce_n,     use_result,   * = arg
      nerr = 0   # tmp

      if act > 0 and act < shift_n
        #
        # shift
        #
        if @racc_error_status > 0
          @racc_error_status -= 1 unless @racc_t == 1   # error token
        end
        @racc_vstack.push @racc_val
        @racc_state.push act
        @racc_read_next = true
        if @yydebug
          @racc_tstack.push @racc_t
          racc_shift @racc_t, @racc_tstack, @racc_vstack
        end

      elsif act < 0 and act > -reduce_n
        #
        # reduce
        #
        code = catch(:racc_jump) {
          @racc_state.push _racc_do_reduce(arg, act)
          false
        }
        if code
          case code
          when 1 # yyerror
            @racc_user_yyerror = true   # user_yyerror
            return -reduce_n
          when 2 # yyaccept
            return shift_n
          else
            raise '[Racc Bug] unknown jump code'
          end
        end

      elsif act == shift_n
        #
        # accept
        #
        racc_accept if @yydebug
        throw :racc_end_parse, @racc_vstack[0]

      elsif act == -reduce_n
        #
        # error
        #
        case @racc_error_status
        when 0
          unless arg[21]    # user_yyerror
            nerr += 1
            on_error @racc_t, @racc_val, @racc_vstack
          end
        when 3
          if @racc_t == 0   # is $
            throw :racc_end_parse, nil
          end
          @racc_read_next = true
        end
        @racc_user_yyerror = false
        @racc_error_status = 3
        while true
          if i = action_pointer[@racc_state[-1]]
            i += 1   # error token
            if  i >= 0 and
                (act = action_table[i]) and
                action_check[i] == @racc_state[-1]
              break
            end
          end
          throw :racc_end_parse, nil if @racc_state.size <= 1
          @racc_state.pop
          @racc_vstack.pop
          if @yydebug
            @racc_tstack.pop
            racc_e_pop @racc_state, @racc_tstack, @racc_vstack
          end
        end
        return act

      else
        raise "[Racc Bug] unknown action #{act.inspect}"
      end

      racc_next_state(@racc_state[-1], @racc_state) if @yydebug

      nil
    end

    def _racc_do_reduce(arg, act)
      action_table, action_check, action_default, action_pointer,
      goto_table,   goto_check,   goto_default,   goto_pointer,
      nt_base,      reduce_table, token_table,    shift_n,
      reduce_n,     use_result,   * = arg
      state = @racc_state
      vstack = @racc_vstack
      tstack = @racc_tstack

      i = act * -3
      len       = reduce_table[i]
      reduce_to = reduce_table[i+1]
      method_id = reduce_table[i+2]
      void_array = []

      tmp_t = tstack[-len, len] if @yydebug
      tmp_v = vstack[-len, len]
      tstack[-len, len] = void_array if @yydebug
      vstack[-len, len] = void_array
      state[-len, len]  = void_array

      # tstack must be updated AFTER method call
      if use_result
        vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])
      else
        vstack.push __send__(method_id, tmp_v, vstack)
      end
      tstack.push reduce_to

      racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug

      k1 = reduce_to - nt_base
      if i = goto_pointer[k1]
        i += state[-1]
        if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1
          return curstate
        end
      end
      goto_default[k1]
    end

    def on_error(t, val, vstack)
      raise ParseError, sprintf("\nparse error on value %s (%s)",
                                val.inspect, token_to_str(t) || '?')
    end

    def yyerror
      throw :racc_jump, 1
    end

    def yyaccept
      throw :racc_jump, 2
    end

    def yyerrok
      @racc_error_status = 0
    end

    #
    # for debugging output
    #

    def racc_read_token(t, tok, val)
      @racc_debug_out.print 'read    '
      @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
      @racc_debug_out.puts val.inspect
      @racc_debug_out.puts
    end

    def racc_shift(tok, tstack, vstack)
      @racc_debug_out.puts "shift   #{racc_token2str tok}"
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_reduce(toks, sim, tstack, vstack)
      out = @racc_debug_out
      out.print 'reduce '
      if toks.empty?
        out.print ' <none>'
      else
        toks.each {|t| out.print ' ', racc_token2str(t) }
      end
      out.puts " --> #{racc_token2str(sim)}"
          
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_accept
      @racc_debug_out.puts 'accept'
      @racc_debug_out.puts
    end

    def racc_e_pop(state, tstack, vstack)
      @racc_debug_out.puts 'error recovering mode: pop token'
      racc_print_states state
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_next_state(curstate, state)
      @racc_debug_out.puts  "goto    #{curstate}"
      racc_print_states state
      @racc_debug_out.puts
    end

    def racc_print_stacks(t, v)
      out = @racc_debug_out
      out.print '        ['
      t.each_index do |i|
        out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'
      end
      out.puts ' ]'
    end

    def racc_print_states(s)
      out = @racc_debug_out
      out.print '        ['
      s.each {|st| out.print ' ', st }
      out.puts ' ]'
    end

    def racc_token2str(tok)
      self.class::Racc_token_to_s_table[tok] or
          raise "[Racc Bug] can't convert token #{tok} to string"
    end

    def token_to_str(t)
      self.class::Racc_token_to_s_table[t]
    end

  end

end
..end racc/parser.rb modeval..id359005cf13
end
###### racc/parser.rb end


self.class.module_eval <<'..end elice.y modeval..id8bc032c391', 'elice.y', 495
require 'strscan'
require 'set'

class ProgramError < Exception
end

..end elice.y modeval..id8bc032c391

class Parser < Racc::Parser

module_eval <<'..end elice.y modeval..id8e746ab617', 'elice.y', 502
  def parse_file(fname, program, source)
    @program = program
    @scope = @program

    source += "\n"
    @fname = fname
    @s = StringScanner.new(source)

    @included_files = [ fname ]
    @filestack = []

    # This list must be duplicated in the token declaration above
    @keywords = Set[ 
      :XINCLUDEFILE, :INCLUDEFILE,
      :COMPILERSELECT, :COMPILERCASE, :COMPILERENDSELECT,
      :COMPILERIF, :COMPILERENDIF,
      :ENUMERATION, :ENDENUMERATION,
      :STRUCTURE, :ENDSTRUCTURE,
      :DIM, :NEWLIST, :DECLARE, :PROCEDURE, :ENDPROCEDURE, :PROCEDURERETURN,
      :DATASECTION, :ENDDATASECTION, :DATA, :READ,
      :SHARED, :STATIC, :GLOBAL, :PROTECTED,
      :IF, :ELSE, :ELSEIF, :ENDIF,
      :BREAK, :CONTINUE,
      :FOR, :TO, :STEP, :NEXT,
      :REPEAT, :UNTIL, :FOREVER,
      :WHILE, :WEND,
      :SELECT, :CASE, :DEFAULT, :ENDSELECT,
      :GOTO,
      :END,
      :AND, :OR, :NOT
    ]

    @skiptokens = false
    @compilerselect = nil

    begin
      @yydebug = true
      do_parse
    rescue ParseError, ProgramError => e
      e.set_backtrace(parse_stack)
      raise e
    end
  end

  def include_file(fname)
    source = File.read fname
    source += "\n"
    @included_files << fname
    @filestack << [@fname, @s]
    @fname = fname
    @s = StringScanner.new(source)
  end

  def next_token
    @s.skip /[ \t\0]+/

    # end of file
    if @s.eos?
      if @filestack.empty?
        return [false, false]   # end-of-input marker
      end
      @fname, @s = @filestack.pop
      return [:LINE, :LINE]    # line always ends at end of a file

    elsif @skiptokens
      if (s = @s.scan_until /(Compiler(Select|Case|EndSelect|If|EndIf))/)
        # Turn @skiptokens off again so that Compiler statement can be
        # parsed. It is parser's responsibility to turn it on again if needed.
        @skiptokens = false
        kw = @s[1].upcase.to_sym
        return [kw, kw]
      end
      raise ParseError, "expected CompilerEndSelect or CompilerEndIf before end of file"

    # end of line
    elsif @s.scan /[\n\r]+/
      return [:LINE, :LINE]

    # comment to end of line
    elsif @s.scan /;[^\n\r]*[\n\r]/
      return [:LINE, :LINE]

    # float literal
    elsif @s.scan /[0-9]*\.[0-9]+/
      return [:NUMBER, @s[0].to_f]

    # integer literal
    elsif @s.scan /[0-9]+/
      return [:NUMBER, @s[0].to_i]

    # hex integer literal
    elsif @s.scan /\$[a-fA-F0-9]+/
      return [:NUMBER, @s[0].slice(1,@s[0].size).to_i(16)]

    # binary integer literal
    elsif @s.scan /%[01]+/
      return [:NUMBER, @s[0].slice(1,@s[0].size).to_i(2)]

    # string literal
    elsif @s.scan /"([^"]*)"/
      # TODO: figure out quoting rules in strings
      return [:STRING, @s[1]]

    # constant
    elsif @s.scan /#([_A-Za-z][_A-Za-z0-9]*)/
      return [:CONSTANT, @s[1].upcase.to_sym]

    # double-char operator
    elsif @s.scan /<>|>=|<=/
      return [@s[0], @s[0]]

    # single-char operator
    elsif @s.scan /[=+-><*\/@&|!]/
      return [@s[0], @s[0]]

    # field selector (racc has trouble handling it as a literal)
    elsif @s.scan /\\/
      return [:BACKSLASH, @s[0]]

    # syntax helpers
    elsif @s.scan /[\[\](),.:]/
      return [@s[0], @s[0]]

    # keyword or identifier
    elsif @s.scan /([_A-Za-z][_A-Za-z0-9]*)/
      kw = @s[1].upcase.to_sym
      return [kw, kw] if @keywords.include? kw
      return [:ID, @s[1].downcase.to_sym]

    else
      raise ParseError, "unknown token"
    end
  end

  def on_error(t, val, vstack)
    tname = token_to_str(t) || "?"
    if val.is_a?(String) && tname == val.inspect
      raise ParseError, "unexpected #{val.inspect}"
    elsif val.is_a?(Symbol) && tname == val.to_s
      raise ParseError, "unexpected token #{tname}"
    elsif val.is_a? Symbol
      raise ParseError, "unexpected #{tname} token #{val}"
    else
      raise ParseError, "unexpected #{tname} token #{val.inspect}"
    end
  end

  def parse_stack
    stack = @filestack + [[@fname, @s]]
    stack = stack.reverse.map do |x|
      fname, s = x
      s.scan //
      lineno = s.pre_match.count("\n") + 1
      "#{fname}:#{lineno}"
    end
    return stack
  end

..end elice.y modeval..id8e746ab617

##### racc 1.4.5 generates ###

racc_reduce_table = [
 0, 0, :racc_error,
 1, 80, :_reduce_none,
 3, 80, :_reduce_none,
 0, 81, :_reduce_none,
 1, 81, :_reduce_none,
 3, 81, :_reduce_none,
 5, 81, :_reduce_none,
 1, 84, :_reduce_7,
 1, 84, :_reduce_none,
 2, 84, :_reduce_none,
 1, 84, :_reduce_none,
 1, 84, :_reduce_none,
 1, 85, :_reduce_12,
 1, 85, :_reduce_13,
 1, 85, :_reduce_14,
 1, 85, :_reduce_15,
 1, 85, :_reduce_16,
 1, 85, :_reduce_17,
 1, 85, :_reduce_none,
 2, 85, :_reduce_19,
 1, 85, :_reduce_20,
 1, 85, :_reduce_21,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_24,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 1, 85, :_reduce_none,
 2, 85, :_reduce_35,
 1, 85, :_reduce_36,
 1, 85, :_reduce_37,
 2, 85, :_reduce_38,
 1, 82, :_reduce_none,
 2, 82, :_reduce_none,
 3, 82, :_reduce_none,
 3, 113, :_reduce_42,
 0, 114, :_reduce_43,
 2, 114, :_reduce_44,
 1, 115, :_reduce_45,
 3, 115, :_reduce_46,
 2, 90, :_reduce_47,
 1, 117, :_reduce_none,
 1, 117, :_reduce_none,
 2, 91, :_reduce_50,
 2, 92, :_reduce_51,
 1, 93, :_reduce_52,
 2, 94, :_reduce_53,
 1, 95, :_reduce_54,
 3, 97, :_reduce_55,
 0, 120, :_reduce_56,
 5, 86, :_reduce_none,
 0, 119, :_reduce_none,
 3, 119, :_reduce_59,
 5, 98, :_reduce_60,
 0, 121, :_reduce_61,
 3, 121, :_reduce_62,
 2, 122, :_reduce_63,
 0, 124, :_reduce_64,
 3, 124, :_reduce_65,
 5, 96, :_reduce_66,
 6, 88, :_reduce_67,
 4, 89, :_reduce_68,
 6, 128, :_reduce_69,
 0, 126, :_reduce_70,
 2, 126, :_reduce_71,
 0, 127, :_reduce_72,
 1, 127, :_reduce_73,
 3, 127, :_reduce_74,
 1, 130, :_reduce_75,
 3, 130, :_reduce_76,
 0, 129, :_reduce_none,
 3, 129, :_reduce_none,
 3, 129, :_reduce_79,
 2, 131, :_reduce_none,
 2, 131, :_reduce_none,
 4, 131, :_reduce_82,
 0, 134, :_reduce_83,
 3, 134, :_reduce_84,
 2, 99, :_reduce_85,
 1, 132, :_reduce_none,
 3, 132, :_reduce_none,
 1, 135, :_reduce_88,
 1, 133, :_reduce_none,
 3, 133, :_reduce_none,
 1, 136, :_reduce_91,
 1, 87, :_reduce_none,
 3, 87, :_reduce_none,
 1, 137, :_reduce_none,
 3, 137, :_reduce_95,
 4, 137, :_reduce_96,
 1, 138, :_reduce_97,
 4, 106, :_reduce_98,
 2, 139, :_reduce_99,
 1, 139, :_reduce_100,
 5, 107, :_reduce_101,
 10, 108, :_reduce_102,
 0, 141, :_reduce_103,
 2, 141, :_reduce_104,
 1, 142, :_reduce_105,
 2, 142, :_reduce_106,
 6, 105, :_reduce_107,
 0, 143, :_reduce_108,
 3, 143, :_reduce_109,
 5, 143, :_reduce_110,
 5, 109, :_reduce_111,
 0, 144, :_reduce_112,
 5, 144, :_reduce_113,
 4, 144, :_reduce_114,
 2, 110, :_reduce_115,
 2, 111, :_reduce_116,
 3, 102, :_reduce_117,
 3, 103, :_reduce_118,
 3, 104, :_reduce_119,
 1, 145, :_reduce_none,
 4, 145, :_reduce_121,
 3, 145, :_reduce_122,
 5, 145, :_reduce_123,
 6, 145, :_reduce_124,
 1, 101, :_reduce_125,
 2, 101, :_reduce_126,
 1, 123, :_reduce_127,
 2, 123, :_reduce_128,
 3, 123, :_reduce_129,
 4, 100, :_reduce_130,
 4, 146, :_reduce_131,
 0, 125, :_reduce_132,
 1, 125, :_reduce_133,
 3, 125, :_reduce_134,
 1, 147, :_reduce_none,
 1, 147, :_reduce_none,
 1, 147, :_reduce_137,
 1, 147, :_reduce_none,
 2, 147, :_reduce_139,
 4, 147, :_reduce_140,
 3, 147, :_reduce_141,
 6, 147, :_reduce_142,
 1, 147, :_reduce_none,
 3, 147, :_reduce_144,
 1, 148, :_reduce_none,
 2, 148, :_reduce_146,
 3, 148, :_reduce_147,
 3, 148, :_reduce_148,
 3, 148, :_reduce_149,
 3, 148, :_reduce_150,
 3, 148, :_reduce_151,
 1, 112, :_reduce_none,
 3, 112, :_reduce_153,
 3, 112, :_reduce_154,
 3, 149, :_reduce_155,
 3, 149, :_reduce_156,
 3, 149, :_reduce_157,
 3, 149, :_reduce_158,
 3, 149, :_reduce_159,
 3, 149, :_reduce_160,
 1, 149, :_reduce_none,
 1, 150, :_reduce_none,
 2, 150, :_reduce_163,
 1, 151, :_reduce_none,
 3, 151, :_reduce_165,
 1, 152, :_reduce_none,
 3, 152, :_reduce_167,
 1, 140, :_reduce_none,
 3, 140, :_reduce_169,
 3, 140, :_reduce_170,
 1, 116, :_reduce_171,
 1, 118, :_reduce_172,
 1, 83, :_reduce_none,
 1, 83, :_reduce_none,
 2, 83, :_reduce_none ]

racc_reduce_n = 176

racc_shift_n = 309

racc_action_table = [
    73,    75,    77,    79,    73,    75,    77,    79,    73,    75,
    77,    79,    73,    75,    77,    79,    73,    75,    77,    79,
    99,   103,     1,   177,    73,    75,    77,    79,    53,   103,
    98,   140,    53,   140,   242,   117,    53,     1,   139,   140,
    53,   245,     1,   140,    53,     1,    73,    75,    77,    79,
     1,    65,    53,     1,    73,    75,    77,    79,     1,    81,
   137,   131,  -165,    81,    53,    70,   230,    81,  -167,    70,
   233,    81,   169,    70,    53,    81,    67,    70,   235,    68,
    65,    70,    53,    81,     5,   137,   131,    68,     1,    70,
    73,    75,    77,    79,     1,    73,    75,    77,    79,     5,
    73,    75,    77,    79,     5,    81,    67,     5,    65,    68,
   229,    70,     5,    81,    65,     5,    65,    68,    53,    70,
     5,   137,   131,    53,    73,    75,    77,    79,    53,    73,
    75,    77,    79,  -130,    73,    75,    77,    79,     1,    73,
    75,    77,    79,   -24,    73,    75,    77,    79,     1,    81,
     5,   103,    53,    68,    81,    70,     5,    53,    68,    81,
    70,   174,    53,    68,     1,    70,     1,    53,    73,    75,
    77,    79,    53,    73,    75,    77,    79,    53,    73,    75,
    77,    79,   103,    81,   137,   131,   207,    68,    81,    70,
    93,   255,    68,    81,    70,  -130,    53,    68,    81,    70,
     5,    53,    68,    81,    70,   -24,    53,    68,    53,    70,
     5,    73,    75,    77,    79,     1,    73,    75,    77,    79,
     1,    73,    75,    77,    79,     1,     5,    81,     5,   280,
    67,    68,    81,    70,   281,     1,    68,    81,    70,    53,
     1,    68,   165,    70,    53,    73,    75,    77,    79,    53,
    73,    75,    77,    79,   175,    73,    75,    77,    79,   103,
     1,   248,     1,    67,    73,    75,    77,    79,     1,   198,
    81,   103,   199,    53,    68,    81,    70,     5,    53,    68,
    81,    70,     5,    53,    68,    53,    70,     5,    73,    75,
    77,    79,    53,    73,    75,    77,    79,     5,    73,    75,
    77,    79,     5,     1,    81,     1,   207,    99,    68,    81,
    70,   208,   186,    68,    81,    70,    53,    98,    68,   289,
    70,    53,     5,    81,     5,   103,    53,    68,   162,    70,
     5,    73,    75,    77,    79,   103,    73,    75,    77,    79,
    73,    75,    77,    79,   137,   131,    41,    81,    41,   117,
    99,    68,    81,    70,    65,   146,    68,    81,    70,    53,
    98,    68,   200,    70,    53,     5,   172,     5,    53,    73,
    75,    77,    79,   240,    73,    75,    77,    79,    73,    75,
    77,    79,   239,    67,   207,    73,    75,    77,    79,   231,
    81,   137,   131,   280,    68,    81,    70,    53,   285,    81,
   256,    70,    53,    68,    65,    70,    53,    73,    75,    77,
    79,   137,   131,    53,    73,    75,    77,    79,   236,   237,
   238,    67,   228,    73,    75,    77,    79,   103,    81,   156,
    67,   103,    68,    81,    70,    53,   152,    81,    65,    70,
    65,    68,    53,    70,    81,   137,   131,   150,    68,   148,
    70,    53,    73,    75,    77,    79,   226,    73,    75,    77,
    79,    65,    73,    75,    77,    79,    81,  -166,  -164,    65,
    68,    99,    70,    81,   137,   131,   100,    68,   101,    70,
    53,    98,    81,   159,    93,    53,    68,   220,    70,   275,
    53,    73,    75,    77,    79,   276,    73,    75,    77,    79,
   277,    73,    75,    77,    79,   137,   131,   278,   267,    67,
    65,    81,   137,   131,    67,    68,    81,    70,    65,    53,
    68,    81,    70,    65,    53,    68,   279,    70,   103,    53,
    73,    75,    77,    79,   140,    73,    75,    77,    79,   283,
    73,    75,    77,    79,   286,   137,   131,   170,   137,   131,
    81,   137,   131,   122,    68,    81,    70,   140,    53,    68,
    81,    70,   122,    53,    68,   133,    70,    89,    53,    65,
    90,   137,   131,   137,   131,    65,    91,    88,   137,   131,
   134,   135,   136,   130,   132,   137,   131,   137,   131,    81,
   137,   131,   103,    68,    81,    70,   137,   131,    68,    81,
    70,   137,   131,    68,    65,    70,    30,    36,    42,    47,
    56,    62,     7,    13,    19,    65,   248,    32,   103,    41,
   214,   294,   103,   211,    12,   103,    65,   107,    33,   212,
   213,   216,    53,    60,    65,   106,   104,    25,   140,    31,
   302,   194,    65,    54,    66,    65,    11,    65,    23,     6,
   187,   nil,    39,    48,    30,    36,    42,    47,    56,    62,
     7,    13,    19,   nil,   nil,    32,   nil,    41,   nil,   nil,
   nil,   nil,    12,   nil,   nil,   nil,    33,   nil,   nil,   216,
    53,    60,   nil,   nil,   nil,    25,   nil,    31,   nil,   nil,
   nil,    54,   225,   222,    11,   nil,    23,   nil,   nil,   nil,
    39,    48,    30,    36,    42,    47,    56,    62,     7,    13,
    19,   nil,   nil,    32,   nil,    41,   nil,   nil,   nil,   nil,
    12,   nil,   nil,   nil,    33,   nil,   nil,   216,    53,    60,
   nil,   nil,   nil,    25,   nil,    31,   nil,   nil,   nil,    54,
   nil,   nil,    11,   nil,    23,   nil,   nil,   nil,    39,    48,
    30,    36,    42,    47,    56,    62,     7,    13,    19,   nil,
   nil,    32,   nil,    41,   nil,   nil,   nil,   nil,    12,   nil,
   nil,   nil,    33,   nil,   nil,   216,    53,    60,   nil,   nil,
   nil,    25,   nil,    31,   nil,   nil,   306,    54,   nil,   nil,
    11,   nil,    23,   nil,   nil,   nil,    39,    48,    30,    36,
    42,    47,    56,    62,     7,    13,    19,    24,   nil,    32,
   nil,    41,   nil,    55,    61,   nil,    12,    22,   nil,   nil,
    33,   nil,   nil,    51,    53,    60,   nil,   nil,   nil,    25,
   nil,    31,   nil,   nil,   nil,    54,   nil,   nil,    11,   nil,
    23,   nil,   nil,   nil,    39,    48,    30,    36,    42,    47,
    56,    62,     7,    13,    19,   nil,   nil,    32,   nil,    41,
   nil,   nil,   nil,   nil,    12,   nil,   nil,   nil,    33,   nil,
   nil,   216,    53,    60,   nil,   nil,   nil,    25,   nil,    31,
   nil,   nil,   nil,    54,   nil,   nil,    11,   232,    23,   nil,
   nil,   nil,    39,    48,    30,    36,    42,    47,    56,    62,
     7,    13,    19,   nil,   nil,    32,   nil,    41,   nil,   nil,
   nil,   nil,    12,   nil,   nil,   nil,    33,   nil,   nil,   216,
    53,    60,   262,   264,   nil,    25,   nil,    31,   nil,   nil,
   nil,    54,   nil,   nil,    11,   nil,    23,   nil,   nil,   nil,
    39,    48,    30,    36,    42,    47,    56,    62,     7,    13,
    19,   nil,   nil,    32,   nil,    41,   nil,   nil,   nil,   nil,
    12,   nil,   nil,   nil,    33,   nil,   nil,   216,    53,    60,
   nil,   nil,   nil,    25,   nil,    31,   nil,   nil,   nil,    54,
   nil,   nil,    11,   nil,    23,   nil,   nil,   nil,    39,    48,
    30,    36,    42,    47,    56,    62,     7,    13,    19,   nil,
   nil,    32,   nil,    41,   nil,   nil,   nil,   nil,    12,   nil,
   nil,   nil,    33,   nil,   nil,   216,    53,    60,   262,   264,
   nil,    25,   nil,    31,   nil,   nil,   nil,    54,   nil,   nil,
    11,   nil,    23,   nil,   nil,   nil,    39,    48,    30,    36,
    42,    47,    56,    62,     7,    13,    19,   nil,   nil,    32,
   nil,    41,   nil,   nil,   nil,   nil,    12,   nil,   nil,   nil,
    33,   nil,   nil,   216,    53,    60,   nil,   nil,   nil,    25,
   nil,    31,   nil,   nil,   nil,    54,   nil,   nil,    11,   nil,
    23,   nil,   nil,   nil,    39,    48,   141,   142,   143,   144,
   145,   141,   142,   143,   144,   145,   141,   142,   143,   144,
   145 ]

racc_action_check = [
   143,   143,   143,   143,   142,   142,   142,   142,   141,   141,
   141,   141,   145,   145,   145,   145,   146,   146,   146,   146,
   103,   172,    96,   126,    11,    11,    11,    11,   143,   210,
   103,   189,   142,   190,   209,   172,   141,   243,    70,   191,
   145,   210,   237,   192,   146,   224,    12,    12,    12,    12,
    83,   160,    11,   217,    13,    13,    13,    13,   269,   143,
   209,   209,   195,   142,    70,   143,   187,   141,   197,   142,
   198,   145,   109,   141,    12,   146,    11,   145,   201,   146,
   203,   146,    13,    11,    96,    96,    96,    11,   215,    11,
   137,   137,   137,   137,   240,   136,   136,   136,   136,   243,
   135,   135,   135,   135,   237,    12,    13,   224,   204,    12,
   186,    12,    83,    13,   121,   217,   108,    13,   137,    13,
   269,   269,   269,   136,    23,    23,    23,    23,   135,   134,
   134,   134,   134,   208,   133,   133,   133,   133,   104,   132,
   132,   132,   132,    20,   289,   289,   289,   289,   262,   137,
   215,    31,    23,   137,   136,   137,   240,   134,   136,   135,
   136,   122,   133,   135,    24,   135,    22,   132,   131,   131,
   131,   131,   289,   130,   130,   130,   130,    31,   148,   148,
   148,   148,    33,    23,   178,   178,   218,    23,   134,    23,
    22,   218,   134,   133,   134,   208,   131,   133,   132,   133,
   104,   130,   132,   289,   132,    20,   148,   289,    33,   289,
   262,   150,   150,   150,   150,   290,   279,   279,   279,   279,
   284,    43,    43,    43,    43,    92,    24,   131,    22,   260,
   148,   131,   130,   131,   260,    54,   130,   148,   130,   150,
    40,   148,   102,   148,   279,   157,   157,   157,   157,    43,
    48,    48,    48,    48,   123,   275,   275,   275,   275,   306,
   125,   212,   159,   150,   165,   165,   165,   165,   158,   152,
   150,   213,   152,   157,   150,   279,   150,   290,    48,   279,
    43,   279,   284,   275,    43,   306,    43,    92,    90,    90,
    90,    90,   165,   170,   170,   170,   170,    54,    56,    56,
    56,    56,    40,    46,   157,     0,   164,   139,   157,    48,
   157,   164,   139,    48,   275,    48,    90,   139,   275,   272,
   275,   170,   125,   165,   159,   214,    56,   165,    99,   165,
   158,    60,    60,    60,    60,    51,   144,   144,   144,   144,
    62,    62,    62,    62,   272,   272,   216,    90,    51,    51,
    77,    90,   170,    90,    97,    77,   170,    56,   170,    60,
    77,    56,   156,    56,   144,    46,   119,     0,    62,    67,
    67,    67,    67,   206,    68,    68,    68,    68,   264,   264,
   264,   264,   206,    60,   193,   199,   199,   199,   199,   193,
    60,   153,   153,   265,    60,   144,    60,    67,   265,    62,
   220,   144,    68,    62,    95,    62,   264,   207,   207,   207,
   207,   154,   154,   199,   106,   106,   106,   106,   205,   205,
   205,    67,   177,   242,   242,   242,   242,   226,    67,    93,
   264,   228,    67,    68,    67,   207,    89,   264,   155,    68,
   176,   264,   106,   264,   199,   241,   241,    84,   199,    82,
   199,   242,   100,   100,   100,   100,   175,    81,    81,    81,
    81,   112,   225,   225,   225,   225,   207,    80,    80,   166,
   207,    30,   207,   106,    85,    85,    30,   106,    30,   106,
   100,    30,   242,    94,    94,    81,   242,   171,   242,   244,
   225,    91,    91,    91,    91,   246,   236,   236,   236,   236,
   249,   235,   235,   235,   235,   113,   113,   252,   234,    81,
   253,   100,   234,   234,   225,   100,    81,   100,   254,    91,
    81,   225,    81,   257,   236,   225,   259,   225,   117,   235,
    88,    88,    88,    88,    74,   230,   230,   230,   230,   263,
   169,   169,   169,   169,   266,   219,   219,   116,   266,   266,
    91,   180,   180,    61,    91,   236,    91,   188,    88,   236,
   235,   236,    55,   230,   235,    69,   235,    18,   169,   270,
    18,    69,    69,   181,   181,   271,    18,    18,   182,   182,
    69,    69,    69,    69,    69,   183,   183,   184,   184,    88,
   163,   163,    53,    88,   230,    88,   151,   151,   230,   169,
   230,   110,   110,   169,   273,   169,   168,   168,   168,   168,
   168,   168,   168,   168,   168,   149,   276,   168,   277,   168,
   168,   278,    41,   168,   168,   280,   282,    39,   168,   168,
   168,   168,   168,   168,   287,    36,    32,   168,   129,   168,
   291,   147,   298,   168,     6,   301,   168,     4,   168,     2,
   140,   nil,   168,   168,   173,   173,   173,   173,   173,   173,
   173,   173,   173,   nil,   nil,   173,   nil,   173,   nil,   nil,
   nil,   nil,   173,   nil,   nil,   nil,   173,   nil,   nil,   173,
   173,   173,   nil,   nil,   nil,   173,   nil,   173,   nil,   nil,
   nil,   173,   173,   173,   173,   nil,   173,   nil,   nil,   nil,
   173,   173,   288,   288,   288,   288,   288,   288,   288,   288,
   288,   nil,   nil,   288,   nil,   288,   nil,   nil,   nil,   nil,
   288,   nil,   nil,   nil,   288,   nil,   nil,   288,   288,   288,
   nil,   nil,   nil,   288,   nil,   288,   nil,   nil,   nil,   288,
   nil,   nil,   288,   nil,   288,   nil,   nil,   nil,   288,   288,
   304,   304,   304,   304,   304,   304,   304,   304,   304,   nil,
   nil,   304,   nil,   304,   nil,   nil,   nil,   nil,   304,   nil,
   nil,   nil,   304,   nil,   nil,   304,   304,   304,   nil,   nil,
   nil,   304,   nil,   304,   nil,   nil,   304,   304,   nil,   nil,
   304,   nil,   304,   nil,   nil,   nil,   304,   304,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,   nil,     3,
   nil,     3,   nil,     3,     3,   nil,     3,     3,   nil,   nil,
     3,   nil,   nil,     3,     3,     3,   nil,   nil,   nil,     3,
   nil,     3,   nil,   nil,   nil,     3,   nil,   nil,     3,   nil,
     3,   nil,   nil,   nil,     3,     3,   196,   196,   196,   196,
   196,   196,   196,   196,   196,   nil,   nil,   196,   nil,   196,
   nil,   nil,   nil,   nil,   196,   nil,   nil,   nil,   196,   nil,
   nil,   196,   196,   196,   nil,   nil,   nil,   196,   nil,   196,
   nil,   nil,   nil,   196,   nil,   nil,   196,   196,   196,   nil,
   nil,   nil,   196,   196,   303,   303,   303,   303,   303,   303,
   303,   303,   303,   nil,   nil,   303,   nil,   303,   nil,   nil,
   nil,   nil,   303,   nil,   nil,   nil,   303,   nil,   nil,   303,
   303,   303,   303,   303,   nil,   303,   nil,   303,   nil,   nil,
   nil,   303,   nil,   nil,   303,   nil,   303,   nil,   nil,   nil,
   303,   303,   299,   299,   299,   299,   299,   299,   299,   299,
   299,   nil,   nil,   299,   nil,   299,   nil,   nil,   nil,   nil,
   299,   nil,   nil,   nil,   299,   nil,   nil,   299,   299,   299,
   nil,   nil,   nil,   299,   nil,   299,   nil,   nil,   nil,   299,
   nil,   nil,   299,   nil,   299,   nil,   nil,   nil,   299,   299,
   227,   227,   227,   227,   227,   227,   227,   227,   227,   nil,
   nil,   227,   nil,   227,   nil,   nil,   nil,   nil,   227,   nil,
   nil,   nil,   227,   nil,   nil,   227,   227,   227,   227,   227,
   nil,   227,   nil,   227,   nil,   nil,   nil,   227,   nil,   nil,
   227,   nil,   227,   nil,   nil,   nil,   227,   227,   297,   297,
   297,   297,   297,   297,   297,   297,   297,   nil,   nil,   297,
   nil,   297,   nil,   nil,   nil,   nil,   297,   nil,   nil,   nil,
   297,   nil,   nil,   297,   297,   297,   nil,   nil,   nil,   297,
   nil,   297,   nil,   nil,   nil,   297,   nil,   nil,   297,   nil,
   297,   nil,   nil,   nil,   297,   297,   185,   185,   185,   185,
   185,    76,    76,    76,    76,    76,   179,   179,   179,   179,
   179 ]

racc_action_pointer = [
   303,   nil,   649,   793,   645,   nil,   644,   nil,   nil,   nil,
   nil,    21,    43,    51,   nil,   nil,   nil,   nil,   511,   nil,
   141,   nil,   164,   121,   162,   nil,   nil,   nil,   nil,   nil,
   414,   146,   631,   177,   nil,   nil,   576,   nil,   nil,   622,
   238,   617,   nil,   218,   nil,   nil,   301,   nil,   247,   nil,
   nil,   330,   nil,   587,   233,   505,   295,   nil,   nil,   nil,
   328,   496,   337,   nil,   nil,   nil,   nil,   366,   371,   506,
    33,   nil,   nil,   nil,   478,   nil,  1022,   293,   nil,   nil,
   414,   454,   395,    48,   394,   409,   nil,   nil,   527,   431,
   285,   488,   223,   372,   458,   402,    20,   352,   nil,   323,
   449,   nil,   183,   -37,   136,   nil,   411,   nil,   114,    10,
   536,   nil,   459,   440,   nil,   nil,   488,   523,   nil,   308,
   nil,   112,   156,   249,   nil,   258,    18,   nil,   nil,   582,
   170,   165,   136,   131,   126,    97,    92,    87,   nil,   250,
   645,     5,     1,    -3,   333,     9,    13,   578,   175,   613,
   208,   531,   212,   326,   346,   436,   357,   242,   266,   260,
    49,   nil,   nil,   525,   248,   261,   467,   nil,   601,   537,
   290,   425,    16,   649,   nil,   394,   438,   360,   119,  1027,
   486,   508,   513,   520,   522,  1017,    47,     6,   501,   -25,
   -23,   -17,   -13,   326,   nil,     8,   841,    15,    65,   382,
   nil,    20,   nil,    78,   106,   370,   367,   404,   131,    -5,
    24,   nil,   256,   266,   320,    86,   328,    51,   128,   480,
   337,   nil,   nil,   nil,    43,   459,   422,   985,   426,   nil,
   532,   nil,   nil,   nil,   447,   498,   493,    40,   nil,   nil,
    92,   380,   420,    35,   429,   nil,   437,   nil,   nil,   442,
   nil,   nil,   445,   508,   516,   nil,   nil,   521,   nil,   467,
   171,   nil,   146,   504,   375,   335,   483,   nil,   nil,    56,
   567,   573,   279,   602,   nil,   252,   611,   613,   558,   213,
   620,   nil,   624,   nil,   218,   nil,   nil,   632,   697,   141,
   213,   579,   nil,   nil,   nil,   nil,   nil,  1033,   640,   937,
   nil,   643,   nil,   889,   745,   nil,   254,   nil,   nil ]

racc_action_default = [
    -3,  -173,  -176,    -1,    -4,  -174,  -176,   -52,   -33,   -22,
   -10,  -176,  -176,  -176,   -34,   -23,   -11,  -125,  -176,   -54,
  -120,   -12,  -176,  -176,  -176,   -36,   -25,   -13,   -26,   -14,
  -127,  -176,  -176,  -176,   -27,   -15,  -176,   -28,   -16,  -176,
  -176,  -176,   -48,  -176,   -29,   -17,  -176,   -49,   -37,   -30,
   -18,  -176,    -7,  -176,  -176,   -70,  -176,   -31,   -20,    -8,
  -176,   -70,  -176,   -32,   -21,  -175,   309,  -176,  -176,  -161,
  -176,  -138,  -143,  -136,  -145,  -135,  -152,  -127,  -162,  -137,
  -168,  -176,  -176,  -176,  -176,   -85,  -172,   -53,  -176,  -176,
  -176,  -176,  -176,   -43,    -2,   -39,  -176,   -56,  -128,  -176,
  -132,  -116,  -176,  -127,  -176,   -35,  -176,  -115,   -77,  -176,
  -171,   -47,    -5,   -38,   -97,   -92,   -94,  -176,   -19,    -9,
  -126,   -83,  -176,  -176,   -50,  -176,  -176,   -51,  -163,  -146,
  -176,  -176,  -176,  -176,  -176,  -176,  -176,  -176,  -139,  -127,
  -176,  -176,  -176,  -176,  -176,  -176,  -132,  -176,  -176,   -83,
  -176,  -119,  -122,  -117,  -118,   -40,  -176,  -176,  -176,  -176,
  -112,   -58,  -129,  -133,  -176,  -176,   -61,   -55,  -176,  -132,
  -176,  -176,  -176,  -176,   -71,  -176,   -83,  -176,  -159,  -154,
  -160,  -155,  -156,  -157,  -158,  -153,  -176,  -141,  -147,  -148,
  -149,  -150,  -151,  -176,  -144,  -170,  -176,  -169,  -176,  -176,
   -44,   -42,   -45,   -41,    -6,  -176,  -176,  -176,  -121,  -176,
  -176,   -68,  -176,  -176,  -176,  -176,  -176,  -176,  -176,   -95,
  -176,   -93,  -100,   -98,  -176,  -176,   -72,  -108,   -72,  -140,
  -176,  -131,  -101,  -123,  -176,  -176,  -176,  -176,  -111,   -57,
  -176,  -134,  -176,  -176,   -64,   -60,   -80,   -86,   -88,   -81,
   -91,   -89,  -176,   -79,   -78,   -66,   -96,   -84,   -99,   -75,
  -176,   -73,  -176,  -176,  -176,  -176,  -176,  -124,   -46,  -176,
   -83,   -59,  -103,   -62,   -63,  -176,  -176,  -176,  -176,  -176,
  -176,   -67,   -83,  -107,  -176,   -69,  -142,   -83,  -114,  -176,
  -176,  -176,   -87,   -90,   -82,   -76,   -74,  -109,   -83,  -113,
  -104,   -83,   -65,  -108,  -176,  -110,  -105,  -102,  -106 ]

racc_goto_table = [
    20,    52,     4,   118,    83,   115,    86,   129,   173,   164,
   109,   263,   251,   247,    85,   123,   111,    92,   128,   274,
   114,   126,   120,   243,    95,    96,    97,   179,   102,   124,
   105,   161,   260,   185,   265,   127,   196,   210,   206,    87,
   201,    40,   108,   168,   296,   110,   217,   246,   112,   249,
   113,   157,    16,   125,    10,   193,   121,   119,   110,   223,
    59,   290,   307,   227,   110,    46,   205,   138,    94,     3,
     2,   nil,   nil,   nil,   147,   nil,   293,   292,   218,   167,
   188,   189,   190,   191,   192,   149,   171,   305,   nil,   158,
   151,   nil,   153,   154,   155,   nil,   nil,   nil,   160,   195,
   nil,   197,   163,   nil,   nil,   nil,   166,   nil,   110,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   221,   176,   nil,   nil,
   202,   nil,   178,   nil,   180,   181,   182,   183,   184,   nil,
   nil,   114,   nil,   nil,   nil,   nil,   nil,   nil,   163,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   288,   nil,   110,
   203,   204,   nil,   nil,   nil,    20,   215,   209,   118,   297,
    20,   163,   219,   nil,   299,   nil,   nil,   nil,   nil,   244,
   nil,   nil,   250,   252,   nil,   303,   nil,   nil,   304,   nil,
   nil,   nil,   nil,    20,   nil,   259,   nil,   259,   nil,   nil,
   nil,   234,   nil,   nil,   nil,   nil,   nil,   nil,   268,   241,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   253,   258,   254,
   nil,   nil,   nil,   nil,    20,   nil,   257,   nil,   nil,   nil,
   nil,   nil,   266,   nil,   nil,   nil,   nil,   110,   269,   270,
   nil,   nil,   271,   nil,   272,   273,   250,   nil,   291,   259,
   nil,   nil,   295,   nil,   nil,   nil,   nil,   284,   nil,   nil,
   nil,   nil,   300,   nil,   282,   nil,   nil,   nil,   nil,   nil,
   nil,   287,   nil,   nil,   nil,   nil,   nil,   110,   nil,   nil,
   nil,   110,   nil,   nil,   nil,    20,   298,   nil,   nil,   nil,
   nil,   110,   301,   nil,    20,   nil,    20,   nil,   nil,   nil,
    20,    20,   nil,   308 ]

racc_goto_check = [
    22,     6,     4,    17,    61,    58,    61,    68,    55,    46,
    44,    64,    57,    56,    33,    47,    37,    34,    71,    45,
    44,    47,    44,    43,     4,    33,     4,    69,    22,    37,
    22,    41,    48,    69,    48,    37,    55,    42,    40,    39,
    36,    49,     4,    50,    51,    33,    52,    53,     4,    54,
    33,    35,    10,    61,     9,    46,     4,     8,    33,    60,
     7,    62,    63,    55,    33,     5,    65,    22,     3,     2,
     1,   nil,   nil,   nil,    61,   nil,    57,    56,    46,    37,
    68,    68,    68,    68,    68,     4,    44,    64,   nil,    34,
    33,   nil,    33,    33,     4,   nil,   nil,   nil,     4,    71,
   nil,    71,    33,   nil,   nil,   nil,     4,   nil,    33,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,    58,     4,   nil,   nil,
    37,   nil,    33,   nil,    33,    33,    33,    33,    33,   nil,
   nil,    44,   nil,   nil,   nil,   nil,   nil,   nil,    33,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,    55,   nil,    33,
     4,     4,   nil,   nil,   nil,    22,     6,    33,    17,    55,
    22,    33,    33,   nil,    55,   nil,   nil,   nil,   nil,    44,
   nil,   nil,    44,    44,   nil,    55,   nil,   nil,    55,   nil,
   nil,   nil,   nil,    22,   nil,    44,   nil,    44,   nil,   nil,
   nil,    33,   nil,   nil,   nil,   nil,   nil,   nil,    37,    33,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,     4,    61,     4,
   nil,   nil,   nil,   nil,    22,   nil,     4,   nil,   nil,   nil,
   nil,   nil,    33,   nil,   nil,   nil,   nil,    33,    33,     4,
   nil,   nil,     4,   nil,    33,     4,    44,   nil,    37,    44,
   nil,   nil,    37,   nil,   nil,   nil,   nil,    61,   nil,   nil,
   nil,   nil,    37,   nil,     4,   nil,   nil,   nil,   nil,   nil,
   nil,     4,   nil,   nil,   nil,   nil,   nil,    33,   nil,   nil,
   nil,    33,   nil,   nil,   nil,    22,     4,   nil,   nil,   nil,
   nil,    33,     4,   nil,    22,   nil,    22,   nil,   nil,   nil,
    22,    22,   nil,    22 ]

racc_goto_pointer = [
   nil,    70,    69,    46,     2,    62,    -2,    57,     6,    51,
    49,   nil,   nil,   nil,   nil,   nil,   nil,   -48,   nil,   nil,
   nil,   nil,    -3,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,     2,    -5,   -42,  -117,   -27,   nil,    26,
  -123,   -66,  -129,  -187,   -31,  -225,   -91,   -40,  -194,    38,
   -65,  -236,  -122,  -165,  -164,  -113,  -199,  -201,   -46,   nil,
  -114,    -7,  -211,  -242,  -216,   -94,   nil,   nil,   -61,  -104,
   nil,   -49,   nil,   nil ]

racc_goto_default = [
   nil,   nil,   nil,   nil,   nil,   nil,   224,   nil,   nil,   nil,
   nil,    21,    27,    29,    35,    38,    45,    50,    58,    64,
     9,    15,    71,    26,    28,    34,    37,    44,    49,    57,
    63,     8,    14,    69,   nil,   nil,   nil,   nil,    43,   nil,
   nil,   nil,   nil,   nil,    17,   nil,   nil,   nil,   nil,   nil,
   nil,   261,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   116,
   nil,   nil,   nil,   nil,   nil,   nil,    18,    72,    74,    76,
    78,    80,    82,    84 ]

racc_token_table = {
 false => 0,
 Object.new => 1,
 :LINE => 2,
 :NUMBER => 3,
 :STRING => 4,
 :ID => 5,
 :CONSTANT => 6,
 :INCLUDEFILE => 7,
 :XINCLUDEFILE => 8,
 :COMPILERSELECT => 9,
 :COMPILERCASE => 10,
 :COMPILERENDSELECT => 11,
 :COMPILERIF => 12,
 :COMPILERENDIF => 13,
 :ENUMERATION => 14,
 :ENDENUMERATION => 15,
 :STRUCTURE => 16,
 :ENDSTRUCTURE => 17,
 :DIM => 18,
 :NEWLIST => 19,
 :DECLARE => 20,
 :PROCEDURE => 21,
 :ENDPROCEDURE => 22,
 :PROCEDURERETURN => 23,
 :DATASECTION => 24,
 :ENDDATASECTION => 25,
 :DATA => 26,
 :READ => 27,
 :SHARED => 28,
 :STATIC => 29,
 :GLOBAL => 30,
 :PROTECTED => 31,
 :IF => 32,
 :ELSE => 33,
 :ELSEIF => 34,
 :ENDIF => 35,
 :BREAK => 36,
 :CONTINUE => 37,
 :FOR => 38,
 :TO => 39,
 :STEP => 40,
 :NEXT => 41,
 :REPEAT => 42,
 :UNTIL => 43,
 :FOREVER => 44,
 :WHILE => 45,
 :WEND => 46,
 :SELECT => 47,
 :CASE => 48,
 :DEFAULT => 49,
 :ENDSELECT => 50,
 :GOTO => 51,
 :END => 52,
 :AND => 53,
 :OR => 54,
 :NOT => 55,
 :BACKSLASH => 56,
 "." => 57,
 "," => 58,
 "=" => 59,
 "[" => 60,
 "]" => 61,
 "(" => 62,
 ")" => 63,
 ":" => 64,
 "+" => 65,
 "-" => 66,
 "$" => 67,
 "@" => 68,
 "*" => 69,
 "/" => 70,
 "&" => 71,
 "|" => 72,
 "!" => 73,
 "<>" => 74,
 ">" => 75,
 "<" => 76,
 ">=" => 77,
 "<=" => 78 }

racc_use_result_var = true

racc_nt_base = 79

Racc_arg = [
 racc_action_table,
 racc_action_check,
 racc_action_default,
 racc_action_pointer,
 racc_goto_table,
 racc_goto_check,
 racc_goto_default,
 racc_goto_pointer,
 racc_nt_base,
 racc_reduce_table,
 racc_token_table,
 racc_shift_n,
 racc_reduce_n,
 racc_use_result_var ]

Racc_token_to_s_table = [
'$end',
'error',
'LINE',
'NUMBER',
'STRING',
'ID',
'CONSTANT',
'INCLUDEFILE',
'XINCLUDEFILE',
'COMPILERSELECT',
'COMPILERCASE',
'COMPILERENDSELECT',
'COMPILERIF',
'COMPILERENDIF',
'ENUMERATION',
'ENDENUMERATION',
'STRUCTURE',
'ENDSTRUCTURE',
'DIM',
'NEWLIST',
'DECLARE',
'PROCEDURE',
'ENDPROCEDURE',
'PROCEDURERETURN',
'DATASECTION',
'ENDDATASECTION',
'DATA',
'READ',
'SHARED',
'STATIC',
'GLOBAL',
'PROTECTED',
'IF',
'ELSE',
'ELSEIF',
'ENDIF',
'BREAK',
'CONTINUE',
'FOR',
'TO',
'STEP',
'NEXT',
'REPEAT',
'UNTIL',
'FOREVER',
'WHILE',
'WEND',
'SELECT',
'CASE',
'DEFAULT',
'ENDSELECT',
'GOTO',
'END',
'AND',
'OR',
'NOT',
'BACKSLASH',
'"."',
'","',
'"="',
'"["',
'"]"',
'"("',
'")"',
'":"',
'"+"',
'"-"',
'"$"',
'"@"',
'"*"',
'"/"',
'"&"',
'"|"',
'"!"',
'"<>"',
'">"',
'"<"',
'">="',
'"<="',
'$start',
'all',
'program',
'datadecls',
'endline',
'stmt_or_decl',
'statement',
'enumeration',
'globallist',
'declareproc',
'procedure',
'include_stmt',
'compilerselect',
'compilercase',
'compilerendselect',
'compilerif',
'compilerendif',
'dimensioning',
'constant_def',
'structure_def',
'procreturn',
'proccall',
'varref',
'assignment',
'increment',
'decrement',
'if',
'repeat',
'while',
'for',
'selection',
'goto',
'label',
'expr',
'datadecl',
'datadecltype',
'datalist',
'constant_expr',
'includefile',
'constant_condition',
'enumerated_constants',
'@1',
'structure_fields',
'fieldspec',
'typed_id',
'fielddim',
'exprlist',
'proctype',
'procparams',
'procedure_header',
'procbody',
'procparam',
'procdecl',
'sharelist',
'staticlist',
'statements',
'sharedvar',
'staticvar',
'globaldecl',
'globalvar',
'repeatcond',
'condition',
'step',
'next',
'elsepart',
'cases',
'lvalue',
'call_or_array_or_list',
'factor',
'term',
'comp',
'cond',
'disjunct',
'conjunct']

Racc_debug_parser = false

##### racc system variables end #####

 # reduce 0 omitted

 # reduce 1 omitted

 # reduce 2 omitted

 # reduce 3 omitted

 # reduce 4 omitted

 # reduce 5 omitted

 # reduce 6 omitted

module_eval <<'.,.,', 'elice.y', 46
  def _reduce_7( val, _values, result )
 @program.add_statement(val[0]) if val[0]
   result
  end
.,.,

 # reduce 8 omitted

 # reduce 9 omitted

 # reduce 10 omitted

 # reduce 11 omitted

module_eval <<'.,.,', 'elice.y', 52
  def _reduce_12( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 53
  def _reduce_13( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 54
  def _reduce_14( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 55
  def _reduce_15( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 56
  def _reduce_16( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 57
  def _reduce_17( val, _values, result )
 return nil
   result
  end
.,.,

 # reduce 18 omitted

module_eval <<'.,.,', 'elice.y', 59
  def _reduce_19( val, _values, result )
 return val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 60
  def _reduce_20( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 61
  def _reduce_21( val, _values, result )
 return nil
   result
  end
.,.,

 # reduce 22 omitted

 # reduce 23 omitted

module_eval <<'.,.,', 'elice.y', 64
  def _reduce_24( val, _values, result )
 return nil
   result
  end
.,.,

 # reduce 25 omitted

 # reduce 26 omitted

 # reduce 27 omitted

 # reduce 28 omitted

 # reduce 29 omitted

 # reduce 30 omitted

 # reduce 31 omitted

 # reduce 32 omitted

 # reduce 33 omitted

 # reduce 34 omitted

module_eval <<'.,.,', 'elice.y', 75
  def _reduce_35( val, _values, result )
 return [:read, val[1]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 76
  def _reduce_36( val, _values, result )
 return [:break]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 77
  def _reduce_37( val, _values, result )
 return [:end, 0]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 78
  def _reduce_38( val, _values, result )
 return [:end, val[1].coerce_int]
   result
  end
.,.,

 # reduce 39 omitted

 # reduce 40 omitted

 # reduce 41 omitted

module_eval <<'.,.,', 'elice.y', 95
  def _reduce_42( val, _values, result )
 if integer_type? val[1]
        val[2].map! { |v| v.coerce_int }
      elif val[1] == :f
        val[2].map! { |v| v.coerce_float }
      elif val[1] == :s
        if val[2].any { |v| v.expr_type != :s }
          raise ProgramError, "string value expected"
        end
      end
      val[2].each { |v| @program.declare_data(val[1], v) }
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 97
  def _reduce_43( val, _values, result )
 return :l
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 103
  def _reduce_44( val, _values, result )
 unless integer_type?(val[1]) || val[1] == :s || val[1] == :f
        raise ParseError, "Data must be of primitive types (#{val[1]})" 
      end
      return val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 105
  def _reduce_45( val, _values, result )
 return [val[0]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 106
  def _reduce_46( val, _values, result )
 return val[0] << val[2]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 116
  def _reduce_47( val, _values, result )
    fname = val[1]
    if !fname.is_a? String
      raise ParseError, "IncludeFile filename must be constant string"
    end
    return if val[0] == :XINCLUDEFILE && @included_files.include?(fname)
    include_file(fname)
   result
  end
.,.,

 # reduce 48 omitted

 # reduce 49 omitted

module_eval <<'.,.,', 'elice.y', 123
  def _reduce_50( val, _values, result )
 raise ParseError, "Cannot nest CompilerSelect" if @compilerselect
      @compilerselect = val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 128
  def _reduce_51( val, _values, result )
 raise ParseError, "CompilerCase outside CompilerSelect" if @compilerselect.nil?
      @skiptokens = val[1] != @compilerselect
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 133
  def _reduce_52( val, _values, result )
 raise ParseError, "CompilerEndSelect without CompilerSelect" if @compilerselect.nil?
      @skiptokens = false; @compilerselect = nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 137
  def _reduce_53( val, _values, result )
 raise ParseError, "Cannot nest CompilerIf" if @skiptokens
      @skiptokens = val[1] == 0
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 139
  def _reduce_54( val, _values, result )
 @skiptokens = false;
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 144
  def _reduce_55( val, _values, result )
    @program.define_constant(val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 145
  def _reduce_56( val, _values, result )
 @enumstate =  0
   result
  end
.,.,

 # reduce 57 omitted

 # reduce 58 omitted

module_eval <<'.,.,', 'elice.y', 151
  def _reduce_59( val, _values, result )
 @program.define_constant(val[1], @enumstate)
                             @enumstate += 1
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 154
  def _reduce_60( val, _values, result )
 @program.define_structure(val[1], val[3])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 156
  def _reduce_61( val, _values, result )
 return []
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 157
  def _reduce_62( val, _values, result )
 val[0] << val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 160
  def _reduce_63( val, _values, result )
 return FieldSpec.new(val[0][0], val[0][1], val[1])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 162
  def _reduce_64( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 172
  def _reduce_65( val, _values, result )
 sz = val[1]
                 if !sz.is_a? Integer
                   raise ParseError, "Field size must be constant integer"
                 end
                 if sz <= 0
                   raise ParseError, "Field arrays must have positive size"
                 end
                 return sz
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 184
  def _reduce_66( val, _values, result )
 name, type = val[1]
         sizes = val[3]
         if sizes.empty?
           raise "Array must have at least one dimension"
         end
         # Dim a(10) creates an array with 11 elements; adjust it here.
         sizes.map! { |sz| BinaryOp.new(:"+", sz, 1).simplify.coerce_int }
         @program.declare_array(name, type, sizes.size)
         return ([:dim, name] + sizes)
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 187
  def _reduce_67( val, _values, result )
 @program.declare_procedure(val[2], val[1], val[4])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 193
  def _reduce_68( val, _values, result )
 @program.add_procedure(val[0], @scope)
                 @scope = @program
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 202
  def _reduce_69( val, _values, result )
 rtype = val[1]
                 name = val[2]
                 params = val[4]
                 @program.declare_procedure(name, rtype, params)
                 @scope = Procedure.new(@program, name, rtype, params)
                 return name
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 204
  def _reduce_70( val, _values, result )
 return :l
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 206
  def _reduce_71( val, _values, result )
 return val[1] if simple_type? val[1]
                     raise ParseError, "Procedures must return simple types"
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 208
  def _reduce_72( val, _values, result )
 return []
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 209
  def _reduce_73( val, _values, result )
 return [val[0]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 210
  def _reduce_74( val, _values, result )
 val[0] << val[2]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 212
  def _reduce_75( val, _values, result )
 return val[0]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 213
  def _reduce_76( val, _values, result )
 return val[0] << val[2]
   result
  end
.,.,

 # reduce 77 omitted

 # reduce 78 omitted

module_eval <<'.,.,', 'elice.y', 217
  def _reduce_79( val, _values, result )
 @scope.add_statement(val[1]) if val[1]
   result
  end
.,.,

 # reduce 80 omitted

 # reduce 81 omitted

module_eval <<'.,.,', 'elice.y', 223
  def _reduce_82( val, _values, result )
 name, type = val[1]
                @scope.declare_list(name, type)
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 225
  def _reduce_83( val, _values, result )
 return []
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 226
  def _reduce_84( val, _values, result )
 val[0] << val[1] if val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 228
  def _reduce_85( val, _values, result )
 return [:return, val[1].simplify]
   result
  end
.,.,

 # reduce 86 omitted

 # reduce 87 omitted

module_eval <<'.,.,', 'elice.y', 236
  def _reduce_88( val, _values, result )
 name = val[0]
                  var = @program.declare_shared(name)
                  @scope.import_var(var)
   result
  end
.,.,

 # reduce 89 omitted

 # reduce 90 omitted

module_eval <<'.,.,', 'elice.y', 242
  def _reduce_91( val, _values, result )
 name, type = val[0]
                        @scope.declare_static(name, type)
   result
  end
.,.,

 # reduce 92 omitted

 # reduce 93 omitted

 # reduce 94 omitted

module_eval <<'.,.,', 'elice.y', 250
  def _reduce_95( val, _values, result )
 @program.add_statement([:"=", val[0], val[2]])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 253
  def _reduce_96( val, _values, result )
 name, type = val[1]
                  @program.declare_global_list(name, type)
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 256
  def _reduce_97( val, _values, result )
 name, type = val[0]
                        return @program.declare_global(name, type)
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 259
  def _reduce_98( val, _values, result )
 return [:repeat, val[3].simplify] + val[2]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 261
  def _reduce_99( val, _values, result )
 return val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 262
  def _reduce_100( val, _values, result )
 return 0
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 265
  def _reduce_101( val, _values, result )
 return [:while, val[1].simplify] + val[3]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 280
  def _reduce_102( val, _values, result )
 if val[9] && val[1] != val[9]
        raise ParseError, "NEXT has different variable than matching FOR"
      end
      if ! integer_type?(val[1].expr_type)
        raise ParseError, "FOR variable must have integer type"
      end
      if ! integer_type?(val[6].expr_type)
        raise ParseError, "FOR STEP value must have integer type"
      end
      from = val[3].coerce_int.simplify
      to = val[5].coerce_int.simplify
      return [:for, val[1], from, to, val[6]] + val[8]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 282
  def _reduce_103( val, _values, result )
 return 1
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 283
  def _reduce_104( val, _values, result )
 return val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 285
  def _reduce_105( val, _values, result )
 return nil
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 286
  def _reduce_106( val, _values, result )
 return val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 292
  def _reduce_107( val, _values, result )
 return [:if, val[1].simplify, val[3], val[4]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 297
  def _reduce_108( val, _values, result )
 return []
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 298
  def _reduce_109( val, _values, result )
 return val[2]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 300
  def _reduce_110( val, _values, result )
 return [[:if, val[1].simplify, val[3], val[4]]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 303
  def _reduce_111( val, _values, result )
 return [:select, val[1].simplify] + val[3]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 305
  def _reduce_112( val, _values, result )
 return []
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 307
  def _reduce_113( val, _values, result )
 val[0] << ([:case, val[2].simplify] + val[4])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 309
  def _reduce_114( val, _values, result )
 val[0] << ([:default] + val[3])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 311
  def _reduce_115( val, _values, result )
 return [:goto, val[1]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 315
  def _reduce_116( val, _values, result )
 @program.declare_label(val[0], @scope)
      return [:label, val[0]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 337
  def _reduce_117( val, _values, result )
 lvalue = val[0]
      expr = val[2]
      ltype = lvalue.expr_type
      etype = expr.expr_type
      unless simple_type? ltype
        raise ParseError, "assignment must be to simple type"
      end
      case ltype
      when :s
        if etype != :s
          raise ProgramError, "type mismatch between string and non-string"
        end
      when :f
        expr = expr.coerce_float
      else
        # simple type, not string or float -- must be int or pointer
        expr = expr.coerce_int
      end
      return [:"=", lvalue, expr.simplify]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 359
  def _reduce_118( val, _values, result )
 lvalue = val[0]
      expr = val[2]
      ltype = lvalue.expr_type
      etype = expr.expr_type
      unless simple_type? ltype
        raise ParseError, "increment must be of simple type"
      end
      case ltype
      when :s
        if etype != :s
          raise ProgramError, "type mismatch between string and non-string"
        end
      when :f
        expr = expr.coerce_float
      else
        # simple type, not string or float -- must be int or pointer
        expr = expr.coerce_int
      end
      return [:"+", lvalue, expr.simplify]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 373
  def _reduce_119( val, _values, result )
 lvalue = val[0]
      expr = val[2]
      ltype = lvalue.expr_type
      if integer_type?(ltype) || ltype == :"*"
        expr = expr.coerce_int
      elsif ltype == :f
        expr = expr.coerce_float
      else
        raise ParseError, "decrement must be of numeric type"
      end
      return [:"-", lvalue, expr.simplify]
   result
  end
.,.,

 # reduce 120 omitted

module_eval <<'.,.,', 'elice.y', 378
  def _reduce_121( val, _values, result )
  return ListCurrent.new(@scope, val[0]) if val[2].empty?
               return ArrayIndex.new(@scope, val[0], *val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 380
  def _reduce_122( val, _values, result )
 return FieldRef.new(@scope, val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 382
  def _reduce_123( val, _values, result )
 return FieldRef.new(@scope, val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 384
  def _reduce_124( val, _values, result )
 return FieldRef.new(@scope, val[0], val[2], val[4])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 389
  def _reduce_125( val, _values, result )
 vname, vtype = val[0]
      return @scope.ref_var(vname, vtype)
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 394
  def _reduce_126( val, _values, result )
 vname, vtype = val[1]
      @scope.protect_var(vname, vtype)
      return @scope.ref_var(vname, vtype)
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 396
  def _reduce_127( val, _values, result )
 return [val[0], nil]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 397
  def _reduce_128( val, _values, result )
 return ["#{val[0]}$".to_sym, :s]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 402
  def _reduce_129( val, _values, result )
 if @program.type_defined? val[2]
                          return [val[0], val[2]]
                        else
                          raise ParseError, "Unknown type #{val[2]}"
                        end
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 405
  def _reduce_130( val, _values, result )
 return [:call, ProcedureCall.new(@scope, val[0], *val[2])]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 424
  def _reduce_131( val, _values, result )
 name = val[0]
      args = val[2]

      if args.size == 0 && @scope.list_declared?(name)
        return ListCurrent.new(@scope, name)
      end

      return ArrayIndex.new(@scope, name, *args) if @program.array_declared?(name)

      pc = ProcedureCall.new(@scope, name, *args)
      if pc.expr_type.nil?
        raise ProgramError, "Procedure #{name} has no return value"
      end
      return pc
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 426
  def _reduce_132( val, _values, result )
 return []
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 427
  def _reduce_133( val, _values, result )
 return [val[0]]
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 428
  def _reduce_134( val, _values, result )
 val[0] << val[2]
   result
  end
.,.,

 # reduce 135 omitted

 # reduce 136 omitted

module_eval <<'.,.,', 'elice.y', 432
  def _reduce_137( val, _values, result )
 return @program.lookup_constant(val[0])
   result
  end
.,.,

 # reduce 138 omitted

module_eval <<'.,.,', 'elice.y', 434
  def _reduce_139( val, _values, result )
 return VarAddress.new(val[1])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 435
  def _reduce_140( val, _values, result )
 return ListAddress.new(@scope, val[1])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 437
  def _reduce_141( val, _values, result )
 return FieldRef.new(@scope, val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 439
  def _reduce_142( val, _values, result )
 return FieldRef.new(@scope, val[0], val[2], val[4])
   result
  end
.,.,

 # reduce 143 omitted

module_eval <<'.,.,', 'elice.y', 441
  def _reduce_144( val, _values, result )
 return val[1]
   result
  end
.,.,

 # reduce 145 omitted

module_eval <<'.,.,', 'elice.y', 447
  def _reduce_146( val, _values, result )
 return BinaryOp.new(:"-", 0, val[1])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 448
  def _reduce_147( val, _values, result )
 return BinaryOp.new(:"*", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 449
  def _reduce_148( val, _values, result )
 return BinaryOp.new(:"/", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 450
  def _reduce_149( val, _values, result )
 return BinaryOp.new(:"&", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 451
  def _reduce_150( val, _values, result )
 return BinaryOp.new(:"|", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 452
  def _reduce_151( val, _values, result )
 return BinaryOp.new(:"!", val[0], val[2])
   result
  end
.,.,

 # reduce 152 omitted

module_eval <<'.,.,', 'elice.y', 455
  def _reduce_153( val, _values, result )
 return BinaryOp.new(:"+", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 456
  def _reduce_154( val, _values, result )
 return BinaryOp.new(:"-", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 458
  def _reduce_155( val, _values, result )
 return BinaryOp.new(:"=", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 459
  def _reduce_156( val, _values, result )
 return BinaryOp.new(:"<>", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 460
  def _reduce_157( val, _values, result )
 return BinaryOp.new(:">", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 461
  def _reduce_158( val, _values, result )
 return BinaryOp.new(:"<", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 462
  def _reduce_159( val, _values, result )
 return BinaryOp.new(:">=", val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 463
  def _reduce_160( val, _values, result )
 return BinaryOp.new(:"<=", val[0], val[2])
   result
  end
.,.,

 # reduce 161 omitted

 # reduce 162 omitted

module_eval <<'.,.,', 'elice.y', 467
  def _reduce_163( val, _values, result )
 return NotCondition.new(val[1])
   result
  end
.,.,

 # reduce 164 omitted

module_eval <<'.,.,', 'elice.y', 470
  def _reduce_165( val, _values, result )
 return BinaryOp.new(:or, val[0], val[2])
   result
  end
.,.,

 # reduce 166 omitted

module_eval <<'.,.,', 'elice.y', 473
  def _reduce_167( val, _values, result )
 return BinaryOp.new(:and, val[0], val[2])
   result
  end
.,.,

 # reduce 168 omitted

module_eval <<'.,.,', 'elice.y', 479
  def _reduce_169( val, _values, result )
 return BinaryOp.new(:and, val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 480
  def _reduce_170( val, _values, result )
 return BinaryOp.new(:or, val[0], val[2])
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 483
  def _reduce_171( val, _values, result )
 return val[0].evaluate_constant
   result
  end
.,.,

module_eval <<'.,.,', 'elice.y', 486
  def _reduce_172( val, _values, result )
 return val[0].evaluate_constant
   result
  end
.,.,

 # reduce 173 omitted

 # reduce 174 omitted

 # reduce 175 omitted

 def _reduce_none( val, _values, result )
  result
 end

end   # class Parser

self.class.module_eval <<'..end elice.y modeval..idf9a246cd24', 'elice.y', 661

# generated statement types:
# array sizing, [:dim, arrayname, sizes...]
# assignment,   [:"=", lvalue, expr]
# procreturn,   [:return, expr]
# proc call,    [:call, expr (proc call)]
# repeat,   [:repeat, cond, statement...]
# while,    [:while, cond, statement...]
# for,      [:for, var, expr (start), expr (stop), expr (step), statement...]
# if,       [:if, cond, [statement...], [statement...]]
# select,   [:select, expr, [:case, expr, statement...]...]  (and :default)
# goto,     [:goto, label]
# label,    [:label, label]
# break,    [:break]
# read,     [:read, var]
# exit program, [:end, exitcode]

# Generated expression nodes:
# String, Integer, Float (immediates)
# BasicVar
# VarAddress
# LinkedList
# ListCurrent
# ListAddress
# FieldRef (structure fields)
# ArrayIndex
# ProcedureCall
# NotCondition
# BinaryOp (+ - * / = <> < > >= <= and or & | !)
# and Truncate can be inserted by the coerce_ functions.

def simple_type?(type)
  type == :l || type == :w || type == :b || type == :c || type == :s || type == :f || type == :"*"
end

def integer_type?(type)
  type == :l || type == :w || type == :b || type == :c
end

class Integer

  def expr_type
    :l
  end

  def coerce_int
    self
  end

  def coerce_float
    self.to_f
  end

  def coerce_linkedlist
    raise ProgramError, "expected linked list"
  end

  def evaluate_constant
    self
  end

  def constant?
    true
  end

  def simplify
    self
  end

end

class String

  def expr_type
    :s
  end

  def coerce_int
    raise ProgramError, "string in integer context"
  end

  def coerce_float
    raise ProgramError, "string in float context"
  end

  def coerce_linkedlist
    raise ProgramError, "expected linked list"
  end

  def evaluate_constant
    self
  end

  def constant?
    true
  end

  def simplify
    self
  end

end

class Float

  def expr_type
    :f
  end

  def coerce_int
    self.to_i
  end

  def coerce_float
    self
  end

  def coerce_linkedlist
    raise ProgramError, "expected linked list"
  end

  def evaluate_constant
    self
  end

  def constant?
    true
  end

  def simplify
    self
  end

end

# code-sharing class to set defaults for several methods of the expr-node
# interface.
class ExprNode
  # General note: calling "simplify" is done as a separate step when
  # constructing statements, rather than while creating expression nodes,
  # because some constant expressions actually evaluate differently
  # depending on whether they are assigned to a float or integer variable.
  # When the float-or-int context is known, for example in parameters of
  # procedure calls, simplify can be called early.

  def expr_type
    @type
  end

  def coerce_int
    type = self.expr_type
    return self if integer_type? type
    return Truncate.new(self) if @type == :f
    raise ProgramError, "expected integer value"
  end

  def coerce_float
    type = self.expr_type
    # promotion of int to float happens automatically in both ruby and C
    return self if type == :f || integer_type?(type)
    raise ProgramError, "expected numeric value"
  end

  def coerce_linkedlist
    raise ProgramError, "expected linked list"
  end

  def evaluate_constant
    raise ProgramError, "Expected constant expression"
  end

  def constant?
    false
  end

  def simplify
    self
  end

end

class BasicVar < ExprNode
  attr_reader :type, :name
  attr_accessor :alloc

  # Known alloc types:  :local, :param, :shared, :static, :global
  def initialize(name, type, alloc)
    type = :l if type.nil?
    alloc = :local if alloc.nil?
    @name = name
    @type = type
    @alloc = alloc
  end

  def has_type?(type)
    type.nil? || @type == type
  end

  def <=>(y)
    self.name.to_s <=> y.name.to_s
  end

end

class VarAddress < ExprNode

  def initialize(var)
    @var = var
  end

  def expr_type
    :"*"
  end

end

class LinkedList < ExprNode
  attr_reader :type, :name
  attr_accessor :alloc

  # Known alloc types:  :global, :local
  def initialize(name, type, alloc)
    type = :l if type.nil?
    alloc = :local if alloc.nil?
    @name = name
    @type = type
    @alloc = alloc
  end

  def <=>(y)
    self.name.to_s <=> y.name.to_s
  end

  def expr_type
    :"()"
  end

  def coerce_linkedlist
    self
  end

end

class ListCurrent < ExprNode

  def initialize(scope, name)
    list = scope.lookup_list(name)
    if list.nil?
      raise ProgramError, "unknown linked list #{name}"
    end
    @list = list
    @type = list.type
  end

  def coerce_linkedlist
    @list
  end

end

class ListAddress < ExprNode

  def initialize(scope, name)
    list = scope.lookup_list(name)
    if list.nil?
      raise ProgramError, "unknown linked list #{name}"
    end
    @list = list
    @type = list.type
  end

  def expr_type
    :"*"
  end

  def coerce_int
    self   # allow this until there is proper 64-bit pointer support
  end

end

# float-to-integer conversion node
class Truncate < ExprNode

  def initialize(expr)
    @expr = expr
  end

  def expr_type
    :l
  end

  def coerce_float
    # undo truncation?
    return @expr if @expr.expr_type == :f
    # otherwise rely on auto-promotion of int to float
    return self
  end

  def evaluate_constant
    @expr.evaluate_constant.to_i
  end

  def simplify
    @expr = @expr.simplify
    return @expr.to_i if @expr.constant?
    return self
  end

end

class FieldRef < ExprNode

  def initialize(scope, base, field, index = nil)
    @base = base
    @struct_name = base.expr_type
    if simple_type? @struct_name
      raise ProgramError, "field selection of non-structure type"
    end
    fields = scope.program.structure_fields(@struct_name)
    if fields.nil?
      raise ProgramError, "unknown structure type #{@struct_name}"
    end
    @field = fields.find { |f| f.name == field }
    if @field.nil?
      raise ProgramError, "type #{@struct_name} does not have field #{field}"
    end
    if @field.size.nil? && !index.nil?
      raise ProgramError, "indexing field #{field} that is not an array"
    elsif index.nil? && !@field.size.nil?
      # Amazingly, indexing a field seems to be optional. 
      # I'm going to guess that it defaults to index 0.
      index = 0
      emit_warning("defaulting #{@struct_name}.#{field} to #{field}[0]")
    end
    @index = index.coerce_int.simplify if index
  end

  def expr_type
    @field.type
  end

end

class ArrayIndex < ExprNode

  def initialize(scope, name, *indices)
    @name = name
    @type = scope.program.array_type(name)
    if @type.nil?
       raise ProgramError, "unknown array #{name}"
    end
    dim = scope.program.array_dimensions(name)
    if dim != indices.size
      raise ProgramError, "#{name} has #{dim} dimensions"
    end
    @indices = indices.map { |i| i.coerce_int.simplify }
  end

end

class ProcedureCall < ExprNode

  def initialize(scope, name, *args)
    @name = name
    pdata = scope.program.lookup_procedure(name)
    if pdata.nil?
      raise ProgramError, "unknown procedure #{name}"
    end
    @type, @params, @defaults = pdata
    reqparams = @params.size - @defaults.size
    if @defaults.size > 0
      if args.size > @params.size || args.size < reqparams
        raise ProgramError, "procedure #{name} expects #{reqparams} to #{@params.size} arguments"
      end
    else
      if args.size != @params.size
        raise ProgramError, "procedure #{name} expects #{@params.size} arguments"
      end
    end
    @args = []
    @params.each_index do |i|
      if i >= args.size
        arg = @defaults[i - reqparams]
      else
        arg = args[i]
      end

      ptype = @params[i]
      if integer_type? ptype
        # TODO: coerce to specific int sizes
        arg = arg.coerce_int
      elsif ptype == :f
        arg = arg.coerce_float
      elsif ptype == :"()"
        arg = arg.coerce_linkedlist
      elsif arg.expr_type != ptype
        raise ProgramError, "arg #{i+1} of #{name} should be .#{ptype}"
      end
      @args << arg.simplify
    end
  end

  def simplify
    return @args[0].coerce_int.simplify if @name == :int
    return self
  end

end

class NotCondition < ExprNode

  def initialize(expr)
    @expr = expr
    @type = :l
  end

  def evaluate_constant
    return (@expr.evaluate_constant == 0) ? 1 : 0
  end

  def simplify
    @expr = @expr.simplify
    return self.evaluate_constant if @expr.constant?
    return self
  end

end

# Known ops: 
#   + - * / = <> < > >= <= and or & | !
#
class BinaryOp < ExprNode

  def initialize(op, x, y)
    xtype = x.expr_type
    ytype = y.expr_type
    if !simple_type?(xtype)
      emit_warning("#{xtype} structure used in #{op} operation")
      x = 0
      xtype = x.expr_type
    end
    if !simple_type?(ytype)
      emit_warning("#{ytype} structure used in #{op} operation")
      y = 0
      ytype = y.expr_type
    end

    if (xtype == :s || ytype == :s) && xtype != ytype
      raise ProgramError, "type mismatch between string and non-string"
    end

    if xtype == :s && [:"-", :"*", :"/", :"&", :"|", :"!"].include?(op)
      raise ProgramError, "operation not valid on strings"
    end

    if xtype == :"*" && ytype == :"*" && !(op == :"=" || op == :"<>")
      raise ProgramError, "operation not valid between pointers"
    end

    if (xtype == :"*") != (ytype == :"*") && !(op == :"-" || op == :"+")
      raise ProgramError, "operation not valid on pointer type"
    end

    @x = x
    @y = y
    @type = xtype
    @op = op

    # If x is float, coerce y, but not automatically the other way around.
    # Apparently coercion should be left-to-right this way.
    # So 2/3 + 1.0 is 1.0
    # But if the + op itself is coerced, for example with
    #  v.f = 2/3 + 1.0
    # then v.f becomes 1.66666~
    if xtype == :f && integer_type?(ytype)
      @y = @y.coerce_float
    elsif ytype == :f && integer_type?(xtype)
      # rely on auto-promotion
      @type = :f
    end

    if xtype == :"*" && ytype != :"*"
      @y = @y.coerce_int
    elsif ytype == :"*" && xtype != :"*"
      @x = @x.coerce_int
      @type = :"*"
    end

    # Comparisons always give a boolean result
    if comparison_op?
      @type = :l
    end
  end

  def comparison_op?
    [:"=", :"<>", :">", :"<", :">=", :"<=", :and, :or].include? @op
  end

  def coerce_float
    if comparison_op?
      super
    else
      @x = @x.coerce_float
      @y = @y.coerce_float
      @type = :f
      return self
    end
  end

  def evaluate_constant
    x = @x.evaluate_constant
    y = @y.evaluate_constant

    case @op
    when :"+" then return x + y
    when :"-" then return x - y
    when :"*" then return x * y
    when :"/"
      raise ProgramError, "division by zero" if y == 0
      return x / y
    when :"=" then return (x == y) ? 1 : 0
    when :"<>" then return (x != y) ? 1 : 0
    when :">" then return (x > y) ? 1 : 0
    when :"<" then return (x < y) ? 1 : 0
    when :">=" then return (x >= y) ? 1 : 0
    when :"<=" then return (x <= y) ? 1 : 0
    when :and then return ((x != 0) && (y != 0)) ? 1 : 0
    when :or then return ((x != 0) || (y != 0)) ? 1 : 0
    when :"&" then return x & y
    when :"|" then return x | y
    when :"!" then return x ^ y
    else
      raise RuntimeError, "unknown op #{@op}"
    end
  end

  def simplify
    @x = @x.simplify
    @y = @y.simplify

    return evaluate_constant if @x.constant? && @y.constant?

    # Other simplifications
    return @y if @op == :"+" && @x == 0
    return @x if @op == :"+" && @y == 0
    return @x if @op == :"-" && @y == 0
    return @y if @op == :"*" && @x == 1
    return @x if @op == :"*" && @y == 1
    # Not sure if this is allowed, since it short-circuits
    return 0 if @op == :"*" && (@x == 0 || @y == 0)
    return 0 if @op == :"/" && @x == 0
    return @x if @op == :"/" && @y == 1

    return self
  end

end

class FieldSpec
  # If this field is an array field, size is the total number of elements.
  # Otherwise, size is nil.
  # Note that this is different from normal arrays. Fields of size n go
  # from field[0] to field[n-1], while arrays dimensioned as n go from
  # arr[0] to arr[n].
  attr_reader :name, :type, :size

  def initialize(name, type, size)
    type = :l if type.nil?
    @name = name
    @type = type
    @size = size
  end

  def simple?
    simple_type?(@type) && size.nil?
  end
end

class Scope

  def initialize
    @vars = {}
    @lists = {}
    @code = []
  end

  def protect_var(name, ntype)
    ovar = @vars[name]
    if !ovar.nil? && ovar.alloc != :local
      @vars[name] = BasicVar.new(name, ntype, :local)
    end
  end

  def ref_var(name, ntype)
    ovar = @vars[name]

    if ovar.nil?
      @vars[name] = BasicVar.new(name, ntype, :local)
      return @vars[name]
    end

    if !ovar.has_type? ntype
      raise ProgramError, "Type mismatch: #{name}.#{ntype} was declared #{ovar.alloc} #{name}.#{ovar.type}"
    end

    return ovar
  end

  def lookup_list(name)
    @lists[name]
  end

  def list_declared?(name)
    @lists.has_key?(name)
  end

  def import_var(v)
    @vars[v.name] = v
  end

  def import_list(l)
    @lists[l.name] = l
  end

  def add_statement(stmt)
    @code << stmt
  end

end

class Program < Scope

  def initialize
    super
    @constants = {}
    @structures = {}
    @procedures = {}
    @arrays = {}
    @builtins_used = Set[]
    @labels = {}
    @data = []
  end

  def declare_shared(name)
    ovar = @vars[name]
 
    if ovar.nil?
      @vars[name] = BasicVar.new(name, nil, :shared)
      return @vars[name]
    end

    if ovar.alloc == :local
      ovar.alloc = :shared
    end

    return ovar
  end

  def declare_global(name, ntype)
    ovar = @vars[name]

    if ovar.nil?
      @vars[name] = BasicVar.new(name, ntype, :global)
      return @vars[name]
    end

    if !ovar.has_type? ntype
      raise ProgramError, "Type mismatch: #{name}.#{ntype} was declared #{ovar.alloc} #{name}.#{ovar.type}"
    end

    if ovar.alloc == :local or ovar.alloc == :shared
      ovar.alloc = :global
    end

    return ovar
  end

  def declare_global_list(name, elemtype)
    if !@lists[name].nil?
      raise ProgramError, "Redeclaration of linked list #{name}.#{elemtype}"
    end

    @lists[name] = LinkedList.new(name, elemtype, :global)
    return @lists[name]
  end

  def define_constant(name, value)
    if !(value.is_a?(String) || value.is_a?(Integer) || value.is_a?(Float))
      raise ProgramError, "Constant must be defined as simple value"
    end
    if @constants.has_key? name && @constants[name] != value
      raise ProgramError, "Redefinition of constant #{name}"
    end
    @constants[name] = value
  end

  def lookup_constant(name)
    if !@constants.has_key? name
      raise ProgramError, "Unknown constant ##{name}"
    end
    return @constants[name]
  end

  def type_defined?(name)
    @structures.has_key?(name) || simple_type?(name)
  end

  def define_structure(name, fields)
    if type_defined?(name)
      raise ProgramError, "Redefinition of type #{name}"
    end
    @structures[name] = fields
  end

  def structure_fields(name)
    @structures[name]
  end

  def declare_procedure(name, rtype, params)
    types = params.map { |p| p[1] || :l }
    defaults = params.map { |p| p[2] }
    # parameters with defaults must all be at the end of the param list
    # keep only those
    defaults.shift while !defaults.empty? && defaults[0].nil?
    if defaults.any? { |d| d.nil? }
      raise ProgramError, "Procedure #{name} has non-default parameter after default parameter"
    end
    if @procedures.has_key?(name)
      if @procedures[name][0] != rtype
        raise ProgramError, "Redeclaration of procedure #{name} with different return type"
      end
      if @procedures[name][1] != types
        raise ProgramError, "Redeclaration of procedure #{name} with different parameters"
      end
      if @procedures[name][2] != defaults
        raise ProgramError, "Redeclaration of procedure #{name} with different parameter defaults"
      end
    else
      @procedures[name] = [rtype, types, defaults, nil]
    end
  end

  def lookup_procedure(name)
    if @procedures.has_key? name
      return @procedures[name][0..2]  # rtype, params, default param values
    end

    cname = name.to_s.downcase.to_sym
    if BF.has_key? cname
      @builtins_used << cname
      return [BF[cname]["rtype"], BF[cname]["params"], BF[cname]["defaults"]]
    else
      raise ProgramError, "Procedure #{name} not declared"
    end
  end

  def add_procedure(name, p)
    if !@procedures.has_key?(name)
      raise RuntimeError, "Trying to add unknown procedure #{name}"
    end
    @procedures[name][3] = p
  end

  def declare_array(name, ntype, dimensions)
    otype, olddim = @arrays[name]
    if otype
      if ntype && otype != ntype
        raise ProgramError, "Type mismatch: array #{name}.#{ntype} was declared #{name}.#{otype}"
      end
      if olddim != dimensions
        raise ProgramError, "Array #{name} redeclared with different number of dimensions"
      end
    else
      ntype = :l if ntype.nil?
      @arrays[name] = [ntype, dimensions]
    end
  end

  def array_declared?(name)
    @arrays.has_key?(name)
  end

  def array_type(name)
    return nil if @arrays[name].nil?
    @arrays[name][0]
  end

  def array_dimensions(name)
    return nil if @arrays[name].nil?
    @arrays[name][1]
  end

  def declare_label(name, scope)
    if @labels.has_key? name
      raise ProgramError, "redeclaration of label #{name}:"
    end
    @labels[name] = scope
  end

  def label_scope(name)
    @labels[name]
  end

  def add_statement(stmt)
    if (stmt[0] == :return)
      raise ProgramError, "Procreturn outside procedure"
    end
    super
  end

  def globals
    @vars.values.select { |v| v.alloc == :global }
  end

  def global_lists
    @lists.values.select { |l| l.alloc == :global }
  end

  def declare_data(dtype, data)
    @data << [dtype, data]
  end

  # Make it easier to do scope.program regardless of scope
  def program
    self
  end

end

class Procedure < Scope
  attr_reader :rtype, :name, :program

  def initialize(program, name, rtype, params)
    super()
    @program = program
    @name = name
    @rtype = rtype
    @params = params.map { |p| pname, ptype = p; [pname, ptype || :l] }

    @program.globals.each { |v| import_var(v) }
    @program.global_lists.each { |l| import_list(l) }
    @params.each { |p| pname, ptype = p; declare_param(pname, ptype) }
  end

  def <=>(y)
    self.name.to_s <=> y.name.to_s
  end

  def declare_static(name, ntype)
    ovar = @vars[name]

    # allow shadowing of global vars because they were auto-imported
    # and will be visible in the local scope even if they haven't been
    # used yet.
    if ovar.nil? or ovar.alloc == :global
      @vars[name] = BasicVar.new(name, ntype, :static)
      return @vars[name]
    end

    if ovar.alloc == :local or ovar.alloc == :param or ovar.alloc == :shared
      raise ProgramError, "#{name} was previously declared as #{ovar.alloc}"
    end

    if !ovar.has_type? ntype
      raise ProgramError, "Type mismatch: #{name}.#{ntype} was previously declared as #{name}.#{ovar.type}"
    end

    return ovar
  end

  def declare_param(name, ntype)
    ovar = @vars[name]

    if !ovar.nil? and ovar.alloc == :param
      raise ProgramError, "Duplicate parameter #{name}"
    end

    @vars[name] = BasicVar.new(name, ntype, :param)
  end

  def declare_list(name, elemtype)
    if !@lists[name].nil?
      raise ProgramError, "Redeclaration of linked list #{name}.#{elemtype}"
    end

    @lists[name] = LinkedList.new(name, elemtype, :local)
    return @lists[name]
  end

end
..end elice.y modeval..idf9a246cd24
class Hash

  def sorted_symbols
    self.keys.map{ |s| s.to_s }.sort.map{ |s| s.to_sym }
  end

end

class Set

  def sorted_symbols
    self.map{ |s| s.to_s }.sort.map{ |s| s.to_sym }
  end

end
self.class.module_eval <<'ENDRUBY', 'emit.rb', 2

def c_type(type)
  return "int8_t" if type == :b
  return "uint8_t" if type == :c
  return "int16_t" if type == :w
  return "int32_t" if type == :l
  return "float" if type == :f
  return "std::string" if type  == :s
  return "char *" if type  == :"*"
  return "LinkedList *" if type  == :"()"
  return "void" if type.nil?
  return "struct st_#{type}"
end

def c_initializer(type)
  return "0" if integer_type? type
  return "0.0" if type == :f
  return '""' if type == :s
  return "" if type == :"*" || type == :"()" || type.nil?
  return "st_#{type}()"
end

def c_constructor?(type)
  return !integer_type?(type) && type != :f
end

class Integer

  def c_expr; self.to_s; end

end

class String

  def c_expr; self.inspect; end

end

class Float

  def c_expr; self.to_s; end

end

class BasicVar

  def c_name
    case @alloc
    when :global, :shared then pre = "g"
    when :param, :local, :static then pre = "v"
    end

    s = @name.to_s
    if s[s.length-1] == '$'
      return "#{pre}s_" + s[0...s.length-1]
    else
      return "#{pre}_#{s}"
    end
  end

  def c_def
    return "#{c_type @type} #{c_name}"
  end

  def c_expr
    c_name
  end

end

class VarAddress

  def c_expr
    if @var.type == :s
      return "(char *) #{@var.c_name}.data()"
    else
      return "(char *) &#{@var.c_name}"
    end
  end

end

class LinkedList

  def c_name
    "ll_#{@name}"
  end

  def c_def
    return "TypedList<#{c_type(@type)}> #{c_name}"
  end

  def c_expr
    "&#{c_name}"
  end

end

class ListCurrent

  def c_expr
    "LIST_CURRENT(&#{@list.c_name},#{c_type @type})"
  end

end

class ListAddress

  def c_expr
    "(char *) (#{@list.c_name}.current ? #{@list.c_name}.current + 1 : 0)"
  end

end

class Truncate

  def c_expr
    "(int32_t)(#{@expr.c_expr})"
  end

end

class FieldRef

  def c_expr
    return "#{@base.c_expr}.#{@field.c_name}[#{@index.c_expr}]" if @index
    return "#{@base.c_expr}.#{@field.c_name}"
  end

end

class ArrayIndex

  def c_expr
    i = @indices.map { |i| i.c_expr }.join(", ")
    return "a_#{@name}(#{i})"
  end

end

class ProcedureCall

  def c_expr
    args = @args.map { |a| a.c_expr }.join(", ")
    "p_#{@name}(#{args})"
  end

end

class NotCondition

  def c_expr
    "!#{@expr.c_expr}"
  end

end

class BinaryOp

  def c_op
    case @op
    when :"=" then :"=="
    when :"<>" then :"!="
    when :and then :"&&"
    when :or then :"||"
    when :"!" then :"^"
    else @op
    end
  end

  def c_expr
    # There is one case where automatic promotion to float does not
    # happen naturally in C. An expression like x.i / y.i, evaluated
    # in float context, needs to use a floating-point division.
    # Use a cast to make sure it isn't done as an integer division.
    # (Similar logic applies to all binary arithmetic. Integer addition
    # might overflow where floating point addition would not, etc.)
    if expr_type == :f && !(@x.expr_type == :f || @y.expr_type == :f)
      return "((float) #{@x.c_expr} #{c_op} #{@y.c_expr})"
    end
    return "(#{@x.c_expr} #{c_op} #{@y.c_expr})"
  end

end

class FieldSpec

  def c_name
    s = @name.to_s
    if s[s.length-1] == '$'
      return "fs_" + s[0...s.length-1]
    else
      return "f_#{s}"
    end
  end

  def c_def
    if @size
      return "#{c_type(@type)} #{c_name}[#{@size}]"
    else
      return "#{c_type(@type)} #{c_name}"
    end
  end

end

def c_statement(stmt, scope, indent)
  case stmt[0]
  when :dim   # array sizing, [:dim, arrayname, sizes...]
    name = stmt[1]
    sizes = stmt[2...stmt.size].map { |sz| sz.c_expr }.join(", ")
    return "#{indent}a_#{name}.dim(#{sizes});\n"
  when :"="   # assignment,   [:"=", lvalue, expr]
    lvalue = stmt[1].c_expr
    expr =  stmt[2].c_expr
    if stmt[2].expr_type == :"*" && stmt[1].expr_type != :"*"
      # Suppress warnings about casting pointer to int.
      # At some point this will need a proper fix that supports old 32-bit code
      # Fortunately the current code never tries to cast back to pointers
      return "#{indent}#{lvalue} = (int64_t) #{expr};\n"
    else
      return "#{indent}#{lvalue} = #{expr};\n"
    end
  when :"+"   # increment,   [:"+", lvalue, expr]
    lvalue = stmt[1].c_expr
    expr =  stmt[2].c_expr
    return "#{indent}#{lvalue} += #{expr};\n"
  when :"-"   # decrement,   [:"-", lvalue, expr]
    lvalue = stmt[1].c_expr
    expr =  stmt[2].c_expr
    return "#{indent}#{lvalue} -= #{expr};\n"
  when :return   # [:return, expr]
    return "#{indent}return #{stmt[1].c_expr};\n"
  when :call     # [:call, expr]
    return "#{indent}#{stmt[1].c_expr};\n"
  when :repeat   # [:repeat, cond, statement...]
    cond = stmt[1].c_expr
    body = stmt[2...stmt.size].map do |s|
      c_statement(s, scope, indent + "\t")
    end
    return "#{indent}do {\n#{body}#{indent}} while (!#{cond});\n"
  when :while    # while,    [:while, cond, statement...]
    cond = stmt[1].c_expr
    body = stmt[2...stmt.size].map do |s|
      c_statement(s, scope, indent + "\t")
    end
    return "#{indent}while (#{cond}) {\n#{body}#{indent}}\n"
  when :for
    # [:for, var, expr (start), expr (stop), Integer (step), statement...]
    var = stmt[1].c_expr
    init = stmt[2].c_expr
    stop = stmt[3].c_expr
    step = stmt[4]
    body = stmt[5...stmt.size].map do |s|
      c_statement(s, scope, indent + "\t")
    end
    if step >= 0
      return "#{indent}for (#{var} = #{init}; #{var} <= #{stop}; #{var} += #{step}) {\n#{body}#{indent}}\n"
    else
      return "#{indent}for (#{var} = #{init}; #{var} >= #{stop}; #{var} -= #{-step}) {\n#{body}#{indent}}\n"
    end
  when :if       # [:if, cond, [statement...], [statement...]]
    cond = stmt[1].c_expr
    thenpart = stmt[2].map do |s|
      c_statement(s, scope, indent + "\t")
    end
    if stmt[3].empty?
      return "#{indent}if (#{cond}) {\n#{thenpart}#{indent}}\n"
    else
      elsepart = stmt[3].map do |s|
        c_statement(s, scope, indent + "\t")
      end
      return "#{indent}if (#{cond}) {\n#{thenpart}#{indent}} else {\n#{elsepart}#{indent}}\n"
    end
  when :select   # [:select, expr, [:case, expr, statement...]...]
    if stmt[1].expr_type == :s
      expr = stmt[1].c_expr
      cases = stmt[2...stmt.size].map do |c|
        if c[0] == :case
          w = c[1].c_expr
          body = c[2...c.size].map do |s|
            c_statement(s, scope, indent + "\t")
          end
          "if (#{expr} == #{w}) {\n#{body}#{indent}} else "
        else  # [:default, statement...]
          body = c[1...c.size].map do |s|
            c_statement(s, scope, indent + "\t")
          end
          "#{indent}if (1) {\n#{body}\n#{indent}} else "
        end
      end
      return "#{indent}#{cases}{}\n"
    else
      cases = stmt[2...stmt.size].map do |c|
        if c[0] == :case
          w = c[1].c_expr
          body = c[2...c.size].map do |s|
            c_statement(s, scope, indent + "\t")
          end
          "#{indent}case #{w}:\n#{body}#{indent}\tbreak;\n"
        else  # [:default, statement...]
          body = c[1...c.size].map do |s|
            c_statement(s, scope, indent + "\t")
          end
          "#{indent}default:\n#{body}\n#{indent}\tbreak;\n"
        end
      end
      expr = stmt[1].c_expr
      return "#{indent}switch (#{expr}) {\n#{cases}#{indent}}\n"
    end
  when :break    # break from current loop, [:break]
    return "#{indent}break;\n";
  when :end      # exit program, [:end, exitcode]
    return "#{indent}exit(#{stmt[1].c_expr});\n"
  when :goto
    # NOTE: fully general use of goto is not supported.
    # The target label must either be in the same scope (either within
    # the same procedure, or from the main program to another part of
    # the main program), or from a procedure to the main program.
    # The former case is translated straight to the C goto/label construct.
    # The latter case is handled by throwing an exception to the main
    # program, which then does the goto from there.
    if scope.program.label_scope(stmt[1]) == scope
      return "#{indent}goto L_#{stmt[1]};\n"
    else
      return "#{indent}throw Lv_#{stmt[1]};\n"
    end
  when :label
    return "L_#{stmt[1]}: ;\n"
  when :read    # read from data section, [:read, lvalue]
    t = stmt[1].expr_type
    pos = "data_#{t}_pos"
    max = "DATA_#{t.to_s.upcase}_MAX"
    return "#{indent}#{stmt[1].c_expr} = #{pos} > #{max} ? #{c_initializer t} : data_#{t}[#{pos}++];\n"
  end
  raise RuntimeError, "Unknown statement type #{stmt[0].inspect}"
end

class Program

  def c_structure(f, name, fields)
    # Define the structure as a C++ struct with a default constructor that
    # initializes all fields.
    f.print "struct st_#{name} {\n"
    fields.each { |field| f.print "\t#{field.c_def};\n" }
    init = fields.map { |field| "#{field.c_name}()" }.join(", ")
    f.print "\tst_#{name}() : #{init} {};\n"
    f.print "};\n"
  end

  def c_array_def(f, name, type, dims)
  end

  # Emit constants from the DataSection
  def c_data(f)
    datatypes = [:b, :c, :w, :l, :s, :f]
    datatypes.each do |t|
      tdata = @data.select { |d| d[0] == t }
      unless tdata.empty?
        type = c_type t
        # These are constant strings, no need for std::string overhead
        type = "char *" if t == :s
        decl = "static const #{type} data_#{t}[#{tdata.length}]"
        init = tdata.map { |d| d[1].c_expr }.join(", ")
        f.print "#{decl} = {#{init}};\n"
        f.print "static size_t data_#{t}_pos;\n"
        f.print "static const size_t DATA_#{t.to_s.upcase}_MAX = #{tdata.length-1};\n"
        f.print "\n"
      end
    end
  end

  def c_builtin_proto(f, name)
    rtype = BF[name]["rtype"]
    p = BF[name]["params"].map{ |p| c_type(p) }.join(", ")
    f.print "static #{c_type rtype} p_#{name}(#{p});\n"
  end

  def c_builtin(f, name)
    rtype = BF[name]["rtype"]
    params = BF[name]["params"]
    p = (0...params.size).map { |i| "#{c_type(params[i])} p#{i+1}" }.join(", ")
    f.print "static #{c_type rtype} p_#{name}(#{p}) {\n"
    if BF[name]["code"]
      #f.print "\tfprintf(stdout, \"entering p_#{name}\\n\");\n" # trace
      f.print BF[name]["code"]
    else
      f.print "\tfprintf(stderr, \"%s\", \"#{name} not implemented.\\n\");\n"
      f.print "\texit(1);"
    end
    f.print "\n}\n\n"
  end

  def c_include(f, name)
    return if @includes_printed.include? name
    f.puts "#include <#{name}>\n"
    @includes_printed << name
  end

  def c_fragment(f, name)
    return if @fragments_printed.include? name
    # Add this first, to break dependency loops
    @fragments_printed << name
    if FRAGMENTS[name]["fragments"]
      FRAGMENTS[name]["fragments"].each { |fr| c_fragment(f, fr) }
    end
    FRAGMENTS[name]["includes"].each { |inc| c_include(f, inc) }
    f.puts FRAGMENTS[name]["code"]
  end

  def c_program(f)
    @fragments_printed = Set[]

    # Emit things in alphabetical order to make it easier to debug
    # small changes to the compiler; it makes the output easier to diff.

    @includes_printed = Set[]
    c_include(f, "stdint.h")   # for int32_t and such
    c_include(f, "stdlib.h")   # for exit()
    c_include(f, "stdio.h")    # for fprintf in unimplemented funcs
    c_include(f, "string")     # for std::string
    f.print "\n"

    c_fragment(f, :arrays)
    c_fragment(f, :listdecl)

    @mainlabels = @labels.sorted_symbols.select { |n| @labels[n] == self }

    unless @mainlabels.empty?
      labels = @mainlabels.map { |l| "Lv_#{l}" }.join(", ")
      f.print "enum label { NOLABEL, #{labels}};\n";
    end

    @structures.sorted_symbols.each do |name|
      c_structure(f, name, @structures[name])
    end

    @arrays.sorted_symbols.each do |name|
      type, dims = @arrays[name]
      f.print "static Array<#{c_type(type)}> a_#{name};\n"
    end
    f.print "\n"

    c_data(f) unless @data.empty?

    @lists.values.sort.each { |l| f.print "static #{l.c_def};\n" }
    f.print "\n"

    @vars.values.sort.each { |v| f.print "static #{v.c_def};\n" }
    f.print "\n"

    @builtins_used.sorted_symbols.each do |name|
      c_builtin_proto(f, name);
    end

    @builtins_used.sorted_symbols.each do |name|
      if BF[name]["fragments"]
        BF[name]["fragments"].each { |fr| c_fragment(f, fr) } 
      end
      BF[name]["includes"].each { |inc| c_include(f, inc) }
    end
    f.print "\n"

    @builtins_used.sorted_symbols.each { |name| c_builtin(f, name) }

    # It's okay for procedures to be declared without being defined,
    # as long as they're never actually called. So p[3] can be nil.
    proclist = @procedures.values.reject { |p| p[3].nil? }
    proclist.sort { |x,y| x[3] <=> y[3] }.each { |p| p[3].c_proto(f) }
    f.print "\n"
    proclist.sort { |x,y| x[3] <=> y[3] }.each { |p| p[3].c_proc(f) }

    f.print "int main() {\n"

    unless @mainlabels.empty?
      f.print "\tenum label gotolabel = NOLABEL;\n"
    end

    @fragments_printed.sorted_symbols.each do |name|
      if FRAGMENTS[name]["initialize"]
        f.print("\t" + FRAGMENTS[name]["initialize"] + "\n")
      end
    end

    @builtins_used.sorted_symbols.each do |name|
      f.print(BF[name]["initialize"]) if BF[name]["initialize"]
    end

    indent = "\t"
    unless @mainlabels.empty?
      f.print "\tDISPATCH: try {\n"
      f.print "\t\tswitch (gotolabel) {\n"
      f.print "\t\tcase NOLABEL: break;\n"
      @mainlabels.each do |l|
        f.print "\t\tcase Lv_#{l}: goto L_#{l};\n"
      end
      f.print "\t\t}\n";
      indent = "\t\t"
    end

    @code.each do |c|
      s = c_statement(c, self, indent)
      f.print(s) if s
    end

    unless @mainlabels.empty?
      f.print "\t} catch (enum label l) {\n"
      f.print "\t\tgotolabel = l;\n"
      f.print "\t\tgoto DISPATCH;\n"
      f.print "\t};\n"
    end

    f.print "\treturn 0;\n}\n\n"
  end

end

class Procedure < Scope

  def c_proto(f)
    p = @params.map{ |p| c_type(p[1]) }.join(", ")
    f.print "static #{c_type @rtype} p_#{name}(#{p});\n"
  end

  def c_proc(f)
    p = @params.map { |p| "#{c_type p[1]} #{@vars[p[0]].c_name}" }.join(", ")
    f.print "static #{c_type @rtype} p_#{@name}(#{p}) {\n"
    @vars.values.sort.each do |v|
      case v.alloc
      when :local
        init = c_constructor?(v.type) ? "" : " = #{c_initializer v.type}"
        f.print "\t#{v.c_def}#{init};\n"
      when :static
        f.print "\tstatic #{v.c_def};\n"
      # Nothing for :param
      end
    end

    @lists.values.sort.each do |l|
      if l.alloc == :local
        f.print "#{l.c_def};\n"
      end
    end

    #f.print "\tfprintf(stdout, \"entering p_#{@name}\\n\");\n" # trace

    @code.each do |c|
      s = c_statement(c, self, "\t")
      f.print(s) if s
    end

    f.print "\treturn 0;\n" if @type
    f.print "}\n\n"
  end

end

ENDRUBY
self.class.module_eval <<'ENDRUBY', 'main.rb', 2

# Copyright 2008 Richard Braakman <eligo@clueonic.net>
# See the COPYING file for details.

if ARGV.length == 0
  puts "Usage: ruby #{$0} filename.pb"
  exit 2
end

# Make p global to for emit_warning
$p = Parser.new
r = Program.new

def emit_warning(txt)
  $stderr.puts("#{$p.parse_stack[0]} #{txt}")
end

$p.parse_file("prelude", r, <<-ENDPRELUDE)

#PB_Compiler_OS = "Linux"
#PB_OS_Windows = "Windows"
#PB_OS_Linux = "Linux"

; The PB_Key values are chosen to match the SDL ones, which were
; mostly chosen to match ASCII values.
#PB_Key_1 = 49
#PB_Key_2 = 50
#PB_Key_3 = 51
#PB_Key_4 = 52
#PB_Key_5 = 53
#PB_Key_6 = 54
#PB_Key_7 = 55
#PB_Key_8 = 56
#PB_Key_9 = 57
#PB_Key_0 = 48

#PB_Key_A = 97
#PB_Key_B = 98
#PB_Key_C = 99
#PB_Key_D = 100
#PB_Key_E = 101
#PB_Key_F = 102
#PB_Key_G = 103
#PB_Key_H = 104
#PB_Key_I = 105
#PB_Key_J = 106
#PB_Key_K = 107
#PB_Key_L = 108
#PB_Key_M = 109
#PB_Key_N = 110
#PB_Key_O = 111
#PB_Key_P = 112
#PB_Key_Q = 113
#PB_Key_R = 114
#PB_Key_S = 115
#PB_Key_T = 116
#PB_Key_U = 117
#PB_Key_V = 118
#PB_Key_W = 119
#PB_Key_X = 120
#PB_Key_Y = 121
#PB_Key_Z = 122

#PB_Key_Escape = 27
#PB_Key_Minus = 45
#PB_Key_Back = 8
#PB_Key_Return = 13
#PB_Key_LeftShift = 304
#PB_Key_RightShift = 303
#PB_Key_LeftControl = 306
#PB_Key_RightControl = 305
#PB_Key_Space = 32
#PB_Key_Capital = 301
#PB_Key_F1 = 282
#PB_Key_F2 = 283
#PB_Key_F3 = 284
#PB_Key_F4 = 285
#PB_Key_F5 = 286
#PB_Key_F6 = 287
#PB_Key_F7 = 288
#PB_Key_F8 = 289
#PB_Key_F9 = 290
#PB_Key_F10 = 291
#PB_Key_Up = 273
#PB_Key_Down = 274
#PB_Key_Left = 276
#PB_Key_Right = 275
#PB_Key_Delete = 127

#PB_Event_CloseWindow = 1

#PB_2DDrawing_Transparent = 1

; Not sure what the PureBasic convention is, actually
#True = 1
#False = 0
ENDPRELUDE

$p.parse_file(ARGV[0], r, File.read(ARGV[0]))

r.c_program($stdout)

ENDRUBY
