[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/includes/captcha/ -> captcha_gd.php (source)

   1  <?php
   2  /**
   3  *
   4  * @package VC
   5  * @version $Id$
   6  * @copyright (c) 2006 phpBB Group
   7  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
   8  *
   9  */
  10  
  11  /**
  12  * @ignore
  13  */
  14  if (!defined('IN_PHPBB'))
  15  {
  16      exit;
  17  }
  18  
  19  /**
  20  * Original Author - Xore (Robert Hetzler)
  21  * With contributions from Neothermic
  22  *
  23  * @package VC
  24  */
  25  class captcha
  26  {
  27      var $width = 360;
  28      var $height = 96;
  29  
  30  
  31      /**
  32      * Create the image containing $code with a seed of $seed
  33      */
  34  	function execute($code, $seed)
  35      {
  36          global $config;
  37          
  38          mt_srand($seed);
  39  
  40          // Create image
  41          $img = imagecreatetruecolor($this->width, $this->height);
  42  
  43          // Generate colours
  44          $colour = new colour_manager($img, array(
  45              'random'    => true,
  46              'min_value'    => 60,
  47          ), 'hsv');
  48  
  49          $scheme = $colour->colour_scheme('background', false);
  50          $scheme = $colour->mono_range($scheme, 10, false);
  51          shuffle($scheme);
  52  
  53          $bg_colours = array_splice($scheme, mt_rand(6, 12));
  54  
  55          // Generate code characters
  56          $characters = $sizes = $bounding_boxes = $noise = array();
  57          $width_avail = $this->width - 15;
  58          $code_len = strlen($code);
  59          $captcha_bitmaps = $this->captcha_bitmaps();
  60  
  61          for ($i = 0; $i < $code_len; ++$i)
  62          {
  63              $characters[$i] = new char_cube3d($captcha_bitmaps, $code[$i]);
  64  
  65              list($min, $max) = $characters[$i]->range();
  66              $sizes[$i] = mt_rand($min, $max);
  67  
  68              $box = $characters[$i]->dimensions($sizes[$i]);
  69              $width_avail -= ($box[2] - $box[0]);
  70              $bounding_boxes[$i] = $box;
  71          }
  72  
  73   
  74          // Redistribute leftover x-space
  75          $offset = array();
  76          for ($i = 0; $i < $code_len; ++$i)
  77          {
  78              $denom = ($code_len - $i);
  79              $denom = max(1.3, $denom);
  80              $offset[$i] = phpbb_mt_rand(0, (int) round((1.5 * $width_avail) / $denom));
  81              $width_avail -= $offset[$i];
  82          }
  83  
  84          if ($config['captcha_gd_x_grid'])
  85          {
  86              $grid = (int) $config['captcha_gd_x_grid'];
  87              for ($y = 0; $y < $this->height; $y += mt_rand($grid - 2, $grid + 2))
  88              {
  89                  $current_colour = $scheme[array_rand($scheme)];
  90                  imageline($img, mt_rand(0,4), mt_rand($y - 3, $y), mt_rand($this->width - 5, $this->width), mt_rand($y - 3, $y), $current_colour);
  91              }
  92          }
  93  
  94          if ($config['captcha_gd_y_grid'])
  95          {
  96              $grid = (int) $config['captcha_gd_y_grid'];
  97              for ($x = 0; $x < $this->width; $x += mt_rand($grid - 2, $grid + 2))
  98              {
  99                  $current_colour = $scheme[array_rand($scheme)];
 100                  imagedashedline($img, mt_rand($x -3, $x + 3), mt_rand(0, 4), mt_rand($x -3, $x + 3), mt_rand($this->height - 5, $this->height), $current_colour);
 101              }
 102          }
 103          if ($config['captcha_gd_wave'] && ($config['captcha_gd_y_grid'] || $config['captcha_gd_y_grid']))
 104          {
 105              $this->wave($img);
 106          }
 107          
 108          
 109          if ($config['captcha_gd_3d_noise'])
 110          {
 111              $xoffset = mt_rand(0,9);
 112              $noise_bitmaps = $this->captcha_noise_bg_bitmaps();
 113              for ($i = 0; $i < $code_len; ++$i)
 114              {
 115                  $noise[$i] = new char_cube3d($noise_bitmaps, mt_rand(1, sizeof($noise_bitmaps['data'])));
 116  
 117                  list($min, $max) = $noise[$i]->range();
 118                  //$box = $noise[$i]->dimensions($sizes[$i]);
 119              }
 120              $xoffset = 0;
 121              for ($i = 0; $i < $code_len; ++$i)
 122              {
 123                  $dimm = $bounding_boxes[$i];
 124                  $xoffset += ($offset[$i] - $dimm[0]);
 125                  $yoffset = mt_rand(-$dimm[1], $this->height - $dimm[3]);
 126       
 127                  $noise[$i]->drawchar($sizes[$i], $xoffset, $yoffset, $img, $colour->get_resource('background'), $scheme);
 128                  $xoffset += $dimm[2];
 129              }
 130          }
 131          $xoffset = 5;
 132          for ($i = 0; $i < $code_len; ++$i)
 133          {
 134              $dimm = $bounding_boxes[$i];
 135              $xoffset += ($offset[$i] - $dimm[0]);
 136              $yoffset = mt_rand(-$dimm[1], $this->height - $dimm[3]);
 137  
 138              $characters[$i]->drawchar($sizes[$i], $xoffset, $yoffset, $img, $colour->get_resource('background'), $scheme);
 139              $xoffset += $dimm[2];
 140          }
 141          if ($config['captcha_gd_wave'])
 142          {
 143              $this->wave($img);
 144          }
 145          if ($config['captcha_gd_foreground_noise'])
 146          {
 147              $this->noise_line($img, 0, 0, $this->width, $this->height, $colour->get_resource('background'), $scheme, $bg_colours);
 148          }
 149          // Send image
 150          header('Content-Type: image/png');
 151          header('Cache-control: no-cache, no-store');
 152          imagepng($img);
 153          imagedestroy($img);
 154      }
 155  
 156      /**
 157      * Sinus
 158      */
 159  	function wave($img)
 160      {
 161          global $config;
 162          
 163          $period_x = mt_rand(12,18);
 164          $period_y = mt_rand(7,14);
 165          $amp_x = mt_rand(5,10);
 166          $amp_y = mt_rand(2,4); 
 167          $socket = mt_rand(0,100);
 168          
 169          $dampen_x = mt_rand($this->width/5, $this->width/2);
 170          $dampen_y = mt_rand($this->height/5, $this->height/2);
 171          $direction_x = (mt_rand (0, 1));
 172          $direction_y = (mt_rand (0, 1));
 173  
 174          for ($i = 0; $i < $this->width; $i++)
 175          {
 176              $dir = ($direction_x) ? $i : ($this->width - $i);
 177              imagecopy($img, $img, $i-1, sin($socket+ $i/($period_x + $dir/$dampen_x)) * $amp_x, $i, 0, 1, $this->height);
 178          }
 179          $socket = mt_rand(0,100);
 180          for ($i = 0; $i < $this->height; $i++)
 181          {
 182              $dir = ($direction_y) ? $i : ($this->height - $i);
 183              imagecopy($img, $img ,sin($socket + $i/($period_y + ($dir)/$dampen_y)) * $amp_y, $i-1, 0, $i, $this->width, 1);
 184          }
 185          return $img;
 186      }
 187      
 188      /**
 189      * Noise line
 190      */
 191  	function noise_line($img, $min_x, $min_y, $max_x, $max_y, $bg, $font, $non_font)
 192      {
 193          imagesetthickness($img, 2);
 194  
 195          $x1 = $min_x;
 196          $x2 = $max_x;
 197          $y1 = $min_y;
 198          $y2 = $min_y;
 199  
 200          do
 201          {
 202              $line = array_merge(
 203                  array_fill(0, mt_rand(30, 60), $non_font[array_rand($non_font)]),
 204                  array_fill(0, mt_rand(30, 60), $bg)
 205              );
 206  
 207              imagesetstyle($img, $line);
 208              imageline($img, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED);
 209  
 210              $y1 += mt_rand(12, 35);
 211              $y2 += mt_rand(12, 35);
 212          }
 213          while ($y1 < $max_y && $y2 < $max_y);
 214  
 215          $x1 = $min_x;
 216          $x2 = $min_x;
 217          $y1 = $min_y;
 218          $y2 = $max_y;
 219  
 220          do
 221          {
 222              $line = array_merge(
 223                  array_fill(0, mt_rand(30, 60), $non_font[array_rand($non_font)]),
 224                  array_fill(0, mt_rand(30, 60), $bg)
 225              );
 226  
 227              imagesetstyle($img, $line);
 228              imageline($img, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED);
 229  
 230              $x1 += mt_rand(20, 35);
 231              $x2 += mt_rand(20, 35);
 232          }
 233          while ($x1 < $max_x && $x2 < $max_x);
 234          imagesetthickness($img, 1);
 235      }
 236  
 237  
 238  	function captcha_noise_bg_bitmaps()
 239      {        
 240          return array(
 241              'width'        => 15,
 242              'height'    => 5,
 243              'data'        => array(
 244  
 245              1 => array(
 246                  array(1,0,0,0,1,0,0,0,0,0,0,0,0,0,0),
 247                  array(1,0,0,0,0,1,0,0,0,0,0,0,0,0,0),
 248                  array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 249                  array(1,0,0,0,0,1,0,0,0,0,0,0,1,0,0),
 250                  array(1,0,0,0,0,0,1,0,0,0,0,1,0,0,0),
 251              ),
 252              2 => array(
 253                  array(1,1,mt_rand(0,1),1,0,1,1,1,1,0,0,0,0,0,0),
 254                  array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),
 255                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 256                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 257                  array(0,0,0,0,0,0,0,0,0,1,1,0,1,1,1),
 258              ),
 259              3 => array(
 260                  array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,1),
 261                  array(1,0,0,0,0,0,0,0,0,0,0,0,0,1,0),
 262                  array(0,0,0,0,1,0,0,0,0,0,0,0,0,0,1),
 263                  array(1,0,0,0,0,0,0,0,0,0,0,0,0,1,0),
 264                  array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,1),
 265              ),
 266              4 => array(
 267                  array(1,0,1,0,1,0,0,1,1,0,0,0,0,0,0),
 268                  array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),
 269                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 270                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 271                  array(1,0,1,0,0,0,0,0,0,0,0,0,0,0,0),
 272              ),
 273              5 => array(
 274                  array(1,1,1,1,0,0,0,1,1,1,0,0,1,0,1),
 275                  array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0),
 276                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 277                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 278                  array(1,0,1,0,0,0,0,0,0,0,0,0,0,0,0),
 279              ),
 280              6 => array(
 281                  array(mt_rand(0,1),mt_rand(0,1),mt_rand(0,1),mt_rand(0,1),mt_rand(0,1),0,mt_rand(0,1),mt_rand(0,1),mt_rand(0,1),mt_rand(0,1),mt_rand(0,1),0,mt_rand(0,1),mt_rand(0,1),mt_rand(0,1)),
 282                  array(0,0,0,0,0,0,0,mt_rand(0,1),0,0,0,0,0,0,0),
 283                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 284                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 285                  array(mt_rand(0,1),0,mt_rand(0,1),0,0,0,0,0,0,0,0,0,0,0,0),
 286              ),
 287              7 => array(
 288                  array(0,0,0,0,0,0,0,0,0,0,1,1,0,1,1),
 289                  array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 290                  array(0,0,1,1,0,0,0,1,0,0,0,0,0,0,0),
 291                  array(0,1,0,0,0,1,0,0,0,0,0,0,0,0,0),
 292                  array(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 293              ),
 294          ));
 295      }
 296      
 297      /**
 298      * Return bitmaps
 299      */
 300  	function captcha_bitmaps()
 301      {
 302          global $config;
 303          
 304          $chars = array(
 305              'A'    =>    array(
 306                          array(
 307                              array(0,0,0,0,1,0,0,0,0),
 308                              array(0,0,0,1,0,1,0,0,0),
 309                              array(0,0,0,1,0,1,0,0,0),
 310                              array(0,0,0,1,0,1,0,0,0),
 311                              array(0,0,1,0,0,0,1,0,0),
 312                              array(0,0,1,0,0,0,1,0,0),
 313                              array(0,0,1,0,0,0,1,0,0),
 314                              array(0,1,0,0,0,0,0,1,0),
 315                              array(0,1,0,0,0,0,0,1,0),
 316                              array(0,1,1,1,1,1,1,1,0),
 317                              array(0,1,0,0,0,0,0,1,0),
 318                              array(1,0,0,0,0,0,0,0,1),
 319                              array(1,0,0,0,0,0,0,0,1),
 320                              array(1,0,0,0,0,0,0,0,1),
 321                              array(1,0,0,0,0,0,0,0,1),
 322                          ),
 323                          array(
 324                              array(0,0,0,0,0,0,0,0,0),
 325                              array(0,0,0,0,0,0,0,0,0),
 326                              array(0,0,0,0,1,0,0,0,0),
 327                              array(0,0,0,1,0,1,0,0,0),
 328                              array(0,0,1,1,0,1,1,0,0),
 329                              array(0,0,1,0,0,0,1,0,0),
 330                              array(0,1,0,0,0,0,0,1,0),
 331                              array(0,1,0,0,0,0,0,1,0),
 332                              array(0,1,1,1,1,1,1,1,0),
 333                              array(0,1,0,0,0,0,0,1,0),
 334                              array(0,1,0,0,0,0,0,1,0),
 335                              array(0,1,0,0,0,0,0,1,0),
 336                              array(0,1,0,0,0,0,0,1,0),
 337                              array(0,1,0,0,0,0,0,1,0),
 338                              array(1,1,1,0,0,0,1,1,1),
 339                          ),
 340                          array(
 341                              array(0,0,0,0,0,0,0,0,0),
 342                              array(0,0,0,0,0,0,0,0,0),
 343                              array(0,0,0,0,0,0,0,0,0),
 344                              array(0,0,0,0,0,0,0,0,0),
 345                              array(0,0,1,1,1,1,1,0,0),
 346                              array(0,1,1,0,0,0,1,1,0),
 347                              array(1,1,0,0,0,0,0,1,1),
 348                              array(1,0,0,0,0,0,0,0,1),
 349                              array(0,0,0,0,0,0,0,1,1),
 350                              array(0,0,0,0,0,1,1,1,1),
 351                              array(0,0,0,1,1,1,0,0,1),
 352                              array(0,1,1,1,0,0,0,0,1),
 353                              array(1,0,0,0,0,0,0,0,1),
 354                              array(1,1,0,0,0,0,1,1,1),
 355                              array(0,1,1,1,1,1,1,0,1),
 356                          ),
 357                      ),
 358          'B'    =>        array(
 359                          array(
 360                              array(1,1,1,1,1,1,1,0,0),
 361                              array(1,0,0,0,0,0,0,1,0),
 362                              array(1,0,0,0,0,0,0,0,1),
 363                              array(1,0,0,0,0,0,0,0,1),
 364                              array(1,0,0,0,0,0,0,0,1),
 365                              array(1,0,0,0,0,0,0,0,1),
 366                              array(1,0,0,0,0,0,0,1,0),
 367                              array(1,1,1,1,1,1,1,0,0),
 368                              array(1,0,0,0,0,0,0,1,0),
 369                              array(1,0,0,0,0,0,0,0,1),
 370                              array(1,0,0,0,0,0,0,0,1),
 371                              array(1,0,0,0,0,0,0,0,1),
 372                              array(1,0,0,0,0,0,0,0,1),
 373                              array(1,0,0,0,0,0,0,1,0),
 374                              array(1,1,1,1,1,1,1,0,0),
 375                          ),
 376                          array(
 377                              array(1,1,1,1,1,1,1,0,0),
 378                              array(0,1,0,0,0,0,0,1,0),
 379                              array(0,1,0,0,0,0,0,0,1),
 380                              array(0,1,0,0,0,0,0,0,1),
 381                              array(0,1,0,0,0,0,0,0,1),
 382                              array(0,1,0,0,0,0,0,0,1),
 383                              array(0,1,0,0,0,0,0,1,0),
 384                              array(0,1,1,1,1,1,1,0,0),
 385                              array(0,1,0,0,0,0,0,1,0),
 386                              array(0,1,0,0,0,0,0,0,1),
 387                              array(0,1,0,0,0,0,0,0,1),
 388                              array(0,1,0,0,0,0,0,0,1),
 389                              array(0,1,0,0,0,0,0,0,1),
 390                              array(0,1,0,0,0,0,0,1,0),
 391                              array(1,1,1,1,1,1,1,0,0),
 392                          ),
 393                          array(
 394                              array(0,1,0,0,0,0,0,0,0),
 395                              array(0,1,0,0,0,0,0,0,0),
 396                              array(0,1,0,0,0,0,0,0,0),
 397                              array(0,1,0,0,0,0,0,0,0),
 398                              array(0,1,0,0,0,0,0,0,0),
 399                              array(0,1,0,0,0,0,0,0,0),
 400                              array(0,1,0,0,0,0,0,0,0),
 401                              array(0,1,1,1,1,1,1,0,0),
 402                              array(0,1,0,0,0,0,0,1,0),
 403                              array(0,1,0,0,0,0,0,0,1),
 404                              array(0,1,0,0,0,0,0,0,1),
 405                              array(0,1,0,0,0,0,0,0,1),
 406                              array(0,1,0,0,0,0,0,0,1),
 407                              array(0,1,0,0,0,0,0,1,0),
 408                              array(0,1,1,1,1,1,1,0,0),
 409                          ),
 410                      ),
 411          'C'    =>        array(
 412                          array(
 413                              array(0,0,1,1,1,1,1,0,0),
 414                              array(0,1,0,0,0,0,0,1,0),
 415                              array(1,0,0,0,0,0,0,0,1),
 416                              array(1,0,0,0,0,0,0,0,1),
 417                              array(1,0,0,0,0,0,0,0,0),
 418                              array(1,0,0,0,0,0,0,0,0),
 419                              array(1,0,0,0,0,0,0,0,0),
 420                              array(1,0,0,0,0,0,0,0,0),
 421                              array(1,0,0,0,0,0,0,0,0),
 422                              array(1,0,0,0,0,0,0,0,0),
 423                              array(1,0,0,0,0,0,0,0,0),
 424                              array(1,0,0,0,0,0,0,0,1),
 425                              array(1,0,0,0,0,0,0,0,1),
 426                              array(0,1,0,0,0,0,0,1,0),
 427                              array(0,0,1,1,1,1,1,0,0),
 428                          ),
 429                          array(
 430                              array(0,0,1,1,1,1,1,0,1),
 431                              array(0,1,0,0,0,0,0,1,1),
 432                              array(1,0,0,0,0,0,0,0,1),
 433                              array(1,0,0,0,0,0,0,0,1),
 434                              array(1,0,0,0,0,0,0,0,0),
 435                              array(1,0,0,0,0,0,0,0,0),
 436                              array(1,0,0,0,0,0,0,0,0),
 437                              array(1,0,0,0,0,0,0,0,0),
 438                              array(1,0,0,0,0,0,0,0,0),
 439                              array(1,0,0,0,0,0,0,0,0),
 440                              array(1,0,0,0,0,0,0,0,0),
 441                              array(1,0,0,0,0,0,0,0,1),
 442                              array(1,0,0,0,0,0,0,0,1),
 443                              array(0,1,0,0,0,0,0,1,1),
 444                              array(0,0,1,1,1,1,1,0,1),
 445                          ),
 446                      ),
 447          'D'    =>        array(
 448                          array(
 449                              array(1,1,1,1,1,1,1,0,0),
 450                              array(1,0,0,0,0,0,0,1,0),
 451                              array(1,0,0,0,0,0,0,0,1),
 452                              array(1,0,0,0,0,0,0,0,1),
 453                              array(1,0,0,0,0,0,0,0,1),
 454                              array(1,0,0,0,0,0,0,0,1),
 455                              array(1,0,0,0,0,0,0,0,1),
 456                              array(1,0,0,0,0,0,0,0,1),
 457                              array(1,0,0,0,0,0,0,0,1),
 458                              array(1,0,0,0,0,0,0,0,1),
 459                              array(1,0,0,0,0,0,0,0,1),
 460                              array(1,0,0,0,0,0,0,0,1),
 461                              array(1,0,0,0,0,0,0,0,1),
 462                              array(1,0,0,0,0,0,0,1,0),
 463                              array(1,1,1,1,1,1,1,0,0),
 464                          ),
 465                          array(
 466                              array(1,1,1,1,1,1,1,0,0),
 467                              array(0,1,0,0,0,0,0,1,0),
 468                              array(0,1,0,0,0,0,0,0,1),
 469                              array(0,1,0,0,0,0,0,0,1),
 470                              array(0,1,0,0,0,0,0,0,1),
 471                              array(0,1,0,0,0,0,0,0,1),
 472                              array(0,1,0,0,0,0,0,0,1),
 473                              array(0,1,0,0,0,0,0,0,1),
 474                              array(0,1,0,0,0,0,0,0,1),
 475                              array(0,1,0,0,0,0,0,0,1),
 476                              array(0,1,0,0,0,0,0,0,1),
 477                              array(0,1,0,0,0,0,0,0,1),
 478                              array(0,1,0,0,0,0,0,0,1),
 479                              array(0,1,0,0,0,0,0,1,0),
 480                              array(1,1,1,1,1,1,1,0,0),
 481                          ),
 482                          array(
 483                              array(0,0,0,0,0,0,0,0,1),
 484                              array(0,0,0,0,0,0,0,0,1),
 485                              array(0,0,0,0,0,0,0,0,1),
 486                              array(0,0,0,0,0,0,0,0,1),
 487                              array(0,0,0,0,0,0,0,0,1),
 488                              array(0,0,0,0,0,0,0,0,1),
 489                              array(0,0,0,0,0,0,0,0,1),
 490                              array(0,0,1,1,1,1,1,0,1),
 491                              array(0,1,1,0,0,0,1,1,1),
 492                              array(0,1,0,0,0,0,0,0,1),
 493                              array(0,1,0,0,0,0,0,0,1),
 494                              array(0,1,0,0,0,0,0,0,1),
 495                              array(0,1,0,0,0,0,0,0,1),
 496                              array(0,1,1,0,0,0,1,1,1),
 497                              array(0,0,1,1,1,1,1,0,1),
 498                          ),
 499                      ),
 500          'E'    =>        array(
 501                          array(
 502                              array(1,1,1,1,1,1,1,1,1),
 503                              array(1,0,0,0,0,0,0,0,0),
 504                              array(1,0,0,0,0,0,0,0,0),
 505                              array(1,0,0,0,0,0,0,0,0),
 506                              array(1,0,0,0,0,0,0,0,0),
 507                              array(1,0,0,0,0,0,0,0,0),
 508                              array(1,0,0,0,0,0,0,0,0),
 509                              array(1,1,1,1,1,1,1,1,0),
 510                              array(1,0,0,0,0,0,0,0,0),
 511                              array(1,0,0,0,0,0,0,0,0),
 512                              array(1,0,0,0,0,0,0,0,0),
 513                              array(1,0,0,0,0,0,0,0,0),
 514                              array(1,0,0,0,0,0,0,0,0),
 515                              array(1,0,0,0,0,0,0,0,0),
 516                              array(1,1,1,1,1,1,1,1,1),
 517                          ),
 518                          array(
 519                              array(1,1,1,1,1,1,1,1,1),
 520                              array(1,0,0,0,0,0,0,0,1),
 521                              array(1,0,0,0,0,0,0,0,0),
 522                              array(1,0,0,0,0,0,0,0,0),
 523                              array(1,0,0,0,0,0,0,0,0),
 524                              array(1,0,0,0,0,0,0,0,0),
 525                              array(1,0,0,0,0,0,0,0,0),
 526                              array(1,1,1,1,1,1,1,0,0),
 527                              array(1,0,0,0,0,0,0,0,0),
 528                              array(1,0,0,0,0,0,0,0,0),
 529                              array(1,0,0,0,0,0,0,0,0),
 530                              array(1,0,0,0,0,0,0,0,0),
 531                              array(1,0,0,0,0,0,0,0,0),
 532                              array(1,0,0,0,0,0,0,0,1),
 533                              array(1,1,1,1,1,1,1,1,1),
 534                          ),
 535                          array(
 536                              array(0,0,0,0,0,0,0,0,0),
 537                              array(0,0,0,0,0,0,0,0,0),
 538                              array(0,0,0,0,0,0,0,0,0),
 539                              array(0,0,0,0,0,0,0,0,0),
 540                              array(0,0,0,0,0,0,0,0,0),
 541                              array(0,0,0,0,0,0,0,0,0),
 542                              array(0,0,0,0,0,0,0,0,0),
 543                              array(0,0,1,1,1,1,1,0,0),
 544                              array(0,1,1,0,0,0,1,1,0),
 545                              array(1,1,0,0,0,0,0,1,1),
 546                              array(1,1,1,1,1,1,1,1,1),
 547                              array(1,0,0,0,0,0,0,0,0),
 548                              array(1,0,0,0,0,0,0,0,1),
 549                              array(1,1,0,0,0,0,0,1,1),
 550                              array(0,1,1,1,1,1,1,1,0),
 551                          ),
 552                      ),
 553          'F'    =>        array(
 554                          array(
 555                              array(1,1,1,1,1,1,1,1,1),
 556                              array(1,0,0,0,0,0,0,0,0),
 557                              array(1,0,0,0,0,0,0,0,0),
 558                              array(1,0,0,0,0,0,0,0,0),
 559                              array(1,0,0,0,0,0,0,0,0),
 560                              array(1,0,0,0,0,0,0,0,0),
 561                              array(1,0,0,0,0,0,0,0,0),
 562                              array(1,1,1,1,1,1,1,0,0),
 563                              array(1,0,0,0,0,0,0,0,0),
 564                              array(1,0,0,0,0,0,0,0,0),
 565                              array(1,0,0,0,0,0,0,0,0),
 566                              array(1,0,0,0,0,0,0,0,0),
 567                              array(1,0,0,0,0,0,0,0,0),
 568                              array(1,0,0,0,0,0,0,0,0),
 569                              array(1,0,0,0,0,0,0,0,0),
 570                          ),
 571                          array(
 572                              array(0,1,1,1,1,1,1,1,1),
 573                              array(0,1,0,0,0,0,0,0,1),
 574                              array(0,1,0,0,0,0,0,0,0),
 575                              array(0,1,0,0,0,0,0,0,0),
 576                              array(0,1,0,0,0,0,0,0,0),
 577                              array(0,1,0,0,0,0,0,0,0),
 578                              array(0,1,0,0,0,0,0,0,0),
 579                              array(0,1,1,1,1,1,1,0,0),
 580                              array(0,1,0,0,0,0,0,0,0),
 581                              array(0,1,0,0,0,0,0,0,0),
 582                              array(0,1,0,0,0,0,0,0,0),
 583                              array(0,1,0,0,0,0,0,0,0),
 584                              array(0,1,0,0,0,0,0,0,0),
 585                              array(0,1,0,0,0,0,0,0,0),
 586                              array(1,1,1,0,0,0,0,0,0),
 587                          ),
 588                          array(
 589                              array(0,0,0,1,1,0,0,0,0),
 590                              array(0,0,1,1,0,0,0,0,0),
 591                              array(0,1,1,0,0,0,0,0,0),
 592                              array(0,1,0,0,0,0,0,0,0),
 593                              array(0,1,0,0,0,0,0,0,0),
 594                              array(1,1,1,1,0,0,0,0,0),
 595                              array(0,1,0,0,0,0,0,0,0),
 596                              array(0,1,0,0,0,0,0,0,0),
 597                              array(0,1,0,0,0,0,0,0,0),
 598                              array(0,1,0,0,0,0,0,0,0),
 599                              array(0,1,0,0,0,0,0,0,0),
 600                              array(0,1,0,0,0,0,0,0,0),
 601                              array(0,1,0,0,0,0,0,0,0),
 602                              array(0,1,0,0,0,0,0,0,0),
 603                              array(0,1,0,0,0,0,0,0,0),
 604                          ),
 605                      ),
 606          'G'    =>        array(
 607                          array(
 608                              array(0,0,1,1,1,1,1,0,0),
 609                              array(0,1,0,0,0,0,0,1,0),
 610                              array(1,0,0,0,0,0,0,0,1),
 611                              array(1,0,0,0,0,0,0,0,0),
 612                              array(1,0,0,0,0,0,0,0,0),
 613                              array(1,0,0,0,0,0,0,0,0),
 614                              array(1,0,0,0,0,0,0,0,0),
 615                              array(1,0,0,0,0,0,0,0,0),
 616                              array(1,0,0,0,0,0,1,1,1),
 617                              array(1,0,0,0,0,0,0,0,1),
 618                              array(1,0,0,0,0,0,0,0,1),
 619                              array(1,0,0,0,0,0,0,0,1),
 620                              array(1,0,0,0,0,0,0,0,1),
 621                              array(0,1,0,0,0,0,0,1,0),
 622                              array(0,0,1,1,1,1,1,0,0),
 623                          ),
 624                          array(
 625                              array(0,0,1,1,1,1,1,0,1),
 626                              array(0,1,0,0,0,0,0,1,1),
 627                              array(1,0,0,0,0,0,0,0,1),
 628                              array(1,0,0,0,0,0,0,0,0),
 629                              array(1,0,0,0,0,0,0,0,0),
 630                              array(1,0,0,0,0,0,0,0,0),
 631                              array(1,0,0,0,0,0,0,0,0),
 632                              array(1,0,0,0,0,0,0,0,0),
 633                              array(1,0,0,0,1,1,1,1,1),
 634                              array(1,0,0,0,1,0,0,0,1),
 635                              array(1,0,0,0,1,0,0,0,1),
 636                              array(1,0,0,0,0,0,0,0,1),
 637                              array(1,0,0,0,0,0,0,0,1),
 638                              array(0,1,0,0,0,0,0,1,1),
 639                              array(0,0,1,1,1,1,1,0,1),
 640                          ),
 641                          array(
 642                              array(0,0,1,1,1,1,1,0,1),
 643                              array(0,1,1,0,0,0,0,1,1),
 644                              array(1,1,0,0,0,0,0,1,1),
 645                              array(1,0,0,0,0,0,0,0,1),
 646                              array(1,0,0,0,0,0,0,0,1),
 647                              array(1,1,1,0,0,0,0,0,1),
 648                              array(0,0,1,1,1,1,1,1,1),
 649                              array(0,0,0,0,0,0,0,0,1),
 650                              array(0,0,0,0,0,0,0,0,1),
 651                              array(0,0,0,0,0,0,0,0,1),
 652                              array(0,0,0,0,0,0,0,0,1),
 653                              array(0,0,0,0,0,0,0,1,1),
 654                              array(1,1,1,1,1,1,1,1,0),
 655                              array(0,0,0,0,0,0,0,0,0),
 656                              array(0,0,0,0,0,0,0,0,0),
 657                          ),
 658                      ),
 659          'H'    =>        array(
 660                          array(
 661                              array(1,0,0,0,0,0,0,0,1),
 662                              array(1,0,0,0,0,0,0,0,1),
 663                              array(1,0,0,0,0,0,0,0,1),
 664                              array(1,0,0,0,0,0,0,0,1),
 665                              array(1,0,0,0,0,0,0,0,1),
 666                              array(1,0,0,0,0,0,0,0,1),
 667                              array(1,0,0,0,0,0,0,0,1),
 668                              array(1,1,1,1,1,1,1,1,1),
 669                              array(1,0,0,0,0,0,0,0,1),
 670                              array(1,0,0,0,0,0,0,0,1),
 671                              array(1,0,0,0,0,0,0,0,1),
 672                              array(1,0,0,0,0,0,0,0,1),
 673                              array(1,0,0,0,0,0,0,0,1),
 674                              array(1,0,0,0,0,0,0,0,1),
 675                              array(1,0,0,0,0,0,0,0,1),
 676                          ),
 677                          array(
 678                              array(1,1,1,0,0,0,1,1,1),
 679                              array(0,1,0,0,0,0,0,1,0),
 680                              array(0,1,0,0,0,0,0,1,0),
 681                              array(0,1,0,0,0,0,0,1,0),
 682                              array(0,1,0,0,0,0,0,1,0),
 683                              array(0,1,0,0,0,0,0,1,0),
 684                              array(0,1,0,0,0,0,0,1,0),
 685                              array(0,1,1,1,1,1,1,1,0),
 686                              array(0,1,0,0,0,0,0,1,0),
 687                              array(0,1,0,0,0,0,0,1,0),
 688                              array(0,1,0,0,0,0,0,1,0),
 689                              array(0,1,0,0,0,0,0,1,0),
 690                              array(0,1,0,0,0,0,0,1,0),
 691                              array(0,1,0,0,0,0,0,1,0),
 692                              array(1,1,1,0,0,0,1,1,1),
 693                          ),
 694                          array(
 695                              array(1,0,0,0,0,0,0,0,0),
 696                              array(1,0,0,0,0,0,0,0,0),
 697                              array(1,0,0,0,0,0,0,0,0),
 698                              array(1,0,0,0,0,0,0,0,0),
 699                              array(1,0,0,0,0,0,0,0,0),
 700                              array(1,0,0,0,0,0,0,0,0),
 701                              array(1,0,0,0,0,0,0,0,0),
 702                              array(1,0,0,1,1,1,0,0,0),
 703                              array(1,1,1,1,0,1,1,0,0),
 704                              array(1,0,0,0,0,0,1,0,0),
 705                              array(1,0,0,0,0,0,1,0,0),
 706                              array(1,0,0,0,0,0,1,0,0),
 707                              array(1,0,0,0,0,0,1,0,0),
 708                              array(1,0,0,0,0,0,1,0,0),
 709                              array(1,0,0,0,0,0,1,0,0),
 710                          ),
 711                      ),
 712          'I'    =>        array(
 713                          array(
 714                              array(1,1,1,1,1,1,1,1,1),
 715                              array(0,0,0,0,1,0,0,0,0),
 716                              array(0,0,0,0,1,0,0,0,0),
 717                              array(0,0,0,0,1,0,0,0,0),
 718                              array(0,0,0,0,1,0,0,0,0),
 719                              array(0,0,0,0,1,0,0,0,0),
 720                              array(0,0,0,0,1,0,0,0,0),
 721                              array(0,0,0,0,1,0,0,0,0),
 722                              array(0,0,0,0,1,0,0,0,0),
 723                              array(0,0,0,0,1,0,0,0,0),
 724                              array(0,0,0,0,1,0,0,0,0),
 725                              array(0,0,0,0,1,0,0,0,0),
 726                              array(0,0,0,0,1,0,0,0,0),
 727                              array(0,0,0,0,1,0,0,0,0),
 728                              array(1,1,1,1,1,1,1,1,1),
 729                          ),
 730                          array(
 731                              array(0,0,0,1,1,1,0,0,0),
 732                              array(0,0,0,0,1,0,0,0,0),
 733                              array(0,0,0,0,1,0,0,0,0),
 734                              array(0,0,0,0,1,0,0,0,0),
 735                              array(0,0,0,0,1,0,0,0,0),
 736                              array(0,0,0,0,1,0,0,0,0),
 737                              array(0,0,0,0,1,0,0,0,0),
 738                              array(0,0,0,0,1,0,0,0,0),
 739                              array(0,0,0,0,1,0,0,0,0),
 740                              array(0,0,0,0,1,0,0,0,0),
 741                              array(0,0,0,0,1,0,0,0,0),
 742                              array(0,0,0,0,1,0,0,0,0),
 743                              array(0,0,0,0,1,0,0,0,0),
 744                              array(0,0,0,0,1,0,0,0,0),
 745                              array(0,0,0,1,1,1,0,0,0),
 746                          ),
 747                          array(
 748                              array(0,0,0,0,0,0,0,0,0),
 749                              array(0,0,0,0,0,0,0,0,0),
 750                              array(0,0,0,0,0,0,0,0,0),
 751                              array(0,0,0,0,1,0,0,0,0),
 752                              array(0,0,0,1,1,1,0,0,0),
 753                              array(0,0,0,0,1,0,0,0,0),
 754                              array(0,0,0,0,0,0,0,0,0),
 755                              array(0,0,0,0,1,0,0,0,0),
 756                              array(0,0,0,0,1,0,0,0,0),
 757                              array(0,0,0,0,1,0,0,0,0),
 758                              array(0,0,0,0,1,0,0,0,0),
 759                              array(0,0,0,0,1,0,0,0,0),
 760                              array(0,0,0,0,1,0,0,0,0),
 761                              array(0,0,0,0,1,0,0,0,0),
 762                              array(0,0,0,1,1,1,0,0,0),
 763                          ),
 764                      ),
 765          'J'    =>        array(
 766                          array(
 767                              array(1,1,1,1,1,1,1,1,1),
 768                              array(0,0,0,0,0,1,0,0,0),
 769                              array(0,0,0,0,0,1,0,0,0),
 770                              array(0,0,0,0,0,1,0,0,0),
 771                              array(0,0,0,0,0,1,0,0,0),
 772                              array(0,0,0,0,0,1,0,0,0),
 773                              array(0,0,0,0,0,1,0,0,0),
 774                              array(0,0,0,0,0,1,0,0,0),
 775                              array(0,0,0,0,0,1,0,0,0),
 776                              array(0,0,0,0,0,1,0,0,0),
 777                              array(0,0,0,0,0,1,0,0,0),
 778                              array(1,0,0,0,0,1,0,0,0),
 779                              array(1,0,0,0,0,1,0,0,0),
 780                              array(0,1,0,0,1,0,0,0,0),
 781                              array(0,0,1,1,0,0,0,0,0),
 782                          ),
 783                          array(
 784                              array(1,1,1,1,1,1,1,1,1),
 785                              array(0,0,0,0,0,1,0,0,0),
 786                              array(0,0,0,0,0,1,0,0,0),
 787                              array(0,0,0,0,0,1,0,0,0),
 788                              array(0,0,0,0,0,1,0,0,0),
 789                              array(0,0,0,0,0,1,0,0,0),
 790                              array(0,0,0,0,0,1,0,0,0),
 791                              array(0,0,0,0,0,1,0,0,0),
 792                              array(0,0,0,0,0,1,0,0,0),
 793                              array(0,0,0,0,0,1,0,0,0),
 794                              array(0,0,0,0,0,1,0,0,0),
 795                              array(1,0,0,0,0,1,0,0,0),
 796                              array(1,0,0,0,0,1,0,0,0),
 797                              array(1,1,0,0,1,0,0,0,0),
 798                              array(1,0,1,1,0,0,0,0,0),
 799                          ),
 800                          array(
 801                              array(0,0,0,0,0,0,0,0,0),
 802                              array(0,0,0,0,0,0,0,0,0),
 803                              array(0,0,0,0,0,0,0,0,0),
 804                              array(0,0,0,0,0,0,0,0,0),
 805                              array(0,0,0,0,0,1,0,0,0),
 806                              array(0,0,0,0,0,0,0,0,0),
 807                              array(0,0,0,0,0,1,0,0,0),
 808                              array(0,0,0,0,0,1,0,0,0),
 809                              array(0,0,0,0,0,1,0,0,0),
 810                              array(0,0,0,0,0,1,0,0,0),
 811                              array(0,0,0,0,0,1,0,0,0),
 812                              array(1,0,0,0,0,1,0,0,0),
 813                              array(1,0,0,0,0,1,0,0,0),
 814                              array(0,1,0,0,1,0,0,0,0),
 815                              array(0,0,1,1,0,0,0,0,0),
 816                          ),
 817                      ),
 818          'K'    =>        array(
 819                          array(    // New 'K', supplied by NeoThermic
 820                              array(1,0,0,0,0,0,0,0,1),
 821                              array(1,0,0,0,0,0,0,1,0),
 822                              array(1,0,0,0,0,0,1,0,0),
 823                              array(1,0,0,0,0,1,0,0,0),
 824                              array(1,0,0,0,1,0,0,0,0),
 825                              array(1,0,0,1,0,0,0,0,0),
 826                              array(1,0,1,0,0,0,0,0,0),
 827                              array(1,1,0,0,0,0,0,0,0),
 828                              array(1,0,1,0,0,0,0,0,0),
 829                              array(1,0,0,1,0,0,0,0,0),
 830                              array(1,0,0,0,1,0,0,0,0),
 831                              array(1,0,0,0,0,1,0,0,0),
 832                              array(1,0,0,0,0,0,1,0,0),
 833                              array(1,0,0,0,0,0,0,1,0),
 834                              array(1,0,0,0,0,0,0,0,1),
 835                          ),
 836                          array(
 837                              array(0,1,0,0,0,0,0,0,1),
 838                              array(0,1,0,0,0,0,0,1,0),
 839                              array(0,1,0,0,0,0,1,0,0),
 840                              array(0,1,0,0,0,1,0,0,0),
 841                              array(0,1,0,0,1,0,0,0,0),
 842                              array(0,1,0,1,0,0,0,0,0),
 843                              array(0,1,1,0,0,0,0,0,0),
 844                              array(0,1,0,0,0,0,0,0,0),
 845                              array(0,1,1,0,0,0,0,0,0),
 846                              array(0,1,0,1,0,0,0,0,0),
 847                              array(0,1,0,0,1,0,0,0,0),
 848                              array(0,1,0,0,0,1,0,0,0),
 849                              array(0,1,0,0,0,0,1,0,0),
 850                              array(0,1,0,0,0,0,0,1,0),
 851                              array(1,1,1,0,0,0,1,1,1),
 852                          ),
 853                          array(
 854                              array(0,0,0,0,0,0,0,0,0),
 855                              array(0,1,0,0,0,0,0,0,0),
 856                              array(0,1,0,0,0,0,0,0,0),
 857                              array(0,1,0,0,0,1,0,0,0),
 858                              array(0,1,0,0,1,0,0,0,0),
 859                              array(0,1,0,1,0,0,0,0,0),
 860                              array(0,1,1,0,0,0,0,0,0),
 861                              array(0,1,0,0,0,0,0,0,0),
 862                              array(0,1,1,0,0,0,0,0,0),
 863                              array(0,1,0,1,0,0,0,0,0),
 864                              array(0,1,0,0,1,0,0,0,0),
 865                              array(0,1,0,0,0,1,0,0,0),
 866                              array(0,1,0,0,0,0,1,0,0),
 867                              array(0,1,0,0,0,0,0,1,0),
 868                              array(0,1,0,0,0,0,0,1,0),
 869                          ),
 870                      ),
 871          'L'    =>        array(
 872                          array(
 873                              array(0,0,0,0,0,0,0,0,0),
 874                              array(1,0,0,0,0,0,0,0,0),
 875                              array(1,0,0,0,0,0,0,0,0),
 876                              array(1,0,0,0,0,0,0,0,0),
 877                              array(1,0,0,0,0,0,0,0,0),
 878                              array(1,0,0,0,0,0,0,0,0),
 879                              array(1,0,0,0,0,0,0,0,0),
 880                              array(1,0,0,0,0,0,0,0,0),
 881                              array(1,0,0,0,0,0,0,0,0),
 882                              array(1,0,0,0,0,0,0,0,0),
 883                              array(1,0,0,0,0,0,0,0,0),
 884                              array(1,0,0,0,0,0,0,0,0),
 885                              array(1,0,0,0,0,0,0,0,0),
 886                              array(1,0,0,0,0,0,0,0,0),
 887                              array(1,1,1,1,1,1,1,1,1),
 888                          ),
 889                          array(
 890                              array(0,0,0,0,0,0,0,0,0),
 891                              array(0,1,0,0,0,0,0,0,0),
 892                              array(0,1,0,0,0,0,0,0,0),
 893                              array(0,1,0,0,0,0,0,0,0),
 894                              array(0,1,0,0,0,0,0,0,0),
 895                              array(0,1,0,0,0,0,0,0,0),
 896                              array(0,1,0,0,0,0,0,0,0),
 897                              array(0,1,0,0,0,0,0,0,0),
 898                              array(0,1,0,0,0,0,0,0,0),
 899                              array(0,1,0,0,0,0,0,0,0),
 900                              array(0,1,0,0,0,0,0,0,0),
 901                              array(0,1,0,0,0,0,0,0,0),
 902                              array(0,1,0,0,0,0,0,0,0),
 903                              array(0,1,0,0,0,0,0,0,1),
 904                              array(1,1,1,1,1,1,1,1,1),
 905                          ),
 906                          array(
 907                              array(0,0,0,0,0,0,0,0,0),
 908                              array(0,1,0,0,0,0,0,0,0),
 909                              array(0,1,0,0,0,0,0,0,0),
 910                              array(0,1,0,0,0,0,0,0,0),
 911                              array(0,1,0,0,0,0,0,0,0),
 912                              array(0,1,0,0,0,0,0,0,0),
 913                              array(0,1,0,0,0,0,0,0,0),
 914                              array(0,1,0,0,0,0,0,0,0),
 915                              array(0,1,0,0,0,0,0,0,0),
 916                              array(0,1,0,0,0,0,0,0,0),
 917                              array(0,1,0,0,0,0,0,0,0),
 918                              array(0,1,0,0,0,0,0,0,0),
 919                              array(0,1,0,0,0,0,0,0,0),
 920                              array(0,1,1,0,0,0,0,0,0),
 921                              array(0,0,1,1,1,0,0,0,0),
 922                          ),
 923                      ),
 924          'M'    =>        array(
 925                          array(
 926                              array(1,1,0,0,0,0,0,1,1),
 927                              array(1,1,0,0,0,0,0,1,1),
 928                              array(1,0,1,0,0,0,1,0,1),
 929                              array(1,0,1,0,0,0,1,0,1),
 930                              array(1,0,1,0,0,0,1,0,1),
 931                              array(1,0,0,1,0,1,0,0,1),
 932                              array(1,0,0,1,0,1,0,0,1),
 933                              array(1,0,0,1,0,1,0,0,1),
 934                              array(1,0,0,0,1,0,0,0,1),
 935                              array(1,0,0,0,1,0,0,0,1),
 936                              array(1,0,0,0,0,0,0,0,1),
 937                              array(1,0,0,0,0,0,0,0,1),
 938                              array(1,0,0,0,0,0,0,0,1),
 939                              array(1,0,0,0,0,0,0,0,1),
 940                              array(1,0,0,0,0,0,0,0,1),
 941                          ),
 942                          array(
 943                              array(0,0,0,0,0,0,0,0,0),
 944                              array(0,1,0,0,0,0,0,1,0),
 945                              array(0,1,1,0,0,0,1,1,0),
 946                              array(0,1,1,0,0,0,1,1,0),
 947                              array(0,1,1,0,0,0,1,1,0),
 948                              array(0,1,0,1,0,1,0,1,0),
 949                              array(0,1,0,1,0,1,0,1,0),
 950                              array(0,1,0,1,0,1,0,1,0),
 951                              array(0,1,0,0,1,0,0,1,0),
 952                              array(0,1,0,0,1,0,0,1,0),
 953                              array(0,1,0,0,0,0,0,1,0),
 954                              array(0,1,0,0,0,0,0,1,0),
 955                              array(0,1,0,0,0,0,0,1,0),
 956                              array(0,1,0,0,0,0,0,1,0),
 957                              array(1,1,1,0,0,0,1,1,1),
 958                          ),
 959                          array(
 960                              array(0,0,0,0,0,0,0,0,0),
 961                              array(0,0,0,0,0,0,0,0,0),
 962                              array(0,0,0,0,0,0,0,0,0),
 963                              array(0,0,0,0,0,0,0,0,0),
 964                              array(0,0,0,0,0,0,0,0,0),
 965                              array(0,0,0,0,0,0,0,0,0),
 966                              array(0,1,1,1,0,1,1,1,0),
 967                              array(1,1,0,1,1,1,0,1,1),
 968                              array(1,0,0,0,1,0,0,0,1),
 969                              array(1,0,0,0,1,0,0,0,1),
 970                              array(1,0,0,0,1,0,0,0,1),
 971                              array(1,0,0,0,1,0,0,0,1),
 972                              array(1,0,0,0,1,0,0,0,1),
 973                              array(1,0,0,0,1,0,0,0,1),
 974                              array(1,0,0,0,1,0,0,0,1),
 975                          ),
 976                      ),
 977          'N'    =>        array(
 978                          array(
 979                              array(1,1,0,0,0,0,0,0,1),
 980                              array(1,1,0,0,0,0,0,0,1),
 981                              array(1,0,1,0,0,0,0,0,1),
 982                              array(1,0,1,0,0,0,0,0,1),
 983                              array(1,0,0,1,0,0,0,0,1),
 984                              array(1,0,0,1,0,0,0,0,1),
 985                              array(1,0,0,0,1,0,0,0,1),
 986                              array(1,0,0,0,1,0,0,0,1),
 987                              array(1,0,0,0,1,0,0,0,1),
 988                              array(1,0,0,0,0,1,0,0,1),
 989                              array(1,0,0,0,0,1,0,0,1),
 990                              array(1,0,0,0,0,0,1,0,1),
 991                              array(1,0,0,0,0,0,1,0,1),
 992                              array(1,0,0,0,0,0,0,1,1),
 993                              array(1,0,0,0,0,0,0,1,1),
 994                          ),
 995                          array(
 996                              array(0,0,0,0,0,0,0,0,0),
 997                              array(0,1,0,0,0,0,0,1,0),
 998                              array(0,1,1,0,0,0,0,1,0),
 999                              array(0,1,1,0,0,0,0,1,0),
1000                              array(0,1,1,0,0,0,0,1,0),
1001                              array(0,1,0,1,0,0,0,1,0),
1002                              array(0,1,0,1,0,0,0,1,0),
1003                              array(0,1,0,1,0,0,0,1,0),
1004                              array(0,1,0,0,1,0,0,1,0),
1005                              array(0,1,0,0,1,1,0,1,0),
1006                              array(0,1,0,0,0,1,0,1,0),
1007                              array(0,1,0,0,0,1,1,1,0),
1008                              array(0,1,0,0,0,0,1,1,0),
1009                              array(0,1,0,0,0,0,0,1,0),
1010                              array(1,1,1,0,0,0,1,1,1),
1011                          ),
1012                          array(
1013                              array(0,0,0,0,0,0,0,0,0),
1014                              array(0,0,0,0,0,0,0,0,0),
1015                              array(0,0,0,0,0,0,0,0,0),
1016                              array(0,0,0,0,0,0,0,0,0),
1017                              array(0,0,0,0,0,0,0,0,0),
1018                              array(0,0,0,0,0,0,0,0,0),
1019                              array(0,0,0,0,0,0,0,0,0),
1020                              array(1,0,1,1,1,1,0,0,0),
1021                              array(1,1,1,0,0,1,1,0,0),
1022                              array(1,0,0,0,0,0,1,0,0),
1023                              array(1,0,0,0,0,0,1,0,0),
1024                              array(1,0,0,0,0,0,1,0,0),
1025                              array(1,0,0,0,0,0,1,0,0),
1026                              array(1,0,0,0,0,0,1,0,0),
1027                              array(1,0,0,0,0,0,1,0,0),
1028                          ),
1029                      ),
1030          'O'    =>        array(
1031                          array(
1032                              array(0,0,1,1,1,1,1,0,0),
1033                              array(0,1,0,0,0,0,0,1,0),
1034                              array(1,0,0,0,0,0,0,0,1),
1035                              array(1,0,0,0,0,0,0,0,1),
1036                              array(1,0,0,0,0,0,0,0,1),
1037                              array(1,0,0,0,0,0,0,0,1),
1038                              array(1,0,0,0,0,0,0,0,1),
1039                              array(1,0,0,0,0,0,0,0,1),
1040                              array(1,0,0,0,0,0,0,0,1),
1041                              array(1,0,0,0,0,0,0,0,1),
1042                              array(1,0,0,0,0,0,0,0,1),
1043                              array(1,0,0,0,0,0,0,0,1),
1044                              array(1,0,0,0,0,0,0,0,1),
1045                              array(0,1,0,0,0,0,0,1,0),
1046                              array(0,0,1,1,1,1,1,0,0),
1047                          ),
1048                          array(
1049                              array(0,0,1,1,1,1,1,0,0),
1050                              array(0,1,0,0,0,0,0,1,0),
1051                              array(1,1,0,0,0,0,0,1,1),
1052                              array(1,1,0,0,0,0,0,1,1),
1053                              array(1,1,0,0,0,0,0,1,1),
1054                              array(1,1,0,0,0,0,0,1,1),
1055                              array(1,1,0,0,0,0,0,1,1),
1056                              array(1,1,0,0,0,0,0,1,1),
1057                              array(1,1,0,0,0,0,0,1,1),
1058                              array(1,1,0,0,0,0,0,1,1),
1059                              array(1,1,0,0,0,0,0,1,1),
1060                              array(1,1,0,0,0,0,0,1,1),
1061                              array(1,1,0,0,0,0,0,1,1),
1062                              array(0,1,0,0,0,0,0,1,0),
1063                              array(0,0,1,1,1,1,1,0,0),
1064                          ),
1065                          array(
1066                              array(0,0,0,0,0,0,0,0,0),
1067                              array(0,0,0,0,0,0,0,0,0),
1068                              array(0,0,0,0,0,0,0,0,0),
1069                              array(0,0,0,0,0,0,0,0,0),
1070                              array(0,0,0,0,0,0,0,0,0),
1071                              array(0,0,0,0,0,0,0,0,0),
1072                              array(0,0,0,0,0,0,0,0,0),
1073                              array(0,1,1,1,1,1,0,0,0),
1074                              array(1,1,1,0,0,1,1,0,0),
1075                              array(1,0,0,0,0,0,1,0,0),
1076                              array(1,0,0,0,0,0,1,0,0),
1077                              array(1,0,0,0,0,0,1,0,0),
1078                              array(1,0,0,0,0,0,1,0,0),
1079                              array(1,1,0,0,0,1,1,0,0),
1080                              array(0,1,1,1,1,1,0,0,0),
1081                          ),
1082                      ),
1083          'P'    =>        array(
1084                          array(
1085                              array(1,1,1,1,1,1,1,0,0),
1086                              array(1,0,0,0,0,0,0,1,0),
1087                              array(1,0,0,0,0,0,0,0,1),
1088                              array(1,0,0,0,0,0,0,0,1),
1089                              array(1,0,0,0,0,0,0,0,1),
1090                              array(1,0,0,0,0,0,0,0,1),
1091                              array(1,0,0,0,0,0,0,1,0),
1092                              array(1,1,1,1,1,1,1,0,0),
1093                              array(1,0,0,0,0,0,0,0,0),
1094                              array(1,0,0,0,0,0,0,0,0),
1095                              array(1,0,0,0,0,0,0,0,0),
1096                              array(1,0,0,0,0,0,0,0,0),
1097                              array(1,0,0,0,0,0,0,0,0),
1098                              array(1,0,0,0,0,0,0,0,0),
1099                              array(1,0,0,0,0,0,0,0,0),
1100                          ),
1101                          array(
1102                              array(1,1,1,1,1,1,1,0,0),
1103                              array(0,1,0,0,0,0,0,1,0),
1104                              array(0,1,0,0,0,0,0,0,1),
1105                              array(0,1,0,0,0,0,0,0,1),
1106                              array(0,1,0,0,0,0,0,0,1),
1107                              array(0,1,0,0,0,0,0,0,1),
1108                              array(0,1,0,0,0,0,0,1,0),
1109                              array(1,1,1,1,1,1,1,0,0),
1110                              array(0,1,0,0,0,0,0,0,0),
1111                              array(0,1,0,0,0,0,0,0,0),
1112                              array(0,1,0,0,0,0,0,0,0),
1113                              array(0,1,0,0,0,0,0,0,0),
1114                              array(0,1,0,0,0,0,0,0,0),
1115                              array(0,1,0,0,0,0,0,0,0),
1116                              array(1,1,1,0,0,0,0,0,0),
1117                          ),
1118                          array(
1119                              array(0,0,0,0,0,0,0,0,0),
1120                              array(0,0,0,0,0,0,0,0,0),
1121                              array(1,0,0,0,0,0,0,0,0),
1122                              array(1,0,1,1,0,0,0,0,0),
1123                              array(1,1,0,1,1,0,0,0,0),
1124                              array(1,0,0,0,1,0,0,0,0),
1125                              array(1,0,0,0,1,0,0,0,0),
1126                              array(1,0,0,1,1,0,0,0,0),
1127                              array(1,1,1,1,0,0,0,0,0),
1128                              array(1,0,0,0,0,0,0,0,0),
1129                              array(1,0,0,0,0,0,0,0,0),
1130                              array(1,0,0,0,0,0,0,0,0),
1131                              array(1,0,0,0,0,0,0,0,0),
1132                              array(1,0,0,0,0,0,0,0,0),
1133                              array(1,0,0,0,0,0,0,0,0),
1134                          ),
1135                      ),
1136          'Q'    =>        array(
1137                          array(
1138                              array(0,0,1,1,1,1,1,0,0),
1139                              array(0,1,0,0,0,0,0,1,0),
1140                              array(1,0,0,0,0,0,0,0,1),
1141                              array(1,0,0,0,0,0,0,0,1),
1142                              array(1,0,0,0,0,0,0,0,1),
1143                              array(1,0,0,0,0,0,0,0,1),
1144                              array(1,0,0,0,0,0,0,0,1),
1145                              array(1,0,0,0,0,0,0,0,1),
1146                              array(1,0,0,0,0,0,0,0,1),
1147                              array(1,0,0,0,0,0,0,0,1),
1148                              array(1,0,0,0,0,0,0,0,1),
1149                              array(1,0,0,0,0,1,0,0,1),
1150                              array(1,0,0,0,0,0,1,0,1),
1151                              array(0,1,0,0,0,0,0,1,0),
1152                              array(0,0,1,1,1,1,1,0,1),
1153                          ),
1154                          array(
1155                              array(0,0,1,1,1,1,1,0,0),
1156                              array(0,1,0,0,0,0,0,1,0),
1157                              array(1,0,0,0,0,0,0,0,1),
1158                              array(1,0,0,0,0,0,0,0,1),
1159                              array(1,0,0,0,0,0,0,0,1),
1160                              array(1,0,0,0,0,0,0,0,1),
1161                              array(1,0,0,0,0,0,0,0,1),
1162                              array(1,0,0,0,0,0,0,0,1),
1163                              array(1,0,0,0,0,0,0,0,1),
1164                              array(1,0,0,0,1,0,0,0,1),
1165                              array(1,1,0,0,1,1,0,1,1),
1166                              array(0,1,1,1,1,1,1,1,0),
1167                              array(0,0,0,0,0,0,1,1,0),
1168                              array(0,0,0,0,0,0,0,1,1),
1169                              array(0,0,0,0,0,0,0,0,1),
1170                          ),
1171                          array(
1172                              array(0,0,0,0,0,0,0,0,0),
1173                              array(0,0,0,0,0,0,0,0,0),
1174                              array(0,0,0,0,0,0,0,0,0),
1175                              array(0,0,0,0,0,1,1,1,1),
1176                              array(0,0,0,0,1,1,0,0,1),
1177                              array(0,0,0,0,1,0,0,0,1),
1178                              array(0,0,0,0,1,0,0,0,1),
1179                              array(0,0,0,0,1,1,0,1,1),
1180                              array(0,0,0,0,0,1,1,0,1),
1181                              array(0,0,0,0,0,0,0,0,1),
1182                              array(0,0,0,0,0,0,0,0,1),
1183                              array(0,0,0,0,0,0,0,0,1),
1184                              array(0,0,0,0,0,0,0,0,1),
1185                              array(0,0,0,0,0,0,0,0,1),
1186                              array(0,0,0,0,0,0,0,0,1),
1187                          ),
1188                      ),
1189          'R'    =>        array(
1190                          array(
1191                              array(1,1,1,1,1,1,1,0,0),
1192                              array(1,0,0,0,0,0,0,1,0),
1193                              array(1,0,0,0,0,0,0,0,1),
1194                              array(1,0,0,0,0,0,0,0,1),
1195                              array(1,0,0,0,0,0,0,0,1),
1196                              array(1,0,0,0,0,0,0,0,1),
1197                              array(1,0,0,0,0,0,0,1,0),
1198                              array(1,1,1,1,1,1,1,0,0),
1199                              array(1,1,1,0,0,0,0,0,0),
1200                              array(1,0,0,1,0,0,0,0,0),
1201                              array(1,0,0,0,1,0,0,0,0),
1202                              array(1,0,0,0,0,1,0,0,0),
1203                              array(1,0,0,0,0,0,1,0,0),
1204                              array(1,0,0,0,0,0,0,1,0),
1205                              array(1,0,0,0,0,0,0,0,1),
1206                          ),
1207                          array(
1208                              array(1,1,1,1,1,1,1,0,0),
1209                              array(0,1,0,0,0,0,0,1,0),
1210                              array(0,1,0,0,0,0,0,0,1),
1211                              array(0,1,0,0,0,0,0,0,1),
1212                              array(0,1,0,0,0,0,0,0,1),
1213                              array(0,1,0,0,0,0,0,0,1),
1214                              array(0,1,0,0,0,0,0,1,0),
1215                              array(1,1,1,1,1,1,1,0,0),
1216                              array(0,1,1,0,0,0,0,0,0),
1217                              array(0,1,1,1,0,0,0,0,0),
1218                              array(0,1,0,1,1,0,0,0,0),
1219                              array(0,1,0,0,1,1,0,0,0),
1220                              array(0,1,0,0,0,1,1,0,0),
1221                              array(0,1,0,0,0,0,1,1,0),
1222                              array(1,1,1,0,0,0,1,1,1),
1223                          ),
1224                          array(
1225                              array(0,0,0,0,0,0,0,0,0),
1226                              array(0,0,0,0,0,0,0,0,0),
1227                              array(0,0,0,0,0,0,0,0,0),
1228                              array(0,0,0,0,0,0,0,0,0),
1229                              array(0,0,0,0,0,0,0,0,0),
1230                              array(0,0,0,0,0,0,0,0,0),
1231                              array(1,0,0,0,0,0,0,0,0),
1232                              array(1,1,1,1,1,0,0,0,0),
1233                              array(1,1,0,0,1,1,0,0,0),
1234                              array(1,0,0,0,0,0,0,0,0),
1235                              array(1,0,0,0,0,0,0,0,0),
1236                              array(1,0,0,0,0,0,0,0,0),
1237                              array(1,0,0,0,0,0,0,0,0),
1238                              array(1,0,0,0,0,0,0,0,0),
1239                              array(1,0,0,0,0,0,0,0,0),
1240                          ),
1241                      ),
1242          'S'    =>        array(
1243                          array(
1244                              array(0,0,1,1,1,1,1,0,0),
1245                              array(0,1,0,0,0,0,0,1,0),
1246                              array(1,0,0,0,0,0,0,0,1),
1247                              array(1,0,0,0,0,0,0,0,0),
1248                              array(1,0,0,0,0,0,0,0,0),
1249                              array(1,0,0,0,0,0,0,0,0),
1250                              array(0,1,0,0,0,0,0,0,0),
1251                              array(0,0,1,1,1,1,1,0,0),
1252                              array(0,0,0,0,0,0,0,1,0),
1253                              array(0,0,0,0,0,0,0,0,1),
1254                              array(0,0,0,0,0,0,0,0,1),
1255                              array(0,0,0,0,0,0,0,0,1),
1256                              array(1,0,0,0,0,0,0,0,1),
1257                              array(0,1,0,0,0,0,0,1,0),
1258                              array(0,0,1,1,1,1,1,0,0),
1259                          ),
1260                          array(
1261                              array(0,0,1,1,1,1,1,0,1),
1262                              array(0,1,0,0,0,0,0,1,1),
1263                              array(1,0,0,0,0,0,0,0,1),
1264                              array(1,0,0,0,0,0,0,0,1),
1265                              array(1,0,0,0,0,0,0,0,0),
1266                              array(1,0,0,0,0,0,0,0,0),
1267                              array(0,1,0,0,0,0,0,0,0),
1268                              array(0,0,1,1,1,1,1,0,0),
1269                              array(0,0,0,0,0,0,0,1,0),
1270                              array(0,0,0,0,0,0,0,0,1),
1271                              array(1,0,0,0,0,0,0,0,1),
1272                              array(1,0,0,0,0,0,0,0,1),
1273                              array(1,0,0,0,0,0,0,0,1),
1274                              array(1,1,0,0,0,0,0,1,0),
1275                              array(1,0,1,1,1,1,1,0,0),
1276                          ),
1277                          array(
1278                              array(0,0,0,0,0,0,0,0,0),
1279                              array(0,0,0,0,0,0,0,0,0),
1280                              array(0,0,0,0,0,0,0,0,0),
1281                              array(0,0,0,0,0,0,0,0,0),
1282                              array(0,0,0,0,0,0,0,0,0),
1283                              array(0,0,0,0,0,0,0,0,0),
1284                              array(0,0,0,0,0,0,0,0,0),
1285                              array(0,1,1,1,1,0,0,0,0),
1286                              array(1,0,0,0,0,1,0,0,0),
1287                              array(1,0,0,0,0,0,0,0,0),
1288                              array(1,1,0,0,0,0,0,0,0),
1289                              array(0,1,1,1,1,0,0,0,0),
1290                              array(0,0,0,0,0,1,0,0,0),
1291                              array(1,0,0,0,1,1,0,0,0),
1292                              array(0,1,1,1,1,0,0,0,0),
1293                          ),
1294                      ),
1295          'T'    =>        array(
1296                          array(
1297                              array(1,1,1,1,1,1,1,1,1),
1298                              array(0,0,0,0,1,0,0,0,0),
1299                              array(0,0,0,0,1,0,0,0,0),
1300                              array(0,0,0,0,1,0,0,0,0),
1301                              array(0,0,0,0,1,0,0,0,0),
1302                              array(0,0,0,0,1,0,0,0,0),
1303                              array(0,0,0,0,1,0,0,0,0),
1304                              array(0,0,0,0,1,0,0,0,0),
1305                              array(0,0,0,0,1,0,0,0,0),
1306                              array(0,0,0,0,1,0,0,0,0),
1307                              array(0,0,0,0,1,0,0,0,0),
1308                              array(0,0,0,0,1,0,0,0,0),
1309                              array(0,0,0,0,1,0,0,0,0),
1310                              array(0,0,0,0,1,0,0,0,0),
1311                              array(0,0,0,0,1,0,0,0,0),
1312                          ),
1313                          array(
1314                              array(1,1,1,1,1,1,1,1,1),
1315                              array(1,0,0,0,1,0,0,0,1),
1316                              array(0,0,0,0,1,0,0,0,0),
1317                              array(0,0,0,0,1,0,0,0,0),
1318                              array(0,0,0,0,1,0,0,0,0),
1319                              array(0,0,0,0,1,0,0,0,0),
1320                              array(0,0,0,0,1,0,0,0,0),
1321                              array(0,0,0,0,1,0,0,0,0),
1322                              array(0,0,0,0,1,0,0,0,0),
1323                              array(0,0,0,0,1,0,0,0,0),
1324                              array(0,0,0,0,1,0,0,0,0),
1325                              array(0,0,0,0,1,0,0,0,0),
1326                              array(0,0,0,0,1,0,0,0,0),
1327                              array(0,0,0,0,1,0,0,0,0),
1328                              array(0,0,0,1,1,1,0,0,0),
1329                          ),
1330                          array(
1331                              array(0,0,0,0,1,0,0,0,0),
1332                              array(0,0,0,0,1,0,0,0,0),
1333                              array(0,0,0,0,1,0,0,0,0),
1334                              array(0,0,1,1,1,1,1,1,0),
1335                              array(0,0,0,0,1,0,0,0,0),
1336                              array(0,0,0,0,1,0,0,0,0),
1337                              array(0,0,0,0,1,0,0,0,0),
1338                              array(0,0,0,0,1,0,0,0,0),
1339                              array(0,0,0,0,1,0,0,0,0),
1340                              array(0,0,0,0,1,0,0,0,0),
1341                              array(0,0,0,0,1,0,0,0,0),
1342                              array(0,0,0,0,1,0,0,0,0),
1343                              array(0,0,0,0,1,0,0,0,0),
1344                              array(0,0,0,0,1,1,0,0,0),
1345                              array(0,0,0,0,0,1,1,1,0),
1346                          ),
1347                      ),
1348          'U'    =>        array(
1349                          array(
1350                              array(1,0,0,0,0,0,0,0,1),
1351                              array(1,0,0,0,0,0,0,0,1),
1352                              array(1,0,0,0,0,0,0,0,1),
1353                              array(1,0,0,0,0,0,0,0,1),
1354                              array(1,0,0,0,0,0,0,0,1),
1355                              array(1,0,0,0,0,0,0,0,1),
1356                              array(1,0,0,0,0,0,0,0,1),
1357                              array(1,0,0,0,0,0,0,0,1),
1358                              array(1,0,0,0,0,0,0,0,1),
1359                              array(1,0,0,0,0,0,0,0,1),
1360                              array(1,0,0,0,0,0,0,0,1),
1361                              array(1,0,0,0,0,0,0,0,1),
1362                              array(1,0,0,0,0,0,0,0,1),
1363                              array(0,1,0,0,0,0,0,1,0),
1364                              array(0,0,1,1,1,1,1,0,0),
1365                          ),
1366                          array(
1367                              array(1,0,0,0,0,0,0,0,0),
1368                              array(1,1,1,0,0,0,1,1,1),
1369                              array(0,1,0,0,0,0,0,1,0),
1370                              array(0,1,0,0,0,0,0,1,0),
1371                              array(0,1,0,0,0,0,0,1,0),
1372                              array(0,1,0,0,0,0,0,1,0),
1373                              array(0,1,0,0,0,0,0,1,0),
1374                              array(0,1,0,0,0,0,0,1,0),
1375                              array(0,1,0,0,0,0,0,1,0),
1376                              array(0,1,0,0,0,0,0,1,0),
1377                              array(0,1,0,0,0,0,0,1,0),
1378                              array(0,1,0,0,0,0,0,1,0),
1379                              array(0,1,0,0,0,0,0,1,0),
1380                              array(0,1,1,0,0,0,1,1,0),
1381                              array(0,0,1,1,1,1,1,0,0),
1382                          ),
1383                          array(
1384                              array(0,0,0,0,0,0,0,0,0),
1385                              array(0,0,0,0,0,0,0,0,0),
1386                              array(0,0,0,0,0,0,0,0,0),
1387                              array(0,0,0,0,0,0,0,0,0),
1388                              array(0,0,0,0,0,0,0,0,0),
1389                              array(0,0,0,0,0,0,0,0,0),
1390                              array(0,0,0,0,0,0,0,0,0),
1391                              array(0,0,1,0,0,0,0,0,1),
1392                              array(0,0,1,0,0,0,0,0,1),
1393                              array(0,0,1,0,0,0,0,0,1),
1394                              array(0,0,1,0,0,0,0,0,1),
1395                              array(0,0,1,0,0,0,0,0,1),
1396                              array(0,0,1,0,0,0,0,1,1),
1397                              array(0,0,1,1,0,0,1,1,1),
1398                              array(0,0,0,1,1,1,1,0,1),
1399                          ),
1400                      ),
1401          'V'    =>        array(
1402                          array(
1403                              array(1,0,0,0,0,0,0,0,1),
1404                              array(1,0,0,0,0,0,0,0,1),
1405                              array(1,0,0,0,0,0,0,0,1),
1406                              array(0,1,0,0,0,0,0,1,0),
1407                              array(0,1,0,0,0,0,0,1,0),
1408                              array(0,1,0,0,0,0,0,1,0),
1409                              array(0,0,1,0,0,0,1,0,0),
1410                              array(0,0,1,0,0,0,1,0,0),
1411                              array(0,0,1,0,0,0,1,0,0),
1412                              array(0,0,1,0,0,0,1,0,0),
1413                              array(0,0,0,1,0,1,0,0,0),
1414                              array(0,0,0,1,0,1,0,0,0),
1415                              array(0,0,0,1,0,1,0,0,0),
1416                              array(0,0,0,0,1,0,0,0,0),
1417                              array(0,0,0,0,1,0,0,0,0),
1418                          ),
1419                          array(
1420                              array(0,0,0,0,0,0,0,0,0),
1421                              array(0,0,0,0,0,0,0,0,0),
1422                              array(0,0,0,0,0,0,0,0,0),
1423                              array(1,1,1,0,0,0,1,1,1),
1424                              array(0,1,0,0,0,0,0,1,0),
1425                              array(0,1,0,0,0,0,0,1,0),
1426                              array(0,0,1,0,0,0,1,0,0),
1427                              array(0,0,1,0,0,0,1,0,0),
1428                              array(0,0,1,0,0,0,1,0,0),
1429                              array(0,0,1,0,0,0,1,0,0),
1430                              array(0,0,0,1,0,1,0,0,0),
1431                              array(0,0,0,1,0,1,0,0,0),
1432                              array(0,0,0,1,0,1,0,0,0),
1433                              array(0,0,0,0,1,0,0,0,0),
1434                              array(0,0,0,0,1,0,0,0,0),
1435                          ),
1436                          array(
1437                              array(0,0,0,0,0,0,0,0,0),
1438                              array(0,0,0,0,0,0,0,0,0),
1439                              array(0,0,0,0,0,0,0,0,0),
1440                              array(0,0,0,0,0,0,0,0,0),
1441                              array(0,0,0,0,0,0,0,0,0),
1442                              array(0,0,0,0,0,0,0,0,0),
1443                              array(0,0,1,0,0,0,1,0,0),
1444                              array(0,0,1,0,0,0,1,0,0),
1445                              array(0,0,1,0,0,0,1,0,0),
1446                              array(0,0,1,0,0,0,1,0,0),
1447                              array(0,0,0,1,0,1,0,0,0),
1448                              array(0,0,0,1,0,1,0,0,0),
1449                              array(0,0,0,1,0,1,0,0,0),
1450                              array(0,0,0,0,1,0,0,0,0),
1451                              array(0,0,0,0,1,0,0,0,0),
1452                          ),
1453                      ),
1454          'W'    =>        array(
1455                          array(
1456                              array(1,0,0,0,0,0,0,0,1),
1457                              array(1,0,0,0,0,0,0,0,1),
1458                              array(1,0,0,0,0,0,0,0,1),
1459                              array(1,0,0,0,0,0,0,0,1),
1460                              array(1,0,0,0,0,0,0,0,1),
1461                              array(1,0,0,0,1,0,0,0,1),
1462                              array(1,0,0,0,1,0,0,0,1),
1463                              array(1,0,0,1,0,1,0,0,1),
1464                              array(1,0,0,1,0,1,0,0,1),
1465                              array(1,0,0,1,0,1,0,0,1),
1466                              array(1,0,1,0,0,0,1,0,1),
1467                              array(1,0,1,0,0,0,1,0,1),
1468                              array(1,0,1,0,0,0,1,0,1),
1469                              array(1,1,0,0,0,0,0,1,1),
1470                              array(1,1,0,0,0,0,0,1,1),
1471                          ),
1472                          array(
1473                              array(0,0,0,0,0,0,0,0,0),
1474                              array(0,0,0,0,0,0,0,0,0),
1475                              array(1,1,1,0,0,0,1,1,1),
1476                              array(0,1,0,0,0,0,0,1,0),
1477                              array(0,1,0,0,0,0,0,1,0),
1478                              array(0,1,0,0,0,0,0,1,0),
1479                              array(0,1,0,0,0,0,0,1,0),
1480                              array(0,1,0,0,1,0,0,1,0),
1481                              array(0,1,0,0,1,0,0,1,0),
1482                              array(0,1,0,1,1,1,0,1,0),
1483                              array(0,1,0,1,0,1,0,1,0),
1484                              array(0,1,1,1,0,1,1,1,0),
1485                              array(0,1,1,0,0,0,1,1,0),
1486                              array(0,1,0,0,0,0,0,1,0),
1487                              array(0,0,0,0,0,0,0,0,0),
1488                          ),
1489                          array(
1490                              array(0,0,0,0,0,0,0,0,0),
1491                              array(0,0,0,0,0,0,0,0,0),
1492                              array(0,0,0,0,0,0,0,0,0),
1493                              array(0,0,0,0,0,0,0,0,0),
1494                              array(0,0,0,0,0,0,0,0,0),
1495                              array(0,0,0,0,0,0,0,0,0),
1496                              array(0,1,0,0,0,0,0,1,0),
1497                              array(0,1,0,0,1,0,0,1,0),
1498                              array(0,1,0,0,1,0,0,1,0),
1499                              array(0,1,0,1,1,1,0,1,0),
1500                              array(0,1,0,1,0,1,0,1,0),
1501                              array(0,1,1,1,0,1,1,1,0),
1502                              array(0,1,1,0,0,0,1,1,0),
1503                              array(0,1,0,0,0,0,0,1,0),
1504                              array(0,0,0,0,0,0,0,0,0),
1505                          ),
1506                      ),
1507          'X'    =>        array(
1508                          array(
1509                              array(1,0,0,0,0,0,0,0,1),
1510                              array(1,0,0,0,0,0,0,0,1),
1511                              array(0,1,0,0,0,0,0,1,0),
1512                              array(0,1,0,0,0,0,0,1,0),
1513                              array(0,0,1,0,0,0,1,0,0),
1514                              array(0,0,0,1,0,1,0,0,0),
1515                              array(0,0,0,1,0,1,0,0,0),
1516                              array(0,0,0,0,1,0,0,0,0),
1517                              array(0,0,0,1,0,1,0,0,0),
1518                              array(0,0,0,1,0,1,0,0,0),
1519                              array(0,0,1,0,0,0,1,0,0),
1520                              array(0,1,0,0,0,0,1,0,0),
1521                              array(0,1,0,0,0,0,0,1,0),
1522                              array(1,0,0,0,0,0,0,0,1),
1523                              array(1,0,0,0,0,0,0,0,1),
1524                          ),
1525                          array(
1526                              array(0,0,0,0,0,0,0,0,0),
1527                              array(1,1,1,0,0,0,1,1,1),
1528                              array(0,1,0,0,0,0,0,1,0),
1529                              array(0,1,0,0,0,0,0,1,0),
1530                              array(0,0,1,0,0,0,1,0,0),
1531                              array(0,0,0,1,0,1,0,0,0),
1532                              array(0,0,0,1,0,1,0,0,0),
1533                              array(0,0,0,0,1,0,0,0,0),
1534                              array(0,0,0,1,0,1,0,0,0),
1535                              array(0,0,0,1,0,1,0,0,0),
1536                              array(0,0,1,0,0,0,1,0,0),
1537                              array(0,1,0,0,0,0,1,0,0),
1538                              array(0,1,0,0,0,0,0,1,0),
1539                              array(1,1,1,0,0,0,1,1,1),
1540                              array(0,0,0,0,0,0,0,0,0),
1541                          ),
1542                          array(
1543                              array(0,0,0,0,0,0,0,0,0),
1544                              array(0,0,0,0,0,0,0,0,0),
1545                              array(0,0,0,0,0,0,0,0,0),
1546                              array(0,0,0,0,0,0,0,0,0),
1547                              array(0,0,0,0,0,0,0,0,0),
1548                              array(0,0,0,0,0,0,0,0,0),
1549                              array(0,0,0,0,0,0,0,0,0),
1550                              array(0,1,0,0,0,0,0,1,0),
1551                              array(0,1,1,0,0,0,1,1,0),
1552                              array(0,0,1,1,0,1,1,0,0),
1553                              array(0,0,0,1,1,1,0,0,0),
1554                              array(0,0,0,1,1,1,0,0,0),
1555                              array(0,0,1,1,0,1,1,0,0),
1556                              array(0,1,1,0,0,0,1,1,0),
1557                              array(0,0,0,0,0,0,0,0,0),
1558                          ),
1559                      ),
1560          'Y'    =>        array(
1561                          array(
1562                              array(1,0,0,0,0,0,0,0,1),
1563                              array(1,0,0,0,0,0,0,0,1),
1564                              array(0,1,0,0,0,0,0,1,0),
1565                              array(0,1,0,0,0,0,0,1,0),
1566                              array(0,0,1,0,0,0,1,0,0),
1567                              array(0,0,1,0,0,0,1,0,0),
1568                              array(0,0,0,1,0,1,0,0,0),
1569                              array(0,0,0,0,1,0,0,0,0),
1570                              array(0,0,0,0,1,0,0,0,0),
1571                              array(0,0,0,0,1,0,0,0,0),
1572                              array(0,0,0,0,1,0,0,0,0),
1573                              array(0,0,0,0,1,0,0,0,0),
1574                              array(0,0,0,0,1,0,0,0,0),
1575                              array(0,0,0,0,1,0,0,0,0),
1576                              array(0,0,0,0,1,0,0,0,0),
1577                          ),
1578                          array(
1579                              array(0,0,0,0,0,0,0,0,0),
1580                              array(1,1,1,0,0,0,1,1,1),
1581                              array(0,1,0,0,0,0,0,1,0),
1582                              array(0,1,0,0,0,0,0,1,0),
1583                              array(0,0,1,0,0,0,1,0,0),
1584                              array(0,0,1,0,0,0,1,0,0),
1585                              array(0,0,0,1,0,1,0,0,0),
1586                              array(0,0,0,0,1,0,0,0,0),
1587                              array(0,0,0,0,1,0,0,0,0),
1588                              array(0,0,0,0,1,0,0,0,0),
1589                              array(0,0,0,0,1,0,0,0,0),
1590                              array(0,0,0,0,1,0,0,0,0),
1591                              array(0,0,0,0,1,0,0,0,0),
1592                              array(0,0,0,0,1,0,0,0,0),
1593                              array(0,0,0,1,1,1,0,0,0),
1594                          ),
1595                          array(
1596                              array(0,0,0,0,0,0,0,0,0),
1597                              array(0,0,0,0,0,0,0,0,0),
1598                              array(0,0,0,0,0,0,0,0,0),
1599                              array(0,0,0,0,0,0,0,0,0),
1600                              array(0,0,0,1,0,0,0,0,1),
1601                              array(0,0,0,1,1,0,0,0,1),
1602                              array(0,0,0,0,1,0,0,1,1),
1603                              array(0,0,0,0,1,1,0,1,0),
1604                              array(0,0,0,0,0,1,1,1,0),
1605                              array(0,0,0,0,0,0,1,0,0),
1606                              array(0,0,0,0,0,1,1,0,0),
1607                              array(0,0,0,0,0,1,0,0,0),
1608                              array(0,0,0,0,1,1,0,0,0),
1609                              array(0,0,1,1,1,0,0,0,0),
1610                              array(0,0,0,0,0,0,0,0,0),
1611                          ),
1612                      ),
1613          'Z'    =>        array(
1614                          array(
1615                              array(1,1,1,1,1,1,1,1,1),
1616                              array(1,0,0,0,0,0,0,0,1),
1617                              array(0,0,0,0,0,0,0,0,1),
1618                              array(0,0,0,0,0,0,0,1,0),
1619                              array(0,0,0,0,0,0,1,0,0),
1620                              array(0,0,0,0,0,1,0,0,0),
1621                              array(0,0,0,0,0,1,0,0,0),
1622                              array(0,0,0,0,1,0,0,0,0),
1623                              array(0,0,0,1,0,0,0,0,0),
1624                              array(0,0,0,1,0,0,0,0,0),
1625                              array(0,0,1,0,0,0,0,0,0),
1626                              array(0,1,0,0,0,0,0,0,0),
1627                              array(1,0,0,0,0,0,0,0,0),
1628                              array(1,0,0,0,0,0,0,0,1),
1629                              array(1,1,1,1,1,1,1,1,1),
1630                          ),
1631                          array(
1632                              array(1,1,1,1,1,1,1,1,1),
1633                              array(0,0,0,0,0,0,0,0,1),
1634                              array(0,0,0,0,0,0,0,0,1),
1635                              array(0,0,0,0,0,0,0,1,0),
1636                              array(0,0,0,0,0,0,1,0,0),
1637                              array(0,0,0,0,0,1,0,0,0),
1638                              array(0,0,0,0,0,1,0,0,0),
1639                              array(0,0,1,1,1,1,1,0,0),
1640                              array(0,0,0,1,0,0,0,0,0),
1641                              array(0,0,0,1,0,0,0,0,0),
1642                              array(0,0,1,0,0,0,0,0,0),
1643                              array(0,1,0,0,0,0,0,0,0),
1644                              array(1,0,0,0,0,0,0,0,0),
1645                              array(1,0,0,0,0,0,0,0,0),
1646                              array(1,1,1,1,1,1,1,1,1),
1647                          ),
1648                          array(
1649                              array(0,0,0,0,0,0,0,0,0),
1650                              array(0,0,0,0,0,0,0,0,0),
1651                              array(0,0,0,0,0,0,0,0,0),
1652                              array(0,0,0,0,0,0,0,0,0),
1653                              array(0,0,0,0,0,0,0,0,0),
1654                              array(0,0,0,0,0,0,0,0,0),
1655                              array(0,0,0,0,0,0,0,0,0),
1656                              array(0,0,0,0,0,0,0,0,0),
1657                              array(0,1,1,1,1,1,1,1,0),
1658                              array(0,0,0,0,0,1,1,0,0),
1659                              array(0,0,0,0,1,1,0,0,0),
1660                              array(0,0,0,1,1,0,0,0,0),
1661                              array(0,0,1,1,0,0,0,0,0),
1662                              array(0,0,1,0,0,0,0,0,0),
1663                              array(0,1,1,1,1,1,1,1,0),
1664                          ),
1665                      ),
1666                  );
1667          return array(
1668              'width'        => 9,
1669              'height'    => 15,
1670              'data'        => array(
1671  
1672              'A' =>    $chars['A'][mt_rand(0, min(sizeof($chars['A']), $config['captcha_gd_fonts']) -1)],
1673              'B' =>    $chars['B'][mt_rand(0, min(sizeof($chars['B']), $config['captcha_gd_fonts']) -1)],
1674              'C' =>    $chars['C'][mt_rand(0, min(sizeof($chars['C']), $config['captcha_gd_fonts']) -1)],
1675              'D' =>    $chars['D'][mt_rand(0, min(sizeof($chars['D']), $config['captcha_gd_fonts']) -1)],
1676              'E' =>    $chars['E'][mt_rand(0, min(sizeof($chars['E']), $config['captcha_gd_fonts']) -1)],
1677              'F' =>    $chars['F'][mt_rand(0, min(sizeof($chars['F']), $config['captcha_gd_fonts']) -1)],
1678              'G' =>    $chars['G'][mt_rand(0, min(sizeof($chars['G']), $config['captcha_gd_fonts']) -1)],
1679              'H' =>    $chars['H'][mt_rand(0, min(sizeof($chars['H']), $config['captcha_gd_fonts']) -1)],
1680              'I' =>    $chars['I'][mt_rand(0, min(sizeof($chars['I']), $config['captcha_gd_fonts']) -1)],
1681              'J' =>    $chars['J'][mt_rand(0, min(sizeof($chars['J']), $config['captcha_gd_fonts']) -1)],
1682              'K' =>    $chars['K'][mt_rand(0, min(sizeof($chars['K']), $config['captcha_gd_fonts']) -1)],
1683              'L' =>    $chars['L'][mt_rand(0, min(sizeof($chars['L']), $config['captcha_gd_fonts']) -1)],
1684              'M' =>    $chars['M'][mt_rand(0, min(sizeof($chars['M']), $config['captcha_gd_fonts']) -1)],  
1685              'N' =>    $chars['N'][mt_rand(0, min(sizeof($chars['N']), $config['captcha_gd_fonts']) -1)],
1686              'O' =>    $chars['O'][mt_rand(0, min(sizeof($chars['O']), $config['captcha_gd_fonts']) -1)],
1687              'P' =>    $chars['P'][mt_rand(0, min(sizeof($chars['P']), $config['captcha_gd_fonts']) -1)],
1688              'Q' =>    $chars['Q'][mt_rand(0, min(sizeof($chars['Q']), $config['captcha_gd_fonts']) -1)],
1689              'R' =>    $chars['R'][mt_rand(0, min(sizeof($chars['R']), $config['captcha_gd_fonts']) -1)],
1690              'S' =>    $chars['S'][mt_rand(0, min(sizeof($chars['S']), $config['captcha_gd_fonts']) -1)],
1691              'T' =>    $chars['T'][mt_rand(0, min(sizeof($chars['T']), $config['captcha_gd_fonts']) -1)],
1692              'U' =>    $chars['U'][mt_rand(0, min(sizeof($chars['U']), $config['captcha_gd_fonts']) -1)],
1693              'V' =>    $chars['V'][mt_rand(0, min(sizeof($chars['V']), $config['captcha_gd_fonts']) -1)],
1694              'W' =>    $chars['W'][mt_rand(0, min(sizeof($chars['W']), $config['captcha_gd_fonts']) -1)],
1695              'X' =>    $chars['X'][mt_rand(0, min(sizeof($chars['X']), $config['captcha_gd_fonts']) -1)],
1696              'Y' =>    $chars['Y'][mt_rand(0, min(sizeof($chars['Y']), $config['captcha_gd_fonts']) -1)],
1697              'Z' =>    $chars['Z'][mt_rand(0, min(sizeof($chars['Z']), $config['captcha_gd_fonts']) -1)],
1698  
1699              '1' => array(
1700                  array(0,0,0,1,1,0,0,0,0),
1701                  array(0,0,1,0,1,0,0,0,0),
1702                  array(0,1,0,0,1,0,0,0,0),
1703                  array(0,0,0,0,1,0,0,0,0),
1704                  array(0,0,0,0,1,0,0,0,0),
1705                  array(0,0,0,0,1,0,0,0,0),
1706                  array(0,0,0,0,1,0,0,0,0),
1707                  array(0,0,0,0,1,0,0,0,0),
1708                  array(0,0,0,0,1,0,0,0,0),
1709                  array(0,0,0,0,1,0,0,0,0),
1710                  array(0,0,0,0,1,0,0,0,0),
1711                  array(0,0,0,0,1,0,0,0,0),
1712                  array(0,0,0,0,1,0,0,0,0),
1713                  array(0,0,0,0,1,0,0,0,0),
1714                  array(0,1,1,1,1,1,1,1,0),
1715              ),
1716              '2' => array(    // New '2' supplied by Anon
1717                  array(0,0,0,1,1,1,0,0,0),
1718                  array(0,0,1,0,0,0,1,0,0),
1719                  array(0,1,0,0,0,0,1,1,0),
1720                  array(0,0,0,0,0,0,0,0,1),
1721                  array(0,0,0,0,0,0,0,0,1),
1722                  array(0,0,0,0,0,0,0,1,1),
1723                  array(0,0,0,0,0,0,0,1,0),
1724                  array(0,0,0,0,0,0,1,0,0),
1725                  array(0,0,0,0,0,1,0,0,0),
1726                  array(0,0,0,0,1,0,0,0,0),
1727                  array(0,0,0,1,0,0,0,0,0),
1728                  array(0,0,1,0,0,0,0,0,0),
1729                  array(0,1,0,0,0,0,0,0,0),
1730                  array(1,1,1,1,1,1,1,1,1),
1731                  array(0,0,0,0,0,0,0,0,0),
1732              ),
1733              '3' => array(
1734                  array(0,0,1,1,1,1,1,0,0),
1735                  array(0,1,0,0,0,0,0,1,0),
1736                  array(1,0,0,0,0,0,0,0,1),
1737                  array(0,0,0,0,0,0,0,0,1),
1738                  array(0,0,0,0,0,0,0,0,1),
1739                  array(0,0,0,0,0,0,0,0,1),
1740                  array(0,0,0,0,0,0,0,1,0),
1741                  array(0,0,0,0,0,1,1,0,0),
1742                  array(0,0,0,0,0,0,0,1,0),
1743                  array(0,0,0,0,0,0,0,0,1),
1744                  array(0,0,0,0,0,0,0,0,1),
1745                  array(0,0,0,0,0,0,0,0,1),
1746                  array(1,0,0,0,0,0,0,0,1),
1747                  array(0,1,0,0,0,0,0,1,0),
1748                  array(0,0,1,1,1,1,1,0,0),
1749              ),
1750              '4' => array(
1751                  array(0,0,0,0,0,0,1,1,0),
1752                  array(0,0,0,0,0,1,0,1,0),
1753                  array(0,0,0,0,1,0,0,1,0),
1754                  array(0,0,0,1,0,0,0,1,0),
1755                  array(0,0,1,0,0,0,0,1,0),
1756                  array(0,1,0,0,0,0,0,1,0),
1757                  array(1,0,0,0,0,0,0,1,0),
1758                  array(1,0,0,0,0,0,0,1,0),
1759                  array(1,1,1,1,1,1,1,1,1),
1760                  array(0,0,0,0,0,0,0,1,0),
1761                  array(0,0,0,0,0,0,0,1,0),
1762                  array(0,0,0,0,0,0,0,1,0),
1763                  array(0,0,0,0,0,0,0,1,0),
1764                  array(0,0,0,0,0,0,0,1,0),
1765                  array(0,0,0,0,0,0,0,1,0),
1766              ),
1767              '5' => array(
1768                  array(1,1,1,1,1,1,1,1,1),
1769                  array(1,0,0,0,0,0,0,0,0),
1770                  array(1,0,0,0,0,0,0,0,0),
1771                  array(1,0,0,0,0,0,0,0,0),
1772                  array(1,0,0,0,0,0,0,0,0),
1773                  array(0,1,0,0,0,0,0,0,0),
1774                  array(0,0,1,1,1,1,1,0,0),
1775                  array(0,0,0,0,0,0,0,1,0),
1776                  array(0,0,0,0,0,0,0,0,1),
1777                  array(0,0,0,0,0,0,0,0,1),
1778                  array(0,0,0,0,0,0,0,0,1),
1779                  array(0,0,0,0,0,0,0,0,1),
1780                  array(1,0,0,0,0,0,0,0,1),
1781                  array(0,1,0,0,0,0,0,1,0),
1782                  array(0,0,1,1,1,1,1,0,0),
1783              ),
1784              '6' => array(
1785                  array(0,0,1,1,1,1,1,0,0),
1786                  array(0,1,0,0,0,0,0,1,0),
1787                  array(1,0,0,0,0,0,0,0,1),
1788                  array(1,0,0,0,0,0,0,0,1),
1789                  array(1,0,0,0,0,0,0,0,0),
1790                  array(1,0,0,0,0,0,0,0,0),
1791                  array(1,0,0,1,1,1,1,0,0),
1792                  array(1,0,1,0,0,0,0,1,0),
1793                  array(1,1,0,0,0,0,0,0,1),
1794                  array(1,0,0,0,0,0,0,0,1),
1795                  array(1,0,0,0,0,0,0,0,1),
1796                  array(1,0,0,0,0,0,0,0,1),
1797                  array(1,0,0,0,0,0,0,0,1),
1798                  array(0,1,0,0,0,0,0,1,0),
1799                  array(0,0,1,1,1,1,1,0,0),
1800              ),
1801              '7' => array(
1802                  array(1,1,1,1,1,1,1,1,1),
1803                  array(0,0,0,0,0,0,0,0,1),
1804                  array(0,0,0,0,0,0,0,1,0),
1805                  array(0,0,0,0,0,0,0,1,0),
1806                  array(0,0,0,0,0,0,1,0,0),
1807                  array(0,0,0,0,0,1,0,0,0),
1808                  array(0,0,0,0,0,1,0,0,0),
1809                  array(0,0,0,0,1,0,0,0,0),
1810                  array(0,0,0,1,0,0,0,0,0),
1811                  array(0,0,0,1,0,0,0,0,0),
1812                  array(0,0,1,0,0,0,0,0,0),
1813                  array(0,1,0,0,0,0,0,0,0),
1814                  array(0,1,0,0,0,0,0,0,0),
1815                  array(1,0,0,0,0,0,0,0,0),
1816                  array(1,0,0,0,0,0,0,0,0),
1817              ),
1818              '8' => array(
1819                  array(0,0,1,1,1,1,1,0,0),
1820                  array(0,1,0,0,0,0,0,1,0),
1821                  array(1,0,0,0,0,0,0,0,1),
1822                  array(1,0,0,0,0,0,0,0,1),
1823                  array(1,0,0,0,0,0,0,0,1),
1824                  array(1,0,0,0,0,0,0,0,1),
1825                  array(0,1,0,0,0,0,0,1,0),
1826                  array(0,0,1,1,1,1,1,0,0),
1827                  array(0,1,0,0,0,0,0,1,0),
1828                  array(1,0,0,0,0,0,0,0,1),
1829                  array(1,0,0,0,0,0,0,0,1),
1830                  array(1,0,0,0,0,0,0,0,1),
1831                  array(1,0,0,0,0,0,0,0,1),
1832                  array(0,1,0,0,0,0,0,1,0),
1833                  array(0,0,1,1,1,1,1,0,0),
1834              ),
1835              '9' => array(
1836                  array(0,0,1,1,1,1,1,0,0),
1837                  array(0,1,0,0,0,0,0,1,0),
1838                  array(1,0,0,0,0,0,0,0,1),
1839                  array(1,0,0,0,0,0,0,0,1),
1840                  array(1,0,0,0,0,0,0,0,1),
1841                  array(1,0,0,0,0,0,0,0,1),
1842                  array(1,0,0,0,0,0,0,1,1),
1843                  array(0,1,0,0,0,0,1,0,1),
1844                  array(0,0,1,1,1,1,0,0,1),
1845                  array(0,0,0,0,0,0,0,0,1),
1846                  array(0,0,0,0,0,0,0,0,1),
1847                  array(1,0,0,0,0,0,0,0,1),
1848                  array(1,0,0,0,0,0,0,0,1),
1849                  array(0,1,0,0,0,0,0,1,0),
1850                  array(0,0,1,1,1,1,1,0,0),
1851              ),
1852              )
1853          );
1854      }
1855  }
1856  
1857  /**
1858  * @package VC
1859  */
1860  class char_cube3d
1861  {
1862      var $bitmap;
1863      var $bitmap_width;
1864      var $bitmap_height;
1865  
1866      var $basis_matrix = array(array(1, 0, 0), array(0, 1, 0), array(0, 0, 1));
1867      var $abs_x = array(1, 0);
1868      var $abs_y = array(0, 1);
1869      var $x = 0;
1870      var $y = 1;
1871      var $z = 2;
1872      var $letter = '';
1873  
1874      /**
1875      */
1876  	function char_cube3d(&$bitmaps, $letter)
1877      {
1878          $this->bitmap            = $bitmaps['data'][$letter];
1879          $this->bitmap_width        = $bitmaps['width'];
1880          $this->bitmap_height    = $bitmaps['height'];
1881  
1882          $this->basis_matrix[0][0] = mt_rand(-600, 600);
1883          $this->basis_matrix[0][1] = mt_rand(-600, 600);
1884          $this->basis_matrix[0][2] = (mt_rand(0, 1) * 2000) - 1000;
1885          $this->basis_matrix[1][0] = mt_rand(-1000, 1000);
1886          $this->basis_matrix[1][1] = mt_rand(-1000, 1000);
1887          $this->basis_matrix[1][2] = mt_rand(-1000, 1000);
1888  
1889          $this->normalize($this->basis_matrix[0]);
1890          $this->normalize($this->basis_matrix[1]);
1891          $this->basis_matrix[2] = $this->cross_product($this->basis_matrix[0], $this->basis_matrix[1]);
1892          $this->normalize($this->basis_matrix[2]);
1893  
1894          // $this->basis_matrix[1] might not be (probably isn't) orthogonal to $basis_matrix[0]
1895          $this->basis_matrix[1] = $this->cross_product($this->basis_matrix[0], $this->basis_matrix[2]);
1896          $this->normalize($this->basis_matrix[1]);
1897  
1898          // Make sure our cube is facing into the canvas (assuming +z == in)
1899          for ($i = 0; $i < 3; ++$i)
1900          {
1901              if ($this->basis_matrix[$i][2] < 0)
1902              {
1903                  $this->basis_matrix[$i][0] *= -1;
1904                  $this->basis_matrix[$i][1] *= -1;
1905                  $this->basis_matrix[$i][2] *= -1;
1906              }
1907          }
1908  
1909          // Force our "z" basis vector to be the one with greatest absolute z value
1910          $this->x = 0;
1911          $this->y = 1;
1912          $this->z = 2;
1913  
1914          // Swap "y" with "z"
1915          if ($this->basis_matrix[1][2] > $this->basis_matrix[2][2])
1916          {
1917              $this->z = 1;
1918              $this->y = 2;
1919          }
1920  
1921          // Swap "x" with "z"
1922          if ($this->basis_matrix[0][2] > $this->basis_matrix[$this->z][2])
1923          {
1924              $this->x = $this->z;
1925              $this->z = 0;
1926          }
1927  
1928          // Still need to determine which of $x,$y are which.
1929          // wrong orientation if y's y-component is less than it's x-component
1930          // likewise if x's x-component is less than it's y-component
1931          // if they disagree, go with the one with the greater weight difference.
1932          // rotate if positive
1933          $weight = (abs($this->basis_matrix[$this->x][1]) - abs($this->basis_matrix[$this->x][0])) + (abs($this->basis_matrix[$this->y][0]) - abs($this->basis_matrix[$this->y][1]));
1934  
1935          // Swap "x" with "y"
1936          if ($weight > 0)
1937          {
1938              list($this->x, $this->y) = array($this->y, $this->x);
1939          }
1940  
1941          $this->abs_x = array($this->basis_matrix[$this->x][0], $this->basis_matrix[$this->x][1]);
1942          $this->abs_y = array($this->basis_matrix[$this->y][0], $this->basis_matrix[$this->y][1]);
1943  
1944          if ($this->abs_x[0] < 0)
1945          {
1946              $this->abs_x[0] *= -1;
1947              $this->abs_x[1] *= -1;
1948          }
1949  
1950          if ($this->abs_y[1] > 0)
1951          {
1952              $this->abs_y[0] *= -1;
1953              $this->abs_y[1] *= -1;
1954          }
1955  
1956          $this->letter = $letter;
1957      }
1958  
1959      /**
1960      * Draw a character
1961      */
1962  	function drawchar($scale, $xoff, $yoff, $img, $background, $colours)
1963      {
1964          $width    = $this->bitmap_width;
1965          $height    = $this->bitmap_height;
1966          $bitmap    = $this->bitmap;
1967  
1968          $colour1 = $colours[array_rand($colours)];
1969          $colour2 = $colours[array_rand($colours)];
1970  
1971          $swapx = ($this->basis_matrix[$this->x][0] > 0);
1972          $swapy = ($this->basis_matrix[$this->y][1] < 0);
1973  
1974          for ($y = 0; $y < $height; ++$y)
1975          {
1976              for ($x = 0; $x < $width; ++$x)
1977              {
1978                  $xp = ($swapx) ? ($width - $x - 1) : $x;
1979                  $yp = ($swapy) ? ($height - $y - 1) : $y;
1980  
1981                  if ($bitmap[$height - $yp - 1][$xp])
1982                  {
1983                      $dx = $this->scale($this->abs_x, ($xp - ($swapx ? ($width / 2) : ($width / 2) - 1)) * $scale);
1984                      $dy = $this->scale($this->abs_y, ($yp - ($swapy ? ($height / 2) : ($height / 2) - 1)) * $scale);
1985                      $xo = $xoff + $dx[0] + $dy[0];
1986                      $yo = $yoff + $dx[1] + $dy[1];
1987  
1988                      $origin = array(0, 0, 0);
1989                      $xvec = $this->scale($this->basis_matrix[$this->x], $scale);
1990                      $yvec = $this->scale($this->basis_matrix[$this->y], $scale);
1991                      $face_corner = $this->sum2($xvec, $yvec);
1992  
1993                      $zvec = $this->scale($this->basis_matrix[$this->z], $scale);
1994                      $x_corner = $this->sum2($xvec, $zvec);
1995                      $y_corner = $this->sum2($yvec, $zvec);
1996  
1997                      imagefilledpolygon($img, $this->gen_poly($xo, $yo, $origin, $xvec, $x_corner,$zvec), 4, $colour1);
1998                      imagefilledpolygon($img, $this->gen_poly($xo, $yo, $origin, $yvec, $y_corner,$zvec), 4, $colour2);
1999  
2000                      $face = $this->gen_poly($xo, $yo, $origin, $xvec, $face_corner, $yvec);
2001  
2002                      imagefilledpolygon($img, $face, 4, $background);
2003                      imagepolygon($img, $face, 4, $colour1);
2004                  }
2005              }
2006          }
2007      }
2008  
2009      /*
2010      * return a roughly acceptable range of sizes for rendering with this texttype
2011      */
2012  	function range()
2013      {
2014          return array(3, 4);
2015      }
2016  
2017      /**
2018      * Vector length
2019      */
2020  	function vectorlen($vector)
2021      {
2022          return sqrt(pow($vector[0], 2) + pow($vector[1], 2) + pow($vector[2], 2));
2023      }
2024  
2025      /**
2026      * Normalize
2027      */
2028  	function normalize(&$vector, $length = 1)
2029      {
2030          $length = (( $length < 1) ? 1 : $length);
2031          $length /= $this->vectorlen($vector);
2032          $vector[0] *= $length;
2033          $vector[1] *= $length;
2034          $vector[2] *= $length;
2035      }
2036  
2037      /**
2038      */
2039  	function cross_product($vector1, $vector2)
2040      {
2041          $retval = array(0, 0, 0);
2042          $retval[0] =  (($vector1[1] * $vector2[2]) - ($vector1[2] * $vector2[1]));
2043          $retval[1] = -(($vector1[0] * $vector2[2]) - ($vector1[2] * $vector2[0]));
2044          $retval[2] =  (($vector1[0] * $vector2[1]) - ($vector1[1] * $vector2[0]));
2045  
2046          return $retval;
2047      }
2048  
2049      /**
2050      */
2051  	function sum($vector1, $vector2)
2052      {
2053          return array($vector1[0] + $vector2[0], $vector1[1] + $vector2[1], $vector1[2] + $vector2[2]);
2054      }
2055  
2056      /**
2057      */
2058  	function sum2($vector1, $vector2)
2059      {
2060          return array($vector1[0] + $vector2[0], $vector1[1] + $vector2[1]);
2061      }
2062  
2063      /**
2064      */
2065  	function scale($vector, $length)
2066      {
2067          if (sizeof($vector) == 2)
2068          {
2069              return array($vector[0] * $length, $vector[1] * $length);
2070          }
2071  
2072          return array($vector[0] * $length, $vector[1] * $length, $vector[2] * $length);
2073      }
2074  
2075      /**
2076      */
2077  	function gen_poly($xoff, $yoff, &$vec1, &$vec2, &$vec3, &$vec4)
2078      {
2079          $poly = array();
2080          $poly[0] = $xoff + $vec1[0];
2081          $poly[1] = $yoff + $vec1[1];
2082          $poly[2] = $xoff + $vec2[0];
2083          $poly[3] = $yoff + $vec2[1];
2084          $poly[4] = $xoff + $vec3[0];
2085          $poly[5] = $yoff + $vec3[1];
2086          $poly[6] = $xoff + $vec4[0];
2087          $poly[7] = $yoff + $vec4[1];
2088  
2089          return $poly;
2090      }
2091  
2092      /**
2093      * dimensions
2094      */
2095  	function dimensions($size)
2096      {
2097          $xn = $this->scale($this->basis_matrix[$this->x], -($this->bitmap_width / 2) * $size);
2098          $xp = $this->scale($this->basis_matrix[$this->x], ($this->bitmap_width / 2) * $size);
2099          $yn = $this->scale($this->basis_matrix[$this->y], -($this->bitmap_height / 2) * $size);
2100          $yp = $this->scale($this->basis_matrix[$this->y], ($this->bitmap_height / 2) * $size);
2101  
2102          $p = array();
2103          $p[0] = $this->sum2($xn, $yn);
2104          $p[1] = $this->sum2($xp, $yn);
2105          $p[2] = $this->sum2($xp, $yp);
2106          $p[3] = $this->sum2($xn, $yp);
2107  
2108          $min_x = $max_x = $p[0][0];
2109          $min_y = $max_y = $p[0][1];
2110  
2111          for ($i = 1; $i < 4; ++$i)
2112          {
2113              $min_x = ($min_x > $p[$i][0]) ? $p[$i][0] : $min_x;
2114              $min_y = ($min_y > $p[$i][1]) ? $p[$i][1] : $min_y;
2115              $max_x = ($max_x < $p[$i][0]) ? $p[$i][0] : $max_x;
2116              $max_y = ($max_y < $p[$i][1]) ? $p[$i][1] : $max_y;
2117          }
2118  
2119          return array($min_x, $min_y, $max_x, $max_y);
2120      }
2121  }
2122  
2123  /**
2124  * @package VC
2125  */
2126  class colour_manager
2127  {
2128      var $img;
2129      var $mode;
2130      var $colours;
2131      var $named_colours;
2132  
2133      /**
2134      * Create the colour manager, link it to the image resource
2135      */
2136  	function colour_manager($img, $background = false, $mode = 'ahsv')
2137      {
2138          $this->img = $img;
2139          $this->mode = $mode;
2140          $this->colours = array();
2141          $this->named_colours = array();
2142  
2143          if ($background !== false)
2144          {
2145              $bg = $this->allocate_named('background', $background);
2146              imagefill($this->img, 0, 0, $bg);
2147          }
2148      }
2149  
2150      /**
2151      * Lookup a named colour resource
2152      */
2153  	function get_resource($named_colour)
2154      {
2155          if (isset($this->named_colours[$named_colour]))
2156          {
2157              return $this->named_colours[$named_colour];
2158          }
2159  
2160          if (isset($this->named_rgb[$named_colour]))
2161          {
2162              return $this->allocate_named($named_colour, $this->named_rgb[$named_colour], 'rgb');
2163          }
2164  
2165          return false;
2166      }
2167  
2168      /**
2169      * Assign a name to a colour resource
2170      */
2171  	function name_colour($name, $resource)
2172      {
2173          $this->named_colours[$name] = $resource;
2174      }
2175  
2176      /**
2177      * names and allocates a colour resource
2178      */
2179  	function allocate_named($name, $colour, $mode = false)
2180      {
2181          $resource = $this->allocate($colour, $mode);
2182  
2183          if ($resource !== false)
2184          {
2185              $this->name_colour($name, $resource);
2186          }
2187          return $resource;
2188      }
2189  
2190      /**
2191      * allocates a specified colour into the image
2192      */
2193  	function allocate($colour, $mode = false)
2194      {
2195          if ($mode === false)
2196          {
2197              $mode = $this->mode;
2198          }
2199          
2200          if (!is_array($colour))
2201          {
2202              if (isset($this->named_rgb[$colour]))
2203              {
2204                  return $this->allocate_named($colour, $this->named_rgb[$colour], 'rgb');
2205              }
2206  
2207              if (!is_int($colour))
2208              {
2209                  return false;
2210              }
2211  
2212              $mode = 'rgb';
2213              $colour = array(255 & ($colour >> 16), 255 & ($colour >>  8), 255 & $colour);
2214          }
2215  
2216          if (isset($colour['mode']))
2217          {
2218              $mode = $colour['mode'];
2219              unset($colour['mode']);
2220          }
2221  
2222          if (isset($colour['random']))
2223          {
2224              unset($colour['random']);
2225              // everything else is params
2226              return $this->random_colour($colour, $mode);
2227          }
2228  
2229          $rgb        = colour_manager::model_convert($colour, $mode, 'rgb');
2230          $store        = ($this->mode == 'rgb') ? $rgb : colour_manager::model_convert($colour, $mode, $this->mode);
2231          $resource    = imagecolorallocate($this->img, $rgb[0], $rgb[1], $rgb[2]);
2232          $this->colours[$resource] = $store;
2233  
2234          return $resource;
2235      }
2236  
2237      /**
2238      * randomly generates a colour, with optional params
2239      */
2240  	function random_colour($params = array(), $mode = false)
2241      {
2242          if ($mode === false)
2243          {
2244              $mode = $this->mode;
2245          }
2246  
2247          switch ($mode)
2248          {
2249              case 'rgb':
2250                  // @TODO random rgb generation. do we intend to do this, or is it just too tedious?
2251              break;
2252  
2253              case 'ahsv':
2254              case 'hsv':
2255              default:
2256  
2257                  $default_params = array(
2258                      'hue_bias'            => false,    // degree / 'r'/'g'/'b'/'c'/'m'/'y'   /'o'
2259                      'hue_range'            => false,    // if hue bias, then difference range +/- from bias
2260                      'min_saturation'    => 30,        // 0 - 100
2261                      'max_saturation'    => 80,        // 0 - 100
2262                      'min_value'            => 30,        // 0 - 100
2263                      'max_value'            => 80,        // 0 - 100
2264                  );
2265  
2266                  $alt = ($mode == 'ahsv') ? true : false;
2267                  $params = array_merge($default_params, $params);
2268  
2269                  $min_hue        = 0;
2270                  $max_hue        = 359;
2271                  $min_saturation    = max(0, $params['min_saturation']);
2272                  $max_saturation    = min(100, $params['max_saturation']);
2273                  $min_value        = max(0, $params['min_value']);
2274                  $max_value        = min(100, $params['max_value']);
2275  
2276                  if ($params['hue_bias'] !== false)
2277                  {
2278                      if (is_numeric($params['hue_bias']))
2279                      {
2280                          $h = intval($params['hue_bias']) % 360;
2281                      }
2282                      else
2283                      {
2284                          switch ($params['hue_bias'])
2285                          {
2286                              case 'o':
2287                                  $h = $alt ?  60 :  30;
2288                              break;
2289  
2290                              case 'y':
2291                                  $h = $alt ? 120 :  60;
2292                              break;
2293  
2294                              case 'g':
2295                                  $h = $alt ? 180 : 120;
2296                              break;
2297  
2298                              case 'c':
2299                                  $h = $alt ? 210 : 180;
2300                              break;
2301  
2302                              case 'b':
2303                                  $h = 240;
2304                              break;
2305  
2306                              case 'm':
2307                                  $h = 300;
2308                              break;
2309  
2310                              case 'r':
2311                              default:
2312                                  $h = 0;
2313                              break;
2314                          }
2315                      }
2316  
2317                      $min_hue = $h + 360;
2318                      $max_hue = $h + 360;
2319  
2320                      if ($params['hue_range'])
2321                      {
2322                          $min_hue -= min(180, $params['hue_range']);
2323                          $max_hue += min(180, $params['hue_range']);
2324                      }
2325                  }
2326  
2327                  $h = mt_rand($min_hue, $max_hue);
2328                  $s = mt_rand($min_saturation, $max_saturation);
2329                  $v = mt_rand($min_value, $max_value);
2330  
2331                  return $this->allocate(array($h, $s, $v), $mode);
2332  
2333              break;
2334          }
2335      }
2336  
2337      /**
2338      */
2339  	function colour_scheme($resource, $include_original = true)
2340      {
2341          $mode = 'hsv';
2342  
2343          if (($pre = $this->get_resource($resource)) !== false)
2344          {
2345              $resource = $pre;
2346          }
2347  
2348          $colour = colour_manager::model_convert($this->colours[$resource], $this->mode, $mode);
2349          $results = ($include_original) ? array($resource) : array();
2350          $colour2 = $colour3 = $colour4 = $colour;
2351          $colour2[0] += 150;
2352          $colour3[0] += 180;
2353          $colour4[0] += 210;
2354  
2355  
2356          $results[] = $this->allocate($colour2, $mode);
2357          $results[] = $this->allocate($colour3, $mode);
2358          $results[] = $this->allocate($colour4, $mode);
2359  
2360          return $results;
2361      }
2362  
2363      /**
2364      */
2365  	function mono_range($resource, $count = 5, $include_original = true)
2366      {
2367          if (is_array($resource))
2368          {
2369              $results = array();
2370              for ($i = 0, $size = sizeof($resource); $i < $size; ++$i)
2371              {
2372                  $results = array_merge($results, $this->mono_range($resource[$i], $count, $include_original));
2373              }
2374              return $results;
2375          }
2376  
2377          $mode = (in_array($this->mode, array('hsv', 'ahsv'), true) ? $this->mode : 'ahsv');
2378          if (($pre = $this->get_resource($resource)) !== false)
2379          {
2380              $resource = $pre;
2381          }
2382  
2383          $colour = colour_manager::model_convert($this->colours[$resource], $this->mode, $mode);
2384  
2385          $results = array();
2386          if ($include_original)
2387          {
2388              $results[] = $resource;
2389              $count--;
2390          }
2391  
2392          // This is a hard problem. I chicken out and try to maintain readability at the cost of less randomness.
2393          
2394          while ($count > 0)
2395          {
2396              $colour[1] = ($colour[1] + mt_rand(40,60)) % 99;
2397              $colour[2] = ($colour[2] + mt_rand(40,60));
2398              $results[] = $this->allocate($colour, $mode);
2399              $count--;
2400          }
2401          return $results;
2402      }
2403  
2404      /**
2405      * Convert from one colour model to another
2406      */
2407  	function model_convert($colour, $from_model, $to_model)
2408      {
2409          if ($from_model == $to_model)
2410          {
2411              return $colour;
2412          }
2413  
2414          switch ($to_model)
2415          {
2416              case 'hsv':
2417  
2418                  switch ($from_model)
2419                  {
2420                      case 'ahsv':
2421                          return colour_manager::ah2h($colour);
2422                      break;
2423  
2424                      case 'rgb':
2425                          return colour_manager::rgb2hsv($colour);
2426                      break;
2427                  }
2428              break;
2429  
2430              case 'ahsv':
2431  
2432                  switch ($from_model)
2433                  {
2434                      case 'hsv':
2435                          return colour_manager::h2ah($colour);
2436                      break;
2437  
2438                      case 'rgb':
2439                          return colour_manager::h2ah(colour_manager::rgb2hsv($colour));
2440                      break;
2441                  }
2442              break;
2443  
2444              case 'rgb':
2445                  switch ($from_model)
2446                  {
2447                      case 'hsv':
2448                          return colour_manager::hsv2rgb($colour);
2449                      break;
2450  
2451                      case 'ahsv':
2452                          return colour_manager::hsv2rgb(colour_manager::ah2h($colour));
2453                      break;
2454                  }
2455              break;
2456          }
2457          return false;
2458      }
2459  
2460      /**
2461      * Slightly altered from wikipedia's algorithm
2462      */
2463  	function hsv2rgb($hsv)
2464      {
2465          colour_manager::normalize_hue($hsv[0]);
2466  
2467          $h = $hsv[0];
2468          $s = min(1, max(0, $hsv[1] / 100));
2469          $v = min(1, max(0, $hsv[2] / 100));
2470  
2471          // calculate hue sector
2472          $hi = floor($hsv[0] / 60);
2473  
2474          // calculate opposite colour
2475          $p = $v * (1 - $s);
2476  
2477          // calculate distance between hex vertices
2478          $f = ($h / 60) - $hi;
2479  
2480          // coming in or going out?
2481          if (!($hi & 1))
2482          {
2483              $f = 1 - $f;
2484          }
2485  
2486          // calculate adjacent colour
2487          $q = $v * (1 - ($f * $s));
2488  
2489          switch ($hi)
2490          {
2491              case 0:
2492                  $rgb = array($v, $q, $p);
2493              break;
2494  
2495              case 1:
2496                  $rgb = array($q, $v, $p);
2497              break;
2498  
2499              case 2:
2500                  $rgb = array($p, $v, $q);
2501              break;
2502  
2503              case 3:
2504                  $rgb = array($p, $q, $v);
2505              break;
2506  
2507              case 4:
2508                  $rgb = array($q, $p, $v);
2509              break;
2510  
2511              case 5:
2512                  $rgb = array($v, $p, $q);
2513              break;
2514  
2515              default:
2516                  return array(0, 0, 0);
2517              break;
2518          }
2519  
2520          return array(255 * $rgb[0], 255 * $rgb[1], 255 * $rgb[2]);
2521      }
2522  
2523      /**
2524      * (more than) Slightly altered from wikipedia's algorithm
2525      */
2526  	function rgb2hsv($rgb)
2527      {
2528          $r = min(255, max(0, $rgb[0]));
2529          $g = min(255, max(0, $rgb[1]));
2530          $b = min(255, max(0, $rgb[2]));
2531          $max = max($r, $g, $b);
2532          $min = min($r, $g, $b);
2533  
2534          $v = $max / 255;
2535          $s = (!$max) ? 0 : 1 - ($min / $max);
2536  
2537          // if max - min is 0, we want hue to be 0 anyway.
2538          $h = $max - $min;
2539  
2540          if ($h)
2541          {
2542              switch ($max)
2543              {
2544                  case $g:
2545                      $h = 120 + (60 * ($b - $r) / $h);
2546                  break;
2547  
2548                  case $b:
2549                      $h = 240 + (60 * ($r - $g) / $h);
2550                  break;
2551  
2552                  case $r:
2553                      $h = 360 + (60 * ($g - $b) / $h);
2554                  break;
2555              }
2556          }
2557          colour_manager::normalize_hue($h);
2558  
2559          return array($h, $s * 100, $v * 100);
2560      }
2561  
2562      /**
2563      */
2564  	function normalize_hue(&$hue)
2565      {
2566          $hue %= 360;
2567  
2568          if ($hue < 0)
2569          {
2570              $hue += 360;
2571          }
2572      }
2573  
2574      /**
2575      * Alternate hue to hue
2576      */
2577  	function ah2h($ahue)
2578      {
2579          if (is_array($ahue))
2580          {
2581              $ahue[0] = colour_manager::ah2h($ahue[0]);
2582              return $ahue;
2583          }
2584          colour_manager::normalize_hue($ahue);
2585  
2586          // blue through red is already ok
2587          if ($ahue >= 240)
2588          {
2589              return $ahue;
2590          }
2591  
2592          // ahue green is at 180
2593          if ($ahue >= 180)
2594          {
2595              // return (240 - (2 * (240 - $ahue)));
2596              return (2 * $ahue) - 240; // equivalent
2597          }
2598  
2599          // ahue yellow is at 120   (RYB rather than RGB)
2600          if ($ahue >= 120)
2601          {
2602              return $ahue - 60;
2603          }
2604  
2605          return $ahue / 2;
2606      }
2607  
2608      /**
2609      * hue to Alternate hue
2610      */
2611  	function h2ah($hue)
2612      {
2613          if (is_array($hue))
2614          {
2615              $hue[0] = colour_manager::h2ah($hue[0]);
2616              return $hue;
2617          }
2618          colour_manager::normalize_hue($hue);
2619  
2620          // blue through red is already ok
2621          if ($hue >= 240)
2622          {
2623              return $hue;
2624          }
2625          else if ($hue <= 60)
2626          {
2627              return $hue * 2;
2628          }
2629          else if ($hue <= 120)
2630          {
2631              return $hue + 60;
2632          }
2633          else
2634          {
2635              return ($hue + 240) / 2;
2636          }
2637      }
2638  }
2639  
2640  ?>


Generated: Wed Oct 2 15:03:47 2013 Cross-referenced by PHPXref 0.7.1