import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;

public class TimeWheel extends JLayeredPane implements MouseListener,MouseMotionListener{
    
    private final boolean aa = false;

    private final double[][] data = {
{    4.0,   91.0,    5.0,    7.0,  224.0,  180.0,  127.0,  109.0,   71.0,    8.0,
     1.0,  239.0,   85.0,   90.0,   59.0,   51.0,    4.0,    0.0,  227.0,  131.0,
   131.0,   71.0,   91.0,    9.0,    4.0,  352.0,  196.0,  241.0,  153.0,   85.0,
     7.0,    7.0,  634.0,  228.0,  199.0,  161.0,  136.0,   14.0,    7.0,  530.0,
   241.0,  210.0,  188.0,   98.0,    7.0,    6.0,  418.0,  209.0,  179.0,  138.0,
   106.0,   11.0,    5.0,  375.0,  205.0,  164.0,  148.0,  147.0,    9.0,    3.0,
   399.0,  206.0,  241.0,  160.0,  105.0,    5.0,    3.0,  202.0,  230.0,  184.0,
   150.0,  104.0,    4.0,    8.0,  430.0,  223.0,  167.0,  166.0,  156.0,   11.0,
     3.0,  417.0,  219.0,  145.0,  139.0,  110.0,   13.0,    3.0,  368.0,  181.0,
   220.0,  142.0,  149.0,    4.0,    2.0,  284.0,   98.0,  105.0,   34.0,    3.0,
     6.0,    1.0,    3.0,  233.0,   97.0,  110.0,   63.0,    0.0,    3.0,  198.0,
    82.0,  119.0,   82.0,   47.0,    3.0,    2.0,  427.0,   89.0,   67.0,   52.0,
     4.0,    3.0,    4.0,  270.0,  131.0,   93.0,   91.0,   64.0,    3.0,    0.0,
   176.0,   90.0,  100.0,   74.0,   76.0,    4.0,    5.0,  185.0,   77.0,   59.0,
     3.0,   48.0,    5.0,    3.0,  276.0,  147.0,   81.0,   68.0,   45.0,    5.0,
     4.0,    3.0,  173.0,   90.0,  101.0,   56.0,    7.0,    3.0,  211.0,  119.0,
   106.0,   91.0,   62.0,    4.0,    4.0,  201.0,  135.0,  111.0,   91.0,   55.0,
     2.0,    4.0,  189.0,  113.0,   86.0,  115.0,   57.0,    8.0,    2.0,  219.0,
   122.0,   87.0,   87.0,   61.0,    5.0,    6.0,  220.0,  115.0,   89.0,   72.0,
    46.0,    6.0,    2.0,  175.0,  116.0,   89.0,   80.0,   57.0,    5.0,    3.0,
   167.0,   80.0,   54.0,   49.0,   39.0,    6.0,    2.0,  154.0,   82.0,   65.0,
    54.0,   34.0,    4.0,    1.0,  164.0,   79.0,   60.0,   62.0,   45.0,    4.0,
     3.0,  151.0,   53.0,   96.0,   51.0,   46.0,    4.0,    1.0,  126.0,   87.0,
    76.0,   61.0,   43.0,    7.0,    6.0,  164.0,  123.0,   74.0,   90.0,   37.0,
     6.0,    4.0,  179.0,   96.0,   93.0,   86.0,   63.0,    3.0,    5.0,  252.0,
   140.0,  146.0,  150.0,   82.0,   11.0,    3.0,  331.0,  185.0,  172.0,  175.0,
   119.0,    4.0,    9.0,  409.0,  223.0,  183.0,  167.0,   91.0,    9.0,    4.0,
   402.0,  229.0,   84.0,  189.0,  133.0,    7.0,    4.0,  505.0,  248.0,  248.0,
   176.0,  119.0,    8.0,    3.0,  651.0,  194.0,  221.0,  172.0,  109.0,   13.0,
     3.0,  402.0,  210.0,  175.0,  153.0,   94.0,    8.0,    8.0,  413.0,  195.0,
   228.0,  149.0,   84.0,    6.0,    7.0,  498.0,  193.0,  178.0,  143.0,  104.0,
    10.0,    6.0,  402.0,  226.0,  156.0,  139.0,   74.0,   13.0,    3.0,  369.0,
   325.0,  215.0,  193.0,  268.0,    8.0,    2.0,  480.0,  299.0,  204.0,  209.0,
   143.0,    7.0,    3.0,  485.0,  329.0,  261.0,  246.0,  214.0,    6.0,    7.0,
   681.0,  329.0,  279.0,  254.0,  144.0,   19.0,    7.0,  555.0,  286.0,  217.0,
   196.0,   92.0,   10.0,    4.0,  315.0,  117.0,   63.0,    5.0,    4.0,    5.0,
    10.0,  191.0,   63.0,   37.0,    4.0,    5.0,   28.0,    8.0,  643.0,  367.0,
   235.0,  174.0,   54.0,    9.0,    3.0,  503.0,  270.0,  195.0,  160.0,  120.0,
     8.0,    6.0,  433.0,  235.0,  196.0,  145.0,  102.0,    6.0,    7.0,  464.0,
   242.0,  217.0,  170.0,  117.0,   16.0,    6.0,  223.0,  223.0,  201.0,  158.0,
   186.0,   18.0,   12.0,  489.0,  227.0,  145.0,  188.0,  140.0,   19.0,    6.0,
   646.0,  504.0,  286.0,  239.0,  174.0,   27.0,   15.0,  671.0,  306.0,  262.0,
   233.0,  102.0,   17.0,    3.0,  348.0,  169.0,  140.0,  152.0,  121.0,   15.0,
     5.0,  364.0,  117.0,  194.0,  336.0,  143.0,   11.0,   10.0,  473.0,  293.0,
   211.0,  191.0,  124.0,   12.0,    5.0,  484.0,  320.0,  299.0,  179.0,  116.0,
    12.0,    7.0,  373.0,  178.0,  149.0,   57.0,    7.0,    7.0,    4.0,    5.0,
   408.0,  207.0,  158.0,   87.0,    7.0,    7.0,  336.0,  140.0,  112.0,  138.0,
    83.0,    3.0,    4.0,  238.0,  104.0,  102.0,  108.0,   54.0,    6.0,    1.0,
   212.0,  141.0,  108.0,  107.0,   64.0,    7.0,    1.0,  244.0,  145.0,  124.0,
    73.0,   66.0,    7.0,    1.0,  174.0,   59.0,   75.0,    4.0,   41.0,    8.0,
     0.0,  325.0,  199.0,  139.0,   93.0,   43.0,    7.0,    2.0,    3.0,  320.0,
   143.0,  134.0,   66.0,    6.0,    4.0,  201.0,   93.0,   95.0,   65.0,   32.0,
     7.0,    1.0,  167.0,  130.0,   94.0,  112.0,   55.0,    3.0,    3.0,  235.0,
   123.0,  153.0,   93.0,   52.0,   11.0,    5.0,  233.0,  109.0,   94.0,   95.0,
    48.0,    3.0,    4.0,  167.0,   80.0,  100.0,   83.0,   48.0,    8.0,    3.0,
   190.0,   97.0,   87.0,  109.0,   36.0,   11.0,    4.0,  186.0,  108.0,   80.0,
    57.0,   43.0,    7.0,    2.0,  135.0,   86.0,   71.0,   47.0,   56.0,    8.0,
     2.0,   73.0,   46.0,   41.0,   25.0,   30.0,    1.0,    1.0,  125.0,   54.0,
    57.0,   50.0,   35.0,    3.0,    4.0,  172.0,   75.0,   50.0,   44.0,   31.0,
     1.0,    2.0,  183.0,   82.0,   67.0,   74.0,   26.0,   11.0,    5.0,  186.0,
    76.0,   75.0,   55.0,   24.0,    2.0,    1.0,   64.0,   40.0,   44.0,   52.0,
    51.0,    3.0,    3.0,  202.0,  114.0,  108.0,  105.0,   77.0,    9.0,    1.0,
   263.0,  140.0,  143.0,  128.0,  100.0,   12.0,   10.0,  317.0,  183.0,  119.0,
    98.0,  103.0,   13.0,    5.0,  115.0,  220.0,  190.0,  139.0,  129.0,    6.0,
     2.0,  428.0,  238.0,  213.0,  186.0,   91.0,    9.0,    2.0,  494.0,  238.0,
   214.0,  168.0,   86.0,    5.0,    1.0,  435.0,  124.0,  199.0,  202.0,  106.0,
    13.0,    8.0,  486.0,  219.0,  181.0,  155.0,  145.0,   13.0,    2.0,  414.0,
   198.0,  181.0,  135.0,   69.0,   13.0,    3.0,  422.0,  200.0,  155.0,  132.0,
   113.0,    9.0,    9.0,  530.0,  204.0,  203.0,  172.0,   88.0,    7.0,    1.0,
   345.0,  177.0,  121.0,   49.0,    8.0,    0.0,    0.0,   20.0,    7.0,    9.0,
    11.0,    5.0,    1.0,    0.0,   17.0,   10.0,    8.0,    7.0,   11.0,    1.0,
     1.0,   27.0,   25.0,   16.0,   15.0,   14.0,    1.0,    0.0,   41.0,   21.0,
    21.0,   14.0,    7.0,    0.0,    4.0,   73.0,   36.0,   47.0,   45.0,   12.0,
     8.0,    5.0,  686.0,  298.0,  219.0,  218.0,  159.0,   18.0,    9.0,  558.0,
   300.0,  310.0,  283.0,  170.0,   10.0,    5.0,  850.0,  356.0,  321.0,  264.0,
   190.0,   13.0,   18.0,  785.0,  373.0,  151.0,  273.0,  185.0,   19.0,   11.0,
   813.0,  363.0,  284.0,  224.0,  220.0,   15.0,   12.0,  710.0,  322.0,  202.0,
   218.0,  105.0,   16.0,   16.0,  449.0,  288.0,  228.0,  239.0,  124.0,    9.0,
     5.0,  442.0,  262.0,  187.0,  155.0,  132.0,    5.0,    5.0,  393.0,  240.0,
   261.0,  129.0,  118.0,   12.0,    0.0,  390.0,  186.0,  163.0,  153.0,   95.0,
     3.0,    5.0,  398.0,  224.0,  147.0,  174.0,  108.0,    4.0,    0.0,  372.0,
   182.0,  140.0,  147.0,   84.0,   11.0,    3.0,  410.0,  138.0,  131.0,  137.0,
    91.0,    7.0,    2.0,  340.0,  217.0,  167.0,  146.0,  112.0,    4.0,    2.0,
   392.0,  171.0,  167.0,  148.0,   83.0,    8.0,    3.0,  287.0,  148.0,  101.0,
    58.0,    3.0,    5.0,    6.0,    6.0,  338.0,  133.0,   88.0,   69.0,    6.0,
     5.0,    1.0,  227.0,  118.0,  120.0,   93.0,    4.0,    1.0,  246.0,  100.0,
    89.0,   67.0,   28.0,    2.0,    1.0,  196.0,   94.0,   78.0,   43.0,   57.0,
     5.0,    0.0,  147.0,   98.0,   81.0,  101.0,   69.0,    5.0,    3.0,  259.0,
   117.0,   65.0,    6.0,   66.0,    7.0,    5.0,  284.0,  164.0,  123.0,   88.0,
    64.0,    6.0,    0.0,    5.0,  218.0,  152.0,  125.0,   59.0,    4.0,    2.0,
   193.0,   97.0,   92.0,   87.0,   54.0,    8.0,    1.0,  221.0,  140.0,  112.0,
   114.0,   47.0,    6.0,    1.0,  197.0,   83.0,  104.0,   91.0,   65.0,    6.0,
     2.0,  237.0,  141.0,  119.0,   89.0,   49.0,    6.0,    3.0,  242.0,  116.0,
    91.0,   94.0,   48.0,    5.0,    4.0,  160.0,   80.0,   76.0,   65.0,   34.0,
     5.0,    5.0,   79.0,   86.0,   56.0,   44.0,   37.0,    5.0,    2.0,  159.0,
    98.0,   48.0,   57.0,   36.0,    2.0,    1.0,  136.0,   67.0,   35.0,   57.0,
    36.0,    4.0,    3.0,  150.0,   78.0,   65.0,   60.0,   51.0,    5.0,    1.0,
   160.0,   83.0,   69.0,   57.0,   49.0,    3.0,    3.0,  177.0,   49.0,   93.0,
    90.0,   61.0,    6.0,    5.0,  228.0,  121.0,  120.0,  119.0,   75.0,    4.0,
     4.0,  320.0,  171.0,  192.0,  155.0,  100.0,    7.0,    2.0,  389.0,  262.0,
   186.0,  154.0,   81.0,   14.0,    3.0,  143.0,    8.0,  357.0,  204.0,  104.0,
     9.0,    4.0,  382.0,  235.0,  103.0,  180.0,  126.0,   17.0,    4.0,  396.0,
   204.0,  192.0,  159.0,  102.0,    9.0,    5.0,  383.0,  202.0,  167.0,  161.0,
    88.0,    7.0,    4.0,  208.0,   11.0,  389.0,  197.0,  122.0,    7.0,    4.0,
   224.0,  217.0,  193.0,  168.0,  110.0,   10.0,    1.0,  445.0,  222.0,  181.0,
   159.0,   97.0,   10.0,    4.0,  406.0,  222.0,  212.0,  150.0,  125.0,   13.0,
     4.0,  665.0,  188.0,  182.0,  158.0,  104.0,    3.0,    6.0,  412.0,  210.0,
   180.0,  234.0,  114.0,   13.0,    7.0,  238.0,  251.0,  178.0,  141.0,  113.0,
    11.0,    6.0,  432.0,  205.0,  137.0,   91.0,   34.0,    1.0,    0.0,    2.0,
     3.0,  106.0,   64.0,   41.0,    8.0,    0.0 },
{    2.0,   11.0,    4.0,    0.0,   42.0,   24.0,   19.0,   12.0,   13.0,    0.0,
     1.0,   32.0,   11.0,   16.0,    7.0,   14.0,    1.0,    0.0,   18.0,   88.0,
    10.0,   11.0,    8.0,    1.0,    0.0,   16.0,   16.0,   10.0,    8.0,    5.0,
     0.0,    0.0,   33.0,   17.0,   12.0,    2.0,    8.0,    0.0,    0.0,   30.0,
    18.0,    8.0,   14.0,   14.0,    1.0,    1.0,   27.0,   15.0,    8.0,   11.0,
     6.0,    0.0,    2.0,   25.0,    9.0,   14.0,   12.0,    9.0,    2.0,    0.0,
    32.0,    9.0,   14.0,    7.0,    7.0,    0.0,    0.0,   37.0,    8.0,   13.0,
     7.0,    8.0,    0.0,    4.0,   33.0,   15.0,   12.0,   11.0,    8.0,    0.0,
     0.0,   28.0,   18.0,   10.0,   11.0,    6.0,    0.0,    0.0,   29.0,   14.0,
    11.0,   14.0,   12.0,    0.0,    1.0,   30.0,   13.0,   11.0,    6.0,    1.0,
     0.0,    0.0,    1.0,   29.0,   10.0,    8.0,    8.0,    1.0,    0.0,   52.0,
    14.0,   13.0,   13.0,   19.0,    0.0,    1.0,   41.0,   20.0,   22.0,    3.0,
     1.0,    1.0,    0.0,   25.0,   22.0,    9.0,   12.0,    3.0,    2.0,    0.0,
    23.0,   10.0,    6.0,   11.0,    6.0,    0.0,    1.0,   32.0,   13.0,    4.0,
     0.0,    9.0,    1.0,    1.0,   45.0,   15.0,   11.0,   10.0,    4.0,    1.0,
     0.0,    1.0,   31.0,   14.0,   14.0,    7.0,    0.0,    1.0,   32.0,    5.0,
    18.0,   12.0,   14.0,    1.0,    0.0,   45.0,   23.0,   26.0,   10.0,   10.0,
     0.0,    0.0,   40.0,   15.0,   11.0,   13.0,    6.0,    1.0,    0.0,   31.0,
    16.0,   17.0,   10.0,   10.0,    2.0,    2.0,   41.0,   13.0,   14.0,   14.0,
     5.0,    1.0,    0.0,   55.0,   13.0,    4.0,    7.0,    9.0,    0.0,    0.0,
    36.0,    9.0,    4.0,    7.0,    6.0,    1.0,    0.0,  178.0,   17.0,    9.0,
     8.0,   11.0,    1.0,    3.0,   32.0,   10.0,   11.0,    9.0,    7.0,    1.0,
     0.0,   31.0,   15.0,   10.0,    8.0,    8.0,    2.0,    0.0,   44.0,   12.0,
    24.0,    9.0,   12.0,    1.0,    4.0,   38.0,   28.0,   20.0,   16.0,    7.0,
     1.0,    0.0,   37.0,   29.0,   15.0,   13.0,    9.0,    1.0,    1.0,   43.0,
    27.0,   14.0,   20.0,    6.0,    1.0,    0.0,   41.0,   26.0,   22.0,    9.0,
    10.0,    2.0,    1.0,   35.0,   25.0,    9.0,   20.0,    6.0,    1.0,    0.0,
    19.0,   23.0,   15.0,   15.0,   15.0,    1.0,    1.0,   43.0,   20.0,   15.0,
    16.0,   16.0,    0.0,    1.0,   54.0,   14.0,   21.0,   12.0,   11.0,    1.0,
     1.0,   42.0,   16.0,   17.0,   16.0,    6.0,    1.0,    0.0,   32.0,   13.0,
    22.0,   14.0,   13.0,    0.0,    0.0,   49.0,   19.0,   20.0,   11.0,   11.0,
     0.0,    0.0,   34.0,   13.0,   11.0,   15.0,    8.0,    0.0,    0.0,   46.0,
    23.0,   12.0,    9.0,   13.0,    1.0,    0.0,   43.0,   20.0,   11.0,   13.0,
     5.0,    3.0,    0.0,   40.0,   16.0,   14.0,   10.0,   12.0,    1.0,    0.0,
    37.0,   24.0,   21.0,    8.0,    6.0,    1.0,    0.0,   35.0,   19.0,   13.0,
    13.0,    2.0,    0.0,    0.0,   17.0,    5.0,    7.0,    1.0,    0.0,    0.0,
     0.0,   15.0,    5.0,    2.0,    2.0,    2.0,    1.0,    0.0,   51.0,   20.0,
    20.0,   18.0,   12.0,    0.0,    0.0,   37.0,   17.0,   19.0,   11.0,    8.0,
     1.0,    0.0,   28.0,   17.0,   11.0,   13.0,   19.0,    0.0,    0.0,   34.0,
    15.0,   18.0,    8.0,   14.0,    0.0,    0.0,   32.0,   17.0,   11.0,   10.0,
     4.0,    0.0,    0.0,   20.0,   17.0,    4.0,   13.0,    3.0,    0.0,    0.0,
    22.0,   22.0,   17.0,   10.0,   10.0,    2.0,    0.0,   25.0,   16.0,    7.0,
    12.0,   11.0,    0.0,    1.0,   17.0,   10.0,    6.0,    7.0,    4.0,    0.0,
     1.0,   23.0,   13.0,   10.0,    9.0,   11.0,    0.0,    0.0,   34.0,   20.0,
    10.0,   11.0,    2.0,    0.0,    0.0,   35.0,   11.0,   16.0,   11.0,    2.0,
     1.0,    0.0,   31.0,   13.0,   13.0,    9.0,    1.0,    0.0,    0.0,    0.0,
    46.0,   15.0,   13.0,   16.0,    0.0,    0.0,   46.0,   21.0,    7.0,    8.0,
     6.0,    0.0,    1.0,   42.0,   17.0,   15.0,   20.0,    9.0,    2.0,    0.0,
    41.0,   17.0,   18.0,   13.0,    8.0,    2.0,    0.0,   45.0,   18.0,   27.0,
    24.0,   10.0,    0.0,    1.0,   17.0,    8.0,   54.0,    0.0,   11.0,    1.0,
     1.0,   53.0,   18.0,   11.0,   12.0,    9.0,    0.0,    0.0,    1.0,   32.0,
    14.0,   14.0,    5.0,    0.0,    0.0,   39.0,   19.0,   16.0,    7.0,    5.0,
     1.0,    0.0,   26.0,   16.0,   16.0,   15.0,   19.0,    1.0,    0.0,   47.0,
    19.0,   13.0,   10.0,   11.0,    1.0,    0.0,   27.0,   17.0,   14.0,    8.0,
     9.0,    1.0,    0.0,   31.0,   20.0,   13.0,   10.0,   10.0,    0.0,    0.0,
    42.0,    8.0,   18.0,    6.0,    9.0,    1.0,    0.0,   34.0,   25.0,   15.0,
     9.0,    5.0,    1.0,    0.0,   40.0,   13.0,    8.0,   22.0,   12.0,    1.0,
     0.0,   25.0,   10.0,    2.0,    2.0,    4.0,    2.0,    0.0,   36.0,   10.0,
     8.0,   14.0,   11.0,    1.0,    1.0,   41.0,   18.0,   18.0,   10.0,    9.0,
     4.0,    0.0,   26.0,   12.0,   24.0,   11.0,   51.0,    1.0,    0.0,   43.0,
    13.0,    7.0,    8.0,    6.0,    0.0,    0.0,   14.0,    5.0,   15.0,    7.0,
    10.0,    1.0,    0.0,   37.0,   45.0,   19.0,   18.0,   11.0,    2.0,    0.0,
    40.0,   14.0,   12.0,   19.0,    6.0,    1.0,    1.0,   33.0,   25.0,   16.0,
    13.0,   13.0,    0.0,    0.0,   28.0,   13.0,   17.0,   14.0,    2.0,    0.0,
     0.0,   33.0,   17.0,   15.0,   18.0,    7.0,    2.0,    0.0,   35.0,   29.0,
    20.0,   13.0,    3.0,    1.0,    0.0,   28.0,   12.0,   16.0,    9.0,   20.0,
     2.0,    0.0,   37.0,   20.0,   19.0,   10.0,    4.0,    0.0,    0.0,   43.0,
    21.0,    9.0,   12.0,   46.0,    1.0,    1.0,   40.0,   22.0,   22.0,   16.0,
    12.0,    0.0,    0.0,   34.0,   14.0,   14.0,   12.0,    5.0,    0.0,    1.0,
    23.0,    7.0,    4.0,    7.0,    1.0,    0.0,    0.0,    0.0,    0.0,    1.0,
     0.0,    0.0,    0.0,    0.0,    3.0,    0.0,    0.0,    0.0,    0.0,    0.0,
     0.0,    0.0,    0.0,    2.0,    1.0,    3.0,    0.0,    0.0,    0.0,    3.0,
     4.0,    0.0,    0.0,    0.0,    0.0,    7.0,    3.0,    1.0,    6.0,    2.0,
     2.0,   11.0,  151.0,  108.0,   78.0,   76.0,   20.0,    6.0,    2.0,  249.0,
   134.0,   73.0,   30.0,   64.0,    4.0,    3.0,  214.0,  107.0,   68.0,   70.0,
    60.0,    3.0,    1.0,  233.0,  102.0,   75.0,   77.0,   73.0,    1.0,    2.0,
    72.0,  119.0,   94.0,   58.0,   13.0,    5.0,    3.0,  196.0,  102.0,   82.0,
    69.0,   63.0,    3.0,    1.0,  216.0,   86.0,  106.0,   21.0,   44.0,   11.0,
     4.0,  272.0,  113.0,   76.0,  105.0,   61.0,    4.0,    2.0,  197.0,  128.0,
    23.0,   87.0,   76.0,    2.0,    4.0,  244.0,  121.0,   95.0,   94.0,   78.0,
     1.0,    4.0,  234.0,  110.0,  106.0,   90.0,   64.0,    1.0,    3.0,  255.0,
   137.0,   99.0,   66.0,   76.0,    2.0,    1.0,  231.0,  114.0,   92.0,   78.0,
    60.0,    3.0,    0.0,  243.0,  130.0,  113.0,   83.0,   69.0,    7.0,    3.0,
   250.0,  110.0,   81.0,  101.0,   57.0,    3.0,    4.0,  207.0,   94.0,   70.0,
    43.0,    3.0,    4.0,    1.0,    5.0,  245.0,  139.0,   62.0,   56.0,    5.0,
     0.0,    7.0,  260.0,   99.0,   33.0,   20.0,    4.0,    5.0,  226.0,  111.0,
    84.0,   73.0,   43.0,    4.0,    3.0,  273.0,  107.0,   90.0,   65.0,   65.0,
     9.0,    2.0,  248.0,  121.0,  103.0,   96.0,   49.0,    3.0,    3.0,  230.0,
   116.0,   77.0,    2.0,   44.0,    4.0,    5.0,  269.0,  128.0,   90.0,   25.0,
    53.0,    6.0,    3.0,    4.0,  231.0,   97.0,  102.0,   70.0,    4.0,    4.0,
   236.0,   34.0,   80.0,   80.0,   62.0,    6.0,    5.0,  221.0,  136.0,   82.0,
   102.0,   58.0,    5.0,    3.0,  251.0,  113.0,  102.0,  101.0,   55.0,    6.0,
     5.0,  259.0,  119.0,   95.0,   85.0,   69.0,    5.0,    4.0,  206.0,  127.0,
    70.0,   88.0,   52.0,    4.0,    2.0,  200.0,   21.0,   72.0,   60.0,   56.0,
     5.0,    3.0,  175.0,   99.0,   63.0,   75.0,   13.0,    0.0,    4.0,  214.0,
    88.0,   67.0,   66.0,   18.0,    6.0,    5.0,  232.0,   93.0,   77.0,   85.0,
    62.0,    8.0,    2.0,  218.0,   93.0,   79.0,   75.0,   60.0,    8.0,    2.0,
   261.0,  113.0,   88.0,   80.0,   76.0,    6.0,    3.0,  292.0,  110.0,  111.0,
    82.0,   75.0,    9.0,    4.0,  255.0,  133.0,  130.0,   81.0,   11.0,    3.0,
     1.0,  268.0,  121.0,  100.0,   88.0,   27.0,    6.0,    1.0,  264.0,  120.0,
    83.0,   94.0,   76.0,    6.0,    4.0,  155.0,    6.0,  242.0,  127.0,   80.0,
     7.0,    3.0,  261.0,  134.0,  105.0,   97.0,   69.0,    7.0,    3.0,   88.0,
   129.0,   95.0,   87.0,   88.0,   10.0,    1.0,  242.0,  115.0,  113.0,   91.0,
    75.0,    3.0,    0.0,  146.0,    5.0,  253.0,  126.0,   87.0,   11.0,    6.0,
   258.0,  157.0,  110.0,   84.0,   92.0,    5.0,    2.0,  262.0,  135.0,   95.0,
   110.0,   68.0,    2.0,    5.0,  271.0,  144.0,  115.0,   42.0,   70.0,    8.0,
     7.0,   59.0,  118.0,   84.0,   89.0,   86.0,    5.0,    1.0,  241.0,  123.0,
    90.0,  132.0,   58.0,    6.0,    3.0,  261.0,  129.0,   82.0,   96.0,   66.0,
     4.0,    3.0,  205.0,   89.0,   65.0,   50.0,   28.0,    1.0,    1.0,    1.0,
	 1.0,   73.0,   28.0,   18.0,    2.0,    0.0 },
{   14.0,   81.0,    5.0,    7.0,  392.0,   83.0,   98.0,   57.0,   65.0,   12.0,
     4.0,  228.0,   83.0,   73.0,   74.0,   52.0,   17.0,    1.0,  173.0,   63.0,
    84.0,   78.0,   69.0,   17.0,    6.0,  196.0,   96.0,  131.0,  115.0,   67.0,
    18.0,    8.0,  216.0,  143.0,  135.0,   92.0,   74.0,   15.0,    5.0,  213.0,
    87.0,   81.0,   95.0,   60.0,   10.0,    7.0,  254.0,  110.0,   98.0,   99.0,
    71.0,   13.0,    9.0,  238.0,   96.0,   93.0,  115.0,   71.0,    8.0,    8.0,
   230.0,  116.0,   88.0,  100.0,   81.0,   18.0,    4.0,  201.0,  111.0,   88.0,
    86.0,   72.0,   15.0,   10.0,  179.0,  129.0,   99.0,   91.0,   70.0,   15.0,
     5.0,  224.0,  108.0,  105.0,   83.0,   54.0,   17.0,    4.0,  244.0,  107.0,
    92.0,   91.0,   94.0,   12.0,   10.0,  212.0,   99.0,   90.0,   41.0,    4.0,
    12.0,    4.0,    6.0,  178.0,   71.0,   63.0,   53.0,   20.0,    5.0,  234.0,
   131.0,   99.0,   99.0,   63.0,   12.0,    9.0,  286.0,  136.0,   92.0,   68.0,
    13.0,   10.0,   13.0,  331.0,  122.0,  107.0,   87.0,   55.0,   16.0,   13.0,
   299.0,  126.0,  108.0,   89.0,   74.0,   13.0,    4.0,  205.0,   80.0,   85.0,
    20.0,  113.0,   13.0,   13.0,  318.0,  116.0,   96.0,   83.0,   66.0,   17.0,
     6.0,   10.0,  255.0,  124.0,  103.0,   86.0,   19.0,   10.0,  274.0,  132.0,
   108.0,  116.0,   88.0,   23.0,   11.0,  318.0,  156.0,  100.0,  105.0,   87.0,
    16.0,   10.0,  311.0,  117.0,  124.0,  114.0,   84.0,   14.0,   10.0,  268.0,
   105.0,  125.0,  109.0,   93.0,   12.0,    7.0,  231.0,   91.0,   94.0,   81.0,
    56.0,   18.0,   12.0,  198.0,  109.0,   79.0,   95.0,   70.0,   19.0,   12.0,
   232.0,  113.0,   90.0,  110.0,   65.0,   18.0,    9.0,  210.0,   93.0,   75.0,
    90.0,   64.0,   21.0,    8.0,  244.0,   94.0,   94.0,   91.0,   68.0,   15.0,
    10.0,  275.0,  117.0,   90.0,  118.0,   86.0,   18.0,   12.0,  293.0,  138.0,
   113.0,  111.0,   91.0,   20.0,   11.0,  235.0,  119.0,  107.0,  106.0,   83.0,
    19.0,   10.0,  269.0,  122.0,  130.0,  107.0,  105.0,   18.0,   11.0,  279.0,
   136.0,  110.0,  109.0,   88.0,   23.0,    9.0,  256.0,  104.0,  111.0,   91.0,
    80.0,   14.0,   11.0,  290.0,  117.0,  104.0,  112.0,   77.0,   18.0,    5.0,
   270.0,  114.0,   99.0,   91.0,   91.0,   14.0,   10.0,  238.0,  112.0,  114.0,
    87.0,   59.0,   21.0,    7.0,  260.0,  154.0,  107.0,  113.0,   85.0,   19.0,
     9.0,  238.0,  129.0,  112.0,   92.0,   83.0,   20.0,    3.0,  267.0,  120.0,
   115.0,  109.0,   89.0,    8.0,    8.0,  251.0,  107.0,  103.0,   87.0,   96.0,
    14.0,    8.0,  240.0,  115.0,   88.0,  106.0,   82.0,   17.0,    5.0,  265.0,
   105.0,  123.0,  112.0,   93.0,   15.0,   10.0,  224.0,  118.0,  130.0,  110.0,
    87.0,   21.0,    9.0,  228.0,  120.0,  117.0,   89.0,  111.0,   14.0,   10.0,
   272.0,  141.0,   96.0,   92.0,   77.0,   12.0,    9.0,  223.0,  117.0,   94.0,
   100.0,   71.0,   15.0,   14.0,  132.0,   55.0,   40.0,   12.0,    2.0,    4.0,
     3.0,   89.0,   29.0,   28.0,   13.0,   12.0,   10.0,    9.0,  304.0,   84.0,
    94.0,  103.0,  110.0,   12.0,    5.0,  184.0,  133.0,  163.0,  100.0,   88.0,
    17.0,    3.0,  436.0,  110.0,  100.0,   76.0,   67.0,   16.0,   12.0,  203.0,
    96.0,   82.0,   95.0,   73.0,   17.0,    6.0,  204.0,  102.0,   67.0,   61.0,
    63.0,    7.0,    3.0,  186.0,  102.0,   69.0,   77.0,   75.0,   17.0,    9.0,
   211.0,  109.0,   99.0,  110.0,   80.0,   17.0,    4.0,  192.0,   76.0,   82.0,
    65.0,   44.0,   10.0,    2.0,  111.0,   43.0,   44.0,   56.0,   50.0,    9.0,
     5.0,  173.0,   87.0,   83.0,   94.0,   68.0,   11.0,    5.0,  207.0,   95.0,
    86.0,   77.0,   59.0,   13.0,    6.0,  216.0,  104.0,   91.0,   76.0,   57.0,
    15.0,   14.0,  227.0,   87.0,   64.0,   58.0,   11.0,   13.0,   12.0,    9.0,
   291.0,   87.0,   91.0,   69.0,   16.0,    9.0,  251.0,  112.0,  116.0,   89.0,
    75.0,   13.0,   11.0,  199.0,  100.0,   85.0,   89.0,   76.0,   14.0,    9.0,
   215.0,  126.0,   94.0,  119.0,   73.0,    7.0,    8.0,  288.0,  111.0,  100.0,
    89.0,   63.0,    5.0,    7.0,  203.0,   90.0,   59.0,   12.0,   93.0,   15.0,
     8.0,  274.0,  106.0,   82.0,   70.0,   49.0,   12.0,    9.0,    4.0,  297.0,
   106.0,  100.0,   87.0,   26.0,    8.0,  252.0,  105.0,   80.0,   81.0,   62.0,
    17.0,   10.0,  202.0,  103.0,   99.0,  109.0,   85.0,   21.0,    4.0,  274.0,
   115.0,  141.0,  115.0,   87.0,   11.0,    6.0,  321.0,  116.0,   81.0,   77.0,
    63.0,    9.0,   12.0,  231.0,  115.0,  106.0,   99.0,   71.0,   14.0,   16.0,
   310.0,  152.0,  105.0,  114.0,   78.0,   18.0,    8.0,  299.0,  127.0,  100.0,
    88.0,   94.0,   17.0,    7.0,  270.0,  107.0,  110.0,   94.0,   66.0,    9.0,
    10.0,  195.0,   77.0,   77.0,   74.0,   66.0,   20.0,   15.0,  218.0,  110.0,
    99.0,  108.0,   79.0,   17.0,   15.0,  245.0,  134.0,   99.0,   75.0,   81.0,
    28.0,   10.0,  271.0,   93.0,   86.0,   83.0,   82.0,   18.0,    9.0,  213.0,
    80.0,   89.0,   74.0,   34.0,   10.0,    6.0,   95.0,   41.0,   58.0,   70.0,
    70.0,   19.0,   13.0,  284.0,  125.0,  109.0,   88.0,   91.0,   16.0,   11.0,
   280.0,  141.0,  135.0,  126.0,   88.0,   26.0,    7.0,  261.0,  122.0,  112.0,
    86.0,   74.0,   14.0,    4.0,  226.0,  121.0,  105.0,  107.0,   79.0,   20.0,
    10.0,  250.0,   97.0,   81.0,   98.0,   84.0,   14.0,    5.0,  248.0,   99.0,
   104.0,   87.0,   68.0,   13.0,    7.0,  263.0,   89.0,   79.0,   78.0,   74.0,
    19.0,   12.0,  229.0,  103.0,   96.0,  110.0,   63.0,   13.0,   10.0,  251.0,
    85.0,  100.0,   88.0,   69.0,    6.0,   11.0,  244.0,   85.0,   86.0,   87.0,
    71.0,   17.0,    8.0,  211.0,  101.0,   88.0,   77.0,   59.0,   17.0,    4.0,
   155.0,   69.0,   51.0,   29.0,   10.0,    1.0,    0.0,    6.0,    0.0,    3.0,
     5.0,    2.0,    2.0,    0.0,   10.0,    5.0,    6.0,    5.0,    2.0,    2.0,
     1.0,   16.0,    9.0,    6.0,    5.0,    5.0,    3.0,    0.0,   22.0,   10.0,
     9.0,   14.0,   12.0,    3.0,    2.0,   54.0,   25.0,   32.0,   33.0,   11.0,
    18.0,    7.0,  323.0,  107.0,   68.0,   88.0,   71.0,   12.0,    4.0,  195.0,
   103.0,   88.0,   83.0,   51.0,   10.0,    7.0,  190.0,   94.0,   78.0,   59.0,
    68.0,    9.0,    5.0,  229.0,   64.0,   87.0,  106.0,   60.0,   17.0,    5.0,
   178.0,   99.0,   91.0,   97.0,   79.0,   10.0,    4.0,  170.0,   78.0,   68.0,
    75.0,   49.0,   10.0,    5.0,  172.0,  105.0,   75.0,   60.0,   60.0,   13.0,
     6.0,  204.0,   92.0,   66.0,   85.0,   58.0,   10.0,    9.0,  231.0,  100.0,
    87.0,   72.0,   73.0,    6.0,    6.0,  209.0,  102.0,   86.0,   80.0,   65.0,
    16.0,    5.0,  191.0,   89.0,   82.0,   72.0,   55.0,   14.0,    9.0,  223.0,
    91.0,   91.0,   67.0,   50.0,   11.0,    4.0,  219.0,   96.0,   68.0,   53.0,
    53.0,    9.0,    6.0,  192.0,  120.0,  103.0,   80.0,   77.0,   10.0,    7.0,
   219.0,   99.0,   85.0,   85.0,   66.0,    9.0,    6.0,  221.0,   89.0,   76.0,
    54.0,    9.0,   13.0,   13.0,    7.0,  269.0,  111.0,   99.0,   72.0,    9.0,
     9.0,   15.0,  325.0,  112.0,   80.0,   77.0,   16.0,    8.0,  248.0,  111.0,
   106.0,  106.0,   98.0,   14.0,    5.0,  271.0,  127.0,  108.0,   81.0,   58.0,
    10.0,   13.0,  249.0,  114.0,  115.0,   93.0,   71.0,   12.0,    7.0,  210.0,
    86.0,   76.0,   13.0,  106.0,   19.0,   11.0,  286.0,  115.0,   76.0,   73.0,
    73.0,   15.0,   10.0,   13.0,  266.0,  129.0,   86.0,   66.0,   14.0,    7.0,
   268.0,  122.0,  102.0,  103.0,   93.0,   16.0,    8.0,  247.0,  109.0,   69.0,
    74.0,   60.0,   18.0,    6.0,  212.0,   98.0,   82.0,   93.0,   82.0,    6.0,
     5.0,  208.0,   99.0,   73.0,   93.0,   62.0,   11.0,    7.0,  198.0,   98.0,
    86.0,   69.0,   53.0,   11.0,    8.0,  177.0,  142.0,   90.0,   75.0,   59.0,
     7.0,    7.0,  189.0,   86.0,   73.0,   73.0,   55.0,   17.0,    4.0,  196.0,
    82.0,   95.0,   71.0,   62.0,   12.0,    8.0,  208.0,   87.0,   78.0,   77.0,
    57.0,    9.0,    5.0,  198.0,  119.0,   56.0,   86.0,   76.0,   16.0,    5.0,
   251.0,   89.0,   76.0,   93.0,   87.0,   14.0,    9.0,  206.0,   79.0,   80.0,
    93.0,   79.0,    9.0,   16.0,  220.0,   96.0,   89.0,   89.0,   62.0,   14.0,
    12.0,  240.0,   94.0,   85.0,   84.0,  136.0,   10.0,   11.0,  240.0,  101.0,
    70.0,  101.0,   83.0,   16.0,   11.0,  180.0,    8.0,  197.0,   93.0,   68.0,
    10.0,    6.0,  192.0,  104.0,   77.0,   69.0,   70.0,   14.0,    4.0,  198.0,
    93.0,   96.0,   88.0,   81.0,   15.0,    9.0,  217.0,  126.0,   79.0,   93.0,
    46.0,   13.0,    1.0,  140.0,   13.0,  165.0,   82.0,   58.0,   11.0,   11.0,
   358.0,   88.0,   72.0,   84.0,   62.0,   14.0,    3.0,  220.0,   91.0,   74.0,
    86.0,   58.0,   10.0,   10.0,  182.0,   83.0,   84.0,   78.0,   43.0,   11.0,
     3.0,  184.0,  103.0,   90.0,   65.0,   71.0,   10.0,    7.0,  194.0,   83.0,
    77.0,   60.0,   60.0,   13.0,    8.0,  163.0,   88.0,   79.0,   77.0,   64.0,
     9.0,    8.0,  164.0,   55.0,   60.0,   53.0,   25.0,    5.0,    2.0,    2.0,
	1.0,   68.0,   36.0,   17.0,    9.0,    0.0 },
{    4.0,   54.0,    5.0,    5.0,   73.0,   93.0,   85.0,   65.0,   41.0,    5.0,
     4.0,  111.0,   49.0,   41.0,   23.0,   28.0,    1.0,    0.0,   97.0,   61.0,
    65.0,   17.0,   49.0,    5.0,    1.0,   49.0,   98.0,   20.0,   91.0,   59.0,
     8.0,    6.0,   55.0,  153.0,  118.0,  126.0,   92.0,   12.0,    6.0,  355.0,
   140.0,  116.0,  102.0,   61.0,   13.0,    4.0,  297.0,  104.0,  101.0,   81.0,
    51.0,    9.0,    1.0,  155.0,  102.0,   95.0,   75.0,   16.0,   10.0,    8.0,
   204.0,   87.0,   81.0,   27.0,   48.0,    8.0,    6.0,  183.0,   82.0,   98.0,
    88.0,   50.0,   15.0,    3.0,  207.0,  100.0,   92.0,   18.0,   57.0,    2.0,
     2.0,  211.0,   69.0,   81.0,   55.0,   51.0,    2.0,    4.0,  199.0,   72.0,
    26.0,   53.0,   38.0,    5.0,    3.0,  145.0,   53.0,   37.0,   25.0,    0.0,
     3.0,    1.0,    1.0,  104.0,   54.0,   17.0,   25.0,    5.0,    2.0,  100.0,
    62.0,   28.0,   41.0,   21.0,    2.0,    1.0,   96.0,   41.0,   12.0,   19.0,
     1.0,    6.0,    0.0,  117.0,   45.0,   43.0,   43.0,   20.0,    1.0,    3.0,
    64.0,   30.0,   42.0,   33.0,    3.0,    1.0,    1.0,   10.0,   27.0,   22.0,
     2.0,   20.0,    5.0,    1.0,  143.0,   16.0,   37.0,   26.0,   12.0,    0.0,
     1.0,    3.0,   73.0,   35.0,   31.0,   16.0,    3.0,    3.0,   25.0,   14.0,
    29.0,   25.0,    5.0,    3.0,    1.0,   79.0,   49.0,   38.0,   34.0,   20.0,
     5.0,    1.0,   73.0,   39.0,   38.0,   10.0,   21.0,    3.0,    2.0,   90.0,
    78.0,   41.0,   31.0,   19.0,    2.0,    2.0,   88.0,   38.0,   29.0,   21.0,
    12.0,    3.0,    1.0,   89.0,   42.0,   42.0,   39.0,   29.0,    1.0,    0.0,
    76.0,   32.0,   34.0,   21.0,    6.0,    1.0,    1.0,   87.0,   30.0,   14.0,
     9.0,    8.0,    3.0,    2.0,   92.0,   47.0,   30.0,   32.0,    1.0,    1.0,
     1.0,   78.0,   34.0,   30.0,   22.0,   16.0,    5.0,    5.0,  138.0,   42.0,
    27.0,   32.0,   21.0,    4.0,    0.0,   88.0,   32.0,   26.0,   22.0,   26.0,
     3.0,    1.0,   95.0,   43.0,   31.0,   43.0,   24.0,    3.0,    4.0,  173.0,
    19.0,   15.0,   55.0,   22.0,    5.0,    3.0,  153.0,   78.0,   22.0,   97.0,
    37.0,    4.0,    5.0,  214.0,  110.0,  112.0,   82.0,   51.0,    2.0,    2.0,
   217.0,  133.0,   98.0,   87.0,   80.0,    5.0,    4.0,  276.0,  133.0,  121.0,
   109.0,   28.0,   10.0,    1.0,   74.0,  147.0,  100.0,  113.0,   43.0,    3.0,
     4.0,  253.0,  115.0,   77.0,   77.0,   52.0,    5.0,    1.0,  186.0,  100.0,
   104.0,   22.0,   45.0,    4.0,    2.0,   48.0,   95.0,   80.0,   61.0,   38.0,
     1.0,    2.0,  207.0,  117.0,   66.0,   64.0,   32.0,    7.0,    1.0,  202.0,
   104.0,   87.0,   91.0,   17.0,    7.0,    3.0,  269.0,  132.0,  157.0,   87.0,
    59.0,    2.0,    3.0,  225.0,  107.0,  134.0,  123.0,   69.0,    5.0,    3.0,
   278.0,  133.0,  165.0,  112.0,   62.0,    3.0,    0.0,  230.0,  127.0,  108.0,
    89.0,   50.0,    6.0,    2.0,  114.0,   47.0,   20.0,    6.0,    1.0,    2.0,
     2.0,  122.0,   33.0,   28.0,    0.0,    2.0,    8.0,    4.0,  280.0,   34.0,
    89.0,   75.0,   58.0,   10.0,    1.0,  202.0,   83.0,   88.0,   77.0,   43.0,
     4.0,    2.0,  219.0,   69.0,   74.0,   73.0,   37.0,    5.0,    3.0,  235.0,
    84.0,  107.0,   84.0,   62.0,    9.0,    2.0,  234.0,   94.0,  104.0,   94.0,
    17.0,    7.0,   10.0,  258.0,   95.0,   73.0,  110.0,   74.0,    8.0,    0.0,
   411.0,  171.0,  139.0,  140.0,   97.0,    1.0,    8.0,  386.0,  162.0,  139.0,
   118.0,   66.0,    2.0,    4.0,  243.0,  100.0,   87.0,   88.0,   77.0,    6.0,
     2.0,  260.0,  324.0,  118.0,   88.0,   75.0,   10.0,   11.0,  301.0,  114.0,
   127.0,   94.0,   60.0,   10.0,    6.0,  237.0,   27.0,   90.0,   73.0,   64.0,
     4.0,    4.0,  175.0,   57.0,   66.0,   33.0,    1.0,    5.0,    1.0,    3.0,
   256.0,   73.0,   60.0,   10.0,    4.0,    0.0,   28.0,   54.0,   36.0,   37.0,
    18.0,    2.0,    1.0,  111.0,   61.0,   57.0,   32.0,   32.0,    1.0,    3.0,
    93.0,   48.0,   39.0,   16.0,   24.0,    1.0,    3.0,  103.0,   56.0,   41.0,
    67.0,   21.0,    3.0,    0.0,   84.0,   38.0,   24.0,    1.0,   26.0,    3.0,
     1.0,  131.0,   58.0,   42.0,    4.0,   17.0,    2.0,    1.0,    3.0,  102.0,
    46.0,   28.0,   20.0,    3.0,    1.0,  116.0,   34.0,   22.0,   17.0,    5.0,
     1.0,    0.0,   77.0,   36.0,   35.0,   26.0,   22.0,    2.0,    3.0,   88.0,
    35.0,    4.0,   42.0,   19.0,    0.0,    0.0,   78.0,   40.0,   27.0,   24.0,
    13.0,    2.0,    0.0,   58.0,   32.0,   42.0,   33.0,   25.0,    2.0,    3.0,
    57.0,   23.0,   34.0,   22.0,   24.0,    2.0,    1.0,   65.0,   33.0,   27.0,
    14.0,   14.0,    0.0,    0.0,   52.0,   30.0,   30.0,   16.0,    7.0,    2.0,
     1.0,  165.0,   14.0,   16.0,    8.0,   10.0,    1.0,    3.0,   46.0,   16.0,
    12.0,   13.0,    8.0,    2.0,    1.0,   52.0,   19.0,   18.0,   19.0,   13.0,
     2.0,    2.0,   46.0,   29.0,   15.0,   20.0,    9.0,    0.0,    0.0,   63.0,
    30.0,   21.0,   15.0,    7.0,    1.0,    0.0,   27.0,   12.0,   12.0,   14.0,
    20.0,    0.0,    2.0,   69.0,   36.0,   46.0,    9.0,    9.0,    1.0,    3.0,
   184.0,   67.0,   53.0,   42.0,   24.0,    3.0,    4.0,   47.0,   76.0,   69.0,
    51.0,   37.0,    5.0,    1.0,  167.0,   77.0,   66.0,   44.0,   40.0,   11.0,
     1.0,  205.0,   96.0,  109.0,   85.0,   60.0,    5.0,    2.0,  179.0,   91.0,
    84.0,  100.0,   68.0,    8.0,    5.0,  221.0,   93.0,  102.0,   83.0,   44.0,
     1.0,    1.0,  210.0,   81.0,  101.0,   68.0,   14.0,    3.0,    1.0,  166.0,
    89.0,   70.0,   54.0,   38.0,    3.0,    0.0,  166.0,   99.0,   76.0,   62.0,
    37.0,    5.0,    1.0,  196.0,  132.0,   92.0,   61.0,   26.0,    6.0,    2.0,
   143.0,   75.0,   43.0,   24.0,    3.0,    1.0,    0.0,    6.0,    3.0,    2.0,
     1.0,    1.0,    0.0,    0.0,    8.0,    4.0,    5.0,    1.0,    1.0,    0.0,
     0.0,   13.0,    4.0,    6.0,    5.0,    4.0,    0.0,    0.0,   19.0,    6.0,
     7.0,    7.0,    1.0,    0.0,    2.0,   42.0,   15.0,   14.0,   30.0,   10.0,
     6.0,    3.0,  335.0,  152.0,  116.0,   90.0,   44.0,    4.0,    3.0,  279.0,
   141.0,   99.0,   86.0,   70.0,    7.0,    4.0,  167.0,  157.0,  120.0,  139.0,
    74.0,    4.0,    7.0,  183.0,  193.0,  180.0,  149.0,   47.0,   18.0,   11.0,
   392.0,  175.0,  149.0,  107.0,   94.0,   16.0,    3.0,  171.0,  122.0,  128.0,
    89.0,   54.0,    4.0,    4.0,  360.0,  117.0,   61.0,  109.0,   52.0,   10.0,
     7.0,  246.0,   56.0,   83.0,   68.0,   56.0,    5.0,    6.0,  184.0,   88.0,
    80.0,   49.0,   46.0,    7.0,    2.0,  136.0,   88.0,   74.0,   76.0,   35.0,
     2.0,    7.0,  168.0,   63.0,   89.0,   48.0,   48.0,    7.0,    3.0,  214.0,
    82.0,   46.0,   72.0,   20.0,    0.0,    1.0,  173.0,   77.0,   58.0,   64.0,
    36.0,    6.0,    2.0,  157.0,   65.0,   66.0,   54.0,   38.0,    6.0,    0.0,
   168.0,   89.0,   43.0,   51.0,   33.0,    3.0,    4.0,  102.0,   48.0,   31.0,
    20.0,    0.0,    0.0,    0.0,    2.0,  146.0,   62.0,   37.0,   27.0,    2.0,
     0.0,    1.0,   96.0,   48.0,   26.0,   18.0,    1.0,    0.0,   86.0,   27.0,
    17.0,   37.0,   20.0,    0.0,    1.0,   37.0,   31.0,   29.0,   32.0,   15.0,
     1.0,    0.0,  115.0,   35.0,   29.0,   34.0,   29.0,    0.0,    1.0,   88.0,
    41.0,   18.0,    0.0,   16.0,    4.0,    2.0,  157.0,   61.0,   60.0,   45.0,
    30.0,    2.0,    1.0,    4.0,   95.0,   27.0,   40.0,   25.0,    4.0,    0.0,
   105.0,   46.0,   27.0,   19.0,   27.0,    1.0,    0.0,  112.0,   41.0,   47.0,
    41.0,   17.0,    1.0,    0.0,  111.0,   49.0,   29.0,   46.0,   22.0,    3.0,
     0.0,  102.0,   45.0,   42.0,   47.0,   19.0,    3.0,    2.0,   71.0,   75.0,
    25.0,   47.0,   28.0,    3.0,    1.0,   66.0,   45.0,   31.0,   15.0,   20.0,
     1.0,    2.0,   88.0,   38.0,   25.0,   27.0,   18.0,    1.0,    0.0,   72.0,
    39.0,   24.0,   24.0,   20.0,    3.0,    1.0,   71.0,   29.0,   13.0,   14.0,
    16.0,    3.0,    1.0,   78.0,   31.0,   18.0,   10.0,   16.0,    1.0,    2.0,
    62.0,   38.0,   24.0,   19.0,   11.0,    2.0,    0.0,   63.0,   30.0,   37.0,
    25.0,   23.0,    2.0,    1.0,   87.0,   41.0,   43.0,   43.0,   22.0,    1.0,
     0.0,   94.0,   64.0,   80.0,   50.0,   35.0,    4.0,    3.0,  193.0,   94.0,
    99.0,   70.0,   38.0,    7.0,    8.0,   72.0,    2.0,  117.0,   78.0,   61.0,
     9.0,    0.0,  223.0,   93.0,   84.0,   84.0,   48.0,    7.0,    2.0,  183.0,
    98.0,   79.0,   72.0,   53.0,    3.0,    2.0,  182.0,   38.0,   44.0,   55.0,
    27.0,    2.0,    1.0,  107.0,    8.0,  150.0,   85.0,   27.0,    2.0,    1.0,
   185.0,   74.0,   70.0,   36.0,   49.0,    4.0,    1.0,  179.0,   87.0,   66.0,
    68.0,   37.0,    5.0,    1.0,  218.0,  103.0,   90.0,   64.0,   21.0,    5.0,
     2.0,  158.0,   50.0,   81.0,   58.0,   24.0,    5.0,    0.0,  179.0,  107.0,
    80.0,   36.0,   49.0,    9.0,    3.0,  192.0,  103.0,   77.0,   57.0,   28.0,
     4.0,    0.0,  176.0,   78.0,   55.0,   33.0,   13.0,    1.0,    3.0,    3.0,
	 3.0,   89.0,   28.0,   35.0,    3.0,    0.0 },
{    1.0,   32.0,    3.0,    1.0,  133.0,   51.0,   54.0,   51.0,   25.0,    1.0,
     1.0,   26.0,   92.0,   43.0,   22.0,   17.0,    0.0,    0.0,   81.0,   52.0,
    51.0,  111.0,   35.0,    1.0,    2.0,  134.0,   98.0,   82.0,   68.0,   33.0,
     6.0,    2.0,  223.0,  136.0,   97.0,  142.0,   74.0,   10.0,    2.0,   50.0,
   142.0,  190.0,  129.0,    9.0,    7.0,    1.0,  252.0,   97.0,   99.0,   90.0,
    67.0,    8.0,    3.0,  279.0,  140.0,   95.0,  105.0,   63.0,    8.0,    1.0,
   221.0,  152.0,  112.0,  157.0,   65.0,    6.0,    2.0,  228.0,  108.0,  118.0,
    89.0,   62.0,    2.0,    4.0,  223.0,  118.0,   95.0,  138.0,    4.0,   12.0,
     3.0,  187.0,   87.0,   90.0,   95.0,   46.0,    2.0,    1.0,  193.0,   81.0,
    63.0,   52.0,   41.0,    4.0,    3.0,  119.0,   53.0,   51.0,   20.0,    1.0,
     0.0,    0.0,    3.0,   79.0,   28.0,   36.0,   13.0,    4.0,    0.0,   56.0,
    37.0,   34.0,   23.0,   16.0,    0.0,    1.0,   72.0,   42.0,   19.0,    8.0,
     1.0,    2.0,    1.0,   59.0,   33.0,   63.0,   23.0,   15.0,    2.0,    1.0,
    57.0,   23.0,   22.0,   15.0,    9.0,    2.0,    0.0,   34.0,   22.0,   12.0,
     0.0,    9.0,    2.0,    0.0,   99.0,   39.0,   35.0,   17.0,    9.0,    0.0,
     0.0,    0.0,   44.0,   20.0,   26.0,   11.0,    3.0,    0.0,  105.0,   35.0,
    20.0,   22.0,   27.0,    1.0,    2.0,   52.0,   31.0,   22.0,   24.0,    0.0,
     2.0,    1.0,   57.0,   23.0,   29.0,   19.0,   14.0,    2.0,    0.0,   71.0,
     6.0,   34.0,   22.0,   19.0,    2.0,    1.0,   57.0,   21.0,   23.0,   18.0,
     7.0,    2.0,    3.0,   62.0,   39.0,   21.0,   14.0,   13.0,    0.0,    0.0,
    40.0,   21.0,   15.0,   10.0,    5.0,    0.0,    0.0,   35.0,   22.0,   11.0,
    12.0,    6.0,    1.0,    1.0,   54.0,   17.0,   23.0,   16.0,    8.0,    0.0,
     0.0,   35.0,   21.0,    0.0,   11.0,   12.0,    0.0,    1.0,   52.0,   21.0,
    19.0,   15.0,   12.0,    3.0,    2.0,   52.0,   36.0,   23.0,   25.0,   21.0,
     0.0,    1.0,   38.0,   36.0,   34.0,   34.0,   17.0,    0.0,    2.0,   67.0,
    42.0,   35.0,   41.0,   29.0,    1.0,    2.0,  105.0,   57.0,   61.0,   60.0,
    33.0,    0.0,    0.0,  119.0,   72.0,   67.0,   35.0,   45.0,    8.0,    2.0,
   161.0,   82.0,  143.0,   84.0,   48.0,    2.0,    1.0,  185.0,  162.0,   76.0,
    70.0,   52.0,    2.0,    1.0,  156.0,   91.0,   79.0,   55.0,   30.0,    6.0,
     2.0,   15.0,   70.0,   72.0,   60.0,   35.0,    4.0,    0.0,  144.0,   77.0,
    61.0,   49.0,   35.0,    0.0,    1.0,  152.0,   76.0,   73.0,   42.0,   32.0,
     4.0,    2.0,  154.0,   70.0,   54.0,   91.0,   26.0,    2.0,    1.0,  165.0,
    17.0,   83.0,   65.0,   40.0,    5.0,    1.0,  246.0,   93.0,   93.0,   72.0,
    51.0,    2.0,    0.0,  164.0,  127.0,  103.0,  115.0,   64.0,    3.0,    3.0,
   259.0,  127.0,  101.0,   92.0,   70.0,   11.0,    1.0,  224.0,  127.0,   86.0,
    67.0,   60.0,    7.0,    2.0,  109.0,   41.0,   16.0,    0.0,    1.0,    1.0,
     2.0,   63.0,   29.0,   11.0,   11.0,    3.0,    5.0,    5.0,  210.0,   89.0,
    55.0,   60.0,   37.0,    7.0,    2.0,  183.0,   92.0,   10.0,   72.0,   48.0,
     2.0,    4.0,  212.0,  111.0,   82.0,   58.0,   45.0,    7.0,    0.0,  208.0,
    11.0,   94.0,   85.0,   49.0,    3.0,    2.0,  252.0,  122.0,  109.0,   95.0,
    65.0,   14.0,    3.0,  264.0,  133.0,  124.0,  165.0,   79.0,    2.0,    4.0,
   392.0,   12.0,  164.0,  174.0,  108.0,    8.0,   10.0,  477.0,  344.0,  170.0,
   136.0,   87.0,   10.0,    6.0,  357.0,  112.0,  109.0,  107.0,   91.0,    8.0,
     0.0,  360.0,   32.0,  194.0,   89.0,  104.0,   15.0,    2.0,  386.0,  170.0,
   123.0,  130.0,   62.0,    5.0,    6.0,  283.0,  117.0,    7.0,   85.0,   53.0,
     7.0,    1.0,  202.0,   62.0,   43.0,   23.0,    1.0,    2.0,    2.0,    2.0,
   153.0,   49.0,   38.0,   28.0,    3.0,    2.0,   91.0,   45.0,   43.0,   55.0,
    24.0,    4.0,    0.0,   78.0,   52.0,   36.0,   32.0,   19.0,    2.0,    4.0,
    80.0,   33.0,   32.0,   31.0,   17.0,    0.0,    1.0,   61.0,   30.0,   25.0,
    26.0,   17.0,    1.0,    0.0,   42.0,   14.0,   14.0,    1.0,    4.0,    3.0,
     1.0,   79.0,   47.0,   21.0,   20.0,   10.0,    2.0,    1.0,    6.0,   66.0,
    21.0,   24.0,    6.0,    0.0,    0.0,   44.0,   28.0,    9.0,   12.0,    5.0,
     0.0,    0.0,   49.0,   24.0,   22.0,   18.0,   12.0,    1.0,    0.0,   46.0,
    28.0,   16.0,   23.0,   13.0,    0.0,    0.0,   57.0,   30.0,   18.0,   31.0,
    13.0,    1.0,    1.0,   40.0,   23.0,   28.0,   21.0,    1.0,    0.0,    0.0,
    49.0,   29.0,   14.0,   14.0,    9.0,    0.0,    1.0,   44.0,   15.0,    2.0,
    24.0,   12.0,    1.0,    2.0,   32.0,   14.0,   15.0,   15.0,    5.0,    0.0,
     2.0,    2.0,   15.0,    4.0,    7.0,    3.0,    1.0,    0.0,   29.0,   14.0,
    19.0,   16.0,    8.0,    0.0,    0.0,    2.0,   19.0,   11.0,    6.0,    7.0,
     1.0,    1.0,   42.0,   19.0,   15.0,    2.0,   25.0,    0.0,    0.0,   55.0,
    22.0,   16.0,    9.0,    4.0,    1.0,    0.0,   16.0,    4.0,   10.0,   17.0,
     8.0,    1.0,    1.0,   46.0,   52.0,   21.0,   12.0,   18.0,    1.0,    1.0,
    60.0,   38.0,   26.0,   43.0,   18.0,    1.0,    0.0,   77.0,   47.0,   55.0,
    37.0,   24.0,    3.0,    1.0,  107.0,   57.0,   54.0,   38.0,   30.0,    2.0,
     0.0,  126.0,  101.0,   94.0,   65.0,   55.0,    5.0,    2.0,  151.0,   78.0,
    61.0,   45.0,   40.0,    4.0,    1.0,  148.0,   77.0,   90.0,   70.0,   54.0,
     3.0,    1.0,  212.0,   72.0,   54.0,   59.0,   18.0,    2.0,    0.0,  149.0,
    78.0,   47.0,   46.0,   32.0,    2.0,    2.0,  128.0,   72.0,   66.0,   51.0,
    33.0,    3.0,    0.0,   36.0,   97.0,   78.0,   67.0,   45.0,    3.0,    2.0,
   148.0,   57.0,   33.0,   14.0,    4.0,    0.0,    0.0,    6.0,    1.0,    5.0,
     1.0,    3.0,    0.0,    0.0,    9.0,    4.0,    5.0,    2.0,    1.0,    1.0,
     0.0,   11.0,    5.0,    8.0,    6.0,    4.0,    0.0,    0.0,   15.0,    9.0,
     7.0,    3.0,    0.0,    1.0,    1.0,   17.0,    7.0,    9.0,    8.0,    1.0,
     1.0,    7.0,  115.0,   58.0,   54.0,   31.0,   33.0,    4.0,    3.0,   80.0,
   110.0,   39.0,   68.0,   52.0,    2.0,    2.0,  200.0,   80.0,   86.0,   71.0,
    52.0,    5.0,    8.0,  407.0,  107.0,   81.0,  102.0,   67.0,    8.0,    0.0,
   267.0,  125.0,   85.0,  102.0,   47.0,    3.0,    3.0,  222.0,   67.0,   79.0,
    68.0,   34.0,    8.0,    2.0,  187.0,   57.0,   60.0,   59.0,   35.0,    2.0,
     4.0,  112.0,   51.0,   42.0,   39.0,   29.0,    2.0,    0.0,   74.0,   39.0,
    37.0,   28.0,   17.0,    2.0,    1.0,   87.0,   46.0,   28.0,   10.0,   10.0,
     1.0,    0.0,   66.0,   41.0,   35.0,   32.0,   17.0,    2.0,    0.0,   59.0,
    35.0,   21.0,   17.0,   12.0,    0.0,    0.0,   43.0,   15.0,   32.0,   18.0,
    12.0,    0.0,    0.0,   53.0,   22.0,   25.0,   19.0,   16.0,    1.0,    1.0,
    51.0,   26.0,   15.0,   32.0,   10.0,    1.0,    0.0,   40.0,   20.0,    7.0,
     8.0,    0.0,    1.0,    2.0,    0.0,    7.0,   15.0,   16.0,    6.0,    2.0,
     0.0,    0.0,   30.0,    5.0,    7.0,    0.0,    0.0,    0.0,   16.0,    8.0,
     0.0,    9.0,    4.0,    0.0,    0.0,   23.0,   12.0,   10.0,   11.0,    5.0,
     0.0,    0.0,   18.0,   11.0,    6.0,    9.0,    4.0,    1.0,    0.0,   64.0,
    11.0,    3.0,    0.0,    3.0,    1.0,    1.0,   32.0,   18.0,   12.0,    4.0,
     3.0,    0.0,    0.0,    1.0,   21.0,   12.0,    4.0,    7.0,    2.0,    0.0,
    25.0,    7.0,   51.0,    8.0,    0.0,    2.0,    0.0,   25.0,    7.0,   11.0,
     9.0,    9.0,    0.0,    0.0,   29.0,   10.0,   10.0,   10.0,    4.0,    0.0,
     1.0,   21.0,   13.0,   15.0,   10.0,    3.0,    0.0,    0.0,   26.0,    2.0,
    11.0,    4.0,    5.0,    1.0,    0.0,   16.0,    6.0,    6.0,    4.0,    2.0,
     1.0,    1.0,   21.0,    6.0,    7.0,   11.0,    5.0,    2.0,    1.0,   16.0,
    12.0,    9.0,    3.0,    6.0,    0.0,    2.0,   13.0,    8.0,    8.0,    2.0,
     0.0,    0.0,    0.0,   12.0,    7.0,   11.0,    6.0,    3.0,    0.0,    1.0,
    11.0,    4.0,    6.0,    4.0,    4.0,    2.0,    1.0,   14.0,    5.0,   13.0,
     5.0,    5.0,    0.0,    0.0,   26.0,   11.0,   10.0,    7.0,    4.0,    0.0,
     2.0,   40.0,   11.0,    4.0,   17.0,   11.0,    1.0,    0.0,   39.0,   21.0,
    14.0,   14.0,    7.0,    0.0,    2.0,   14.0,    1.0,   50.0,   23.0,    9.0,
     1.0,    5.0,   64.0,   20.0,   25.0,   19.0,    6.0,    0.0,    0.0,   42.0,
    30.0,   18.0,   17.0,   10.0,    0.0,    1.0,   31.0,   18.0,   21.0,   15.0,
     6.0,    1.0,    0.0,   27.0,    0.0,   33.0,    8.0,    9.0,    1.0,    1.0,
    46.0,   20.0,   16.0,   23.0,   11.0,    1.0,    2.0,   43.0,   23.0,   16.0,
    12.0,    9.0,    1.0,    1.0,   45.0,   22.0,   23.0,   15.0,    8.0,    0.0,
     1.0,   64.0,   21.0,   27.0,   19.0,   11.0,    0.0,    1.0,   46.0,   23.0,
    23.0,    3.0,   10.0,    1.0,    0.0,   40.0,   27.0,   27.0,   18.0,   13.0,
     2.0,    0.0,   40.0,   19.0,   15.0,    7.0,    2.0,    1.0,    0.0,    2.0,
	 0.0,   12.0,   17.0,    6.0,    1.0,    0.0 },
{    8.0,    9.0,    1.0,    0.0,   79.0,   38.0,   30.0,   32.0,   28.0,    0.0,
     0.0,  107.0,   66.0,   44.0,   42.0,   35.0,    1.0,    0.0,  112.0,   79.0,
    54.0,   57.0,   37.0,    4.0,    1.0,  196.0,   78.0,   63.0,   51.0,   38.0,
     2.0,    1.0,  131.0,   58.0,   48.0,   33.0,   28.0,    5.0,    1.0,  125.0,
    43.0,   45.0,   66.0,   34.0,    3.0,    1.0,  163.0,   69.0,   49.0,   66.0,
    35.0,    6.0,    0.0,  188.0,   94.0,   75.0,   56.0,   49.0,    4.0,    2.0,
   227.0,   87.0,   69.0,   67.0,   53.0,    2.0,    0.0,  208.0,   95.0,   75.0,
    83.0,   57.0,    1.0,    1.0,  245.0,   76.0,   77.0,   55.0,   41.0,    4.0,
     0.0,  207.0,   85.0,   69.0,   75.0,   55.0,    5.0,    0.0,  164.0,   52.0,
    63.0,   72.0,   28.0,    4.0,    0.0,   83.0,   30.0,   30.0,   17.0,    0.0,
     0.0,    0.0,    1.0,   99.0,   23.0,   34.0,   24.0,    2.0,    2.0,   87.0,
    46.0,   35.0,   46.0,   35.0,    1.0,    2.0,   94.0,   57.0,   44.0,   25.0,
     2.0,    4.0,    0.0,  126.0,   52.0,   33.0,   47.0,   45.0,    0.0,    0.0,
   119.0,   48.0,   41.0,   40.0,   27.0,    2.0,    1.0,  113.0,   43.0,   26.0,
     3.0,   19.0,    2.0,    0.0,  109.0,   31.0,   41.0,   29.0,   12.0,    0.0,
     1.0,    1.0,   77.0,   58.0,   44.0,   30.0,    2.0,    1.0,  108.0,   62.0,
    46.0,   60.0,   41.0,    0.0,    2.0,  122.0,   57.0,   48.0,   41.0,   42.0,
     3.0,    0.0,  132.0,   52.0,   54.0,   48.0,   42.0,    4.0,    1.0,  129.0,
    73.0,   51.0,   46.0,   30.0,    2.0,    0.0,  107.0,   61.0,   37.0,   40.0,
    19.0,    0.0,    0.0,   70.0,   37.0,   36.0,   27.0,   21.0,    1.0,    1.0,
    73.0,   37.0,   24.0,   20.0,   13.0,    2.0,    0.0,   59.0,   23.0,   24.0,
    28.0,   14.0,    0.0,    0.0,   60.0,   22.0,   18.0,   22.0,   17.0,    2.0,
     1.0,   55.0,   23.0,   18.0,   19.0,   14.0,    3.0,    0.0,   65.0,   40.0,
    30.0,   23.0,   21.0,    1.0,    1.0,   88.0,   38.0,   43.0,   36.0,   31.0,
     2.0,    2.0,  117.0,   55.0,   51.0,   46.0,   40.0,    0.0,    1.0,  169.0,
    68.0,   65.0,   68.0,   40.0,    1.0,    0.0,  176.0,   72.0,   72.0,   60.0,
    38.0,    9.0,    1.0,  181.0,   72.0,   87.0,   56.0,   41.0,    5.0,    0.0,
   185.0,   91.0,   74.0,   87.0,   51.0,    3.0,    4.0,  191.0,   90.0,   83.0,
    82.0,   40.0,    4.0,    1.0,  173.0,   87.0,   64.0,   48.0,   33.0,    4.0,
     0.0,   97.0,   48.0,   53.0,   40.0,   26.0,    5.0,    0.0,  160.0,   72.0,
    68.0,   63.0,   45.0,    2.0,    5.0,  179.0,   87.0,   85.0,   70.0,   31.0,
     2.0,    2.0,  207.0,   88.0,   80.0,   97.0,   70.0,    4.0,    0.0,  240.0,
   118.0,   85.0,   79.0,   51.0,    1.0,    1.0,  232.0,  103.0,   89.0,   92.0,
    46.0,    5.0,    1.0,  229.0,  116.0,   90.0,   83.0,   62.0,    1.0,    0.0,
   243.0,  116.0,   90.0,   82.0,   67.0,    6.0,    2.0,  232.0,  103.0,   72.0,
    76.0,   41.0,    4.0,    0.0,  117.0,   38.0,   16.0,    3.0,    1.0,    0.0,
     0.0,   32.0,    8.0,    6.0,    1.0,   13.0,    4.0,    1.0,   91.0,   57.0,
    39.0,   46.0,   32.0,    1.0,    1.0,  132.0,   81.0,   61.0,   57.0,   51.0,
     2.0,    1.0,  190.0,   77.0,   87.0,   58.0,   52.0,    1.0,    0.0,  199.0,
    91.0,   72.0,   79.0,   40.0,    1.0,    0.0,  128.0,   50.0,   43.0,   47.0,
    26.0,    2.0,    1.0,  129.0,   55.0,   38.0,   61.0,   29.0,    5.0,    0.0,
   168.0,   73.0,   76.0,   69.0,   51.0,    1.0,    0.0,  227.0,   94.0,   83.0,
    77.0,   56.0,    1.0,    0.0,  237.0,   80.0,   69.0,   74.0,   39.0,    5.0,
     1.0,  208.0,   99.0,   59.0,   69.0,   47.0,    8.0,    0.0,  209.0,   89.0,
    87.0,   70.0,   42.0,    0.0,    1.0,  173.0,   85.0,   63.0,   49.0,   31.0,
     1.0,    1.0,  110.0,   38.0,   26.0,   18.0,    2.0,    1.0,    1.0,    3.0,
    95.0,   35.0,   37.0,   28.0,    1.0,    0.0,   91.0,   48.0,   40.0,   43.0,
    28.0,    2.0,    0.0,   90.0,   44.0,   40.0,   47.0,   30.0,    2.0,    1.0,
   113.0,   51.0,   56.0,   38.0,   29.0,    1.0,    0.0,  124.0,   59.0,   40.0,
    38.0,   33.0,    2.0,    0.0,   93.0,   49.0,   41.0,    1.0,   17.0,    1.0,
     0.0,  126.0,   38.0,   38.0,   32.0,   15.0,    1.0,    0.0,    2.0,   70.0,
    56.0,   33.0,   22.0,    1.0,    2.0,   83.0,   36.0,   34.0,   46.0,   30.0,
     0.0,    0.0,  100.0,   47.0,   54.0,   46.0,   37.0,    2.0,    0.0,  129.0,
    57.0,   55.0,   43.0,   30.0,    2.0,    1.0,  129.0,   55.0,   45.0,   41.0,
    16.0,    0.0,    0.0,  106.0,   51.0,   42.0,   50.0,   24.0,    1.0,    2.0,
   127.0,   55.0,   41.0,   47.0,   26.0,    0.0,    0.0,  118.0,   37.0,   23.0,
    24.0,   21.0,    5.0,    0.0,   88.0,   18.0,   22.0,   23.0,   13.0,    0.0,
     1.0,   60.0,   22.0,   24.0,   15.0,    7.0,    3.0,    1.0,   61.0,   28.0,
    20.0,   16.0,   13.0,    2.0,    0.0,   67.0,   28.0,    7.0,    8.0,   11.0,
     1.0,    0.0,   53.0,   27.0,   16.0,   20.0,   13.0,    1.0,    1.0,   58.0,
    21.0,   15.0,   16.0,   14.0,    0.0,    0.0,   79.0,   30.0,   34.0,   24.0,
    25.0,    4.0,    1.0,  130.0,   70.0,   52.0,   43.0,   31.0,    7.0,    1.0,
   122.0,   59.0,   44.0,   56.0,   43.0,    6.0,    1.0,  144.0,   76.0,   60.0,
    52.0,   43.0,    3.0,    0.0,  151.0,   68.0,   53.0,   35.0,   42.0,    0.0,
     0.0,  140.0,   74.0,   63.0,   49.0,   37.0,    0.0,    0.0,  140.0,   62.0,
    66.0,   65.0,   51.0,    1.0,    2.0,  105.0,   44.0,   45.0,   27.0,   38.0,
     6.0,    0.0,  119.0,   44.0,   41.0,   54.0,   29.0,    1.0,    1.0,  137.0,
    66.0,   34.0,   58.0,   33.0,    2.0,    1.0,  138.0,   79.0,   63.0,   33.0,
    34.0,    2.0,    0.0,  112.0,   54.0,   43.0,   37.0,   11.0,    3.0,    0.0,
    72.0,   35.0,   35.0,   14.0,    8.0,    0.0,    1.0,   15.0,    8.0,    9.0,
     7.0,    6.0,    0.0,    0.0,   27.0,   11.0,   19.0,   13.0,   13.0,    1.0,
     0.0,   49.0,   31.0,   27.0,   15.0,   21.0,    1.0,    1.0,   57.0,   18.0,
    25.0,    6.0,    3.0,    1.0,    1.0,   22.0,   13.0,    6.0,    3.0,    2.0,
     6.0,    1.0,  118.0,   46.0,   48.0,   47.0,   32.0,    2.0,    1.0,  145.0,
    65.0,   83.0,   69.0,   50.0,    2.0,    0.0,  174.0,   80.0,   87.0,   75.0,
    47.0,    4.0,    0.0,  216.0,   93.0,  117.0,   64.0,   51.0,    3.0,    0.0,
   206.0,  105.0,   66.0,   71.0,   41.0,    5.0,    0.0,  153.0,   55.0,   49.0,
    40.0,   31.0,    9.0,    1.0,  112.0,   47.0,   50.0,   30.0,   23.0,    5.0,
     0.0,  132.0,   36.0,   55.0,   40.0,   37.0,    2.0,    1.0,  145.0,   53.0,
    69.0,   64.0,   42.0,    1.0,    1.0,  171.0,   82.0,   65.0,   58.0,   36.0,
     2.0,    0.0,  181.0,   86.0,   49.0,   71.0,   45.0,    0.0,    1.0,  183.0,
    56.0,   49.0,   57.0,   28.0,    1.0,    1.0,  158.0,   69.0,   58.0,   54.0,
    32.0,    5.0,    2.0,  143.0,   73.0,   54.0,   65.0,   34.0,    4.0,    1.0,
   149.0,   69.0,   64.0,   63.0,   28.0,    4.0,    1.0,   92.0,   45.0,   39.0,
    25.0,    4.0,    0.0,    0.0,    0.0,  112.0,   50.0,   25.0,   25.0,    4.0,
     0.0,    1.0,  109.0,   50.0,   25.0,   30.0,    0.0,    1.0,  102.0,   42.0,
    32.0,   44.0,   30.0,    1.0,    0.0,  128.0,   53.0,   37.0,   48.0,   30.0,
     2.0,    1.0,  149.0,   59.0,   43.0,   59.0,   20.0,    1.0,    0.0,  115.0,
    45.0,   32.0,    1.0,   22.0,    1.0,    0.0,  111.0,   57.0,   47.0,   48.0,
    32.0,    2.0,    1.0,    0.0,  113.0,   71.0,   41.0,   29.0,    3.0,    0.0,
   112.0,   53.0,   43.0,   45.0,   29.0,    2.0,    1.0,  120.0,  101.0,   57.0,
    50.0,   29.0,    3.0,    1.0,  107.0,   56.0,   49.0,   57.0,   24.0,    2.0,
     0.0,  110.0,   53.0,   37.0,   39.0,   32.0,    2.0,    0.0,   98.0,   38.0,
    44.0,   25.0,   23.0,    1.0,    0.0,   60.0,   31.0,   17.0,   18.0,   12.0,
     1.0,    0.0,   44.0,   20.0,   17.0,    9.0,   16.0,    0.0,    0.0,   45.0,
    16.0,   15.0,   12.0,   13.0,    3.0,    0.0,   57.0,   22.0,   16.0,   19.0,
     5.0,    0.0,    1.0,   47.0,   29.0,   17.0,   21.0,    8.0,    1.0,    0.0,
    54.0,   22.0,   13.0,   17.0,   18.0,    2.0,    0.0,   74.0,   42.0,   36.0,
    32.0,   32.0,    1.0,    0.0,  119.0,   45.0,   57.0,   48.0,   33.0,    3.0,
     1.0,  139.0,   66.0,   45.0,   50.0,   36.0,    3.0,    2.0,  144.0,   59.0,
    77.0,   43.0,   29.0,    3.0,    0.0,   64.0,    3.0,  166.0,   54.0,   36.0,
     3.0,    0.0,   88.0,   70.0,   45.0,   39.0,   36.0,    3.0,    2.0,  120.0,
    70.0,   50.0,   45.0,   37.0,    3.0,    0.0,   98.0,   32.0,   37.0,   34.0,
    15.0,    0.0,    0.0,   56.0,    0.0,  115.0,   28.0,   31.0,    2.0,    1.0,
   108.0,   57.0,   56.0,   51.0,   33.0,    4.0,    1.0,  151.0,   64.0,   65.0,
    68.0,   46.0,    1.0,    1.0,  161.0,   71.0,   66.0,   59.0,   37.0,    3.0,
     0.0,  158.0,   66.0,   51.0,   62.0,   48.0,    2.0,    0.0,  148.0,   77.0,
    44.0,   64.0,   41.0,    2.0,    3.0,  138.0,   73.0,   65.0,   48.0,   47.0,
     6.0,    1.0,  130.0,   50.0,   37.0,   32.0,   12.0,    0.0,    0.0,    3.0,
	 1.0,   29.0,   13.0,    7.0,    1.0,    0.0 },
{    5.0,   20.0,    2.0,    2.0,  210.0,   42.0,   46.0,   30.0,   25.0,    1.0,
     1.0,   65.0,   29.0,   25.0,   34.0,   16.0,    1.0,    1.0,   51.0,   39.0,
    32.0,   28.0,   28.0,    4.0,    2.0,  158.0,   35.0,   34.0,   31.0,   18.0,
     3.0,    1.0,   61.0,   40.0,   23.0,   12.0,   20.0,    0.0,    1.0,   68.0,
    25.0,   33.0,   35.0,   82.0,    1.0,    0.0,   79.0,   40.0,   29.0,   26.0,
    20.0,    2.0,    1.0,   75.0,   32.0,   32.0,   32.0,   27.0,    0.0,    1.0,
    57.0,   38.0,   29.0,   35.0,   17.0,    1.0,    3.0,   76.0,   42.0,   39.0,
    22.0,   18.0,    0.0,    0.0,   24.0,   27.0,   35.0,   32.0,   20.0,    2.0,
     0.0,   77.0,   39.0,   27.0,   26.0,   22.0,    3.0,    0.0,   78.0,   41.0,
    34.0,   20.0,   24.0,    1.0,    1.0,   60.0,   32.0,   16.0,    3.0,    0.0,
     0.0,    0.0,    0.0,   73.0,    8.0,   26.0,    6.0,    1.0,    0.0,   82.0,
    35.0,   36.0,   35.0,   28.0,    0.0,    1.0,   66.0,   11.0,   36.0,   15.0,
     2.0,    3.0,    1.0,   82.0,   49.0,   18.0,   32.0,   19.0,    1.0,    1.0,
    78.0,   38.0,   28.0,   31.0,   15.0,    1.0,    1.0,   40.0,   37.0,   21.0,
     0.0,   13.0,    2.0,    0.0,   90.0,   45.0,   36.0,   36.0,   13.0,    0.0,
     1.0,    0.0,   60.0,   46.0,   35.0,   29.0,    2.0,    1.0,   73.0,   45.0,
    22.0,   44.0,   14.0,    0.0,    2.0,   83.0,   32.0,   32.0,   30.0,   30.0,
     2.0,    1.0,   77.0,   31.0,   44.0,   30.0,   17.0,    4.0,    2.0,   80.0,
    36.0,   35.0,   31.0,   22.0,    0.0,    0.0,   78.0,   42.0,   27.0,   39.0,
    21.0,    2.0,    0.0,   57.0,   36.0,   32.0,   27.0,   20.0,    2.0,    1.0,
    65.0,    4.0,   26.0,   17.0,   14.0,    0.0,    0.0,   62.0,   24.0,   27.0,
    19.0,   18.0,    0.0,    0.0,   90.0,   29.0,   32.0,   33.0,   17.0,    1.0,
     1.0,   78.0,   51.0,   25.0,   28.0,   42.0,    1.0,    2.0,   94.0,   43.0,
    38.0,   26.0,   73.0,    1.0,    2.0,   93.0,   47.0,   35.0,   32.0,   22.0,
     2.0,    0.0,   84.0,   48.0,   43.0,   40.0,   18.0,    1.0,    0.0,   93.0,
    49.0,   50.0,   26.0,   23.0,    1.0,    1.0,  111.0,   52.0,   32.0,   33.0,
    38.0,    0.0,    2.0,   89.0,   39.0,   11.0,   39.0,   34.0,    3.0,    0.0,
    79.0,   42.0,   24.0,   42.0,   24.0,    0.0,    1.0,   93.0,   41.0,   29.0,
    32.0,   26.0,    1.0,    1.0,   84.0,   50.0,   26.0,   26.0,   18.0,    1.0,
     1.0,   79.0,   42.0,   42.0,   18.0,   24.0,    4.0,    1.0,   95.0,   55.0,
    34.0,   29.0,   16.0,    1.0,    1.0,   30.0,   58.0,   45.0,   33.0,   20.0,
     4.0,    0.0,   90.0,   44.0,   42.0,   40.0,   18.0,    2.0,    0.0,   92.0,
    56.0,   35.0,   39.0,   36.0,    1.0,    1.0,   71.0,   51.0,   53.0,   39.0,
    24.0,    2.0,    1.0,   85.0,   44.0,   34.0,   22.0,   23.0,    1.0,    2.0,
    71.0,   45.0,   40.0,   35.0,   14.0,    0.0,    1.0,   87.0,   43.0,   31.0,
    39.0,   16.0,    1.0,    1.0,   58.0,   24.0,    7.0,    1.0,    1.0,    0.0,
     0.0,   39.0,   19.0,    5.0,    1.0,    4.0,    0.0,    1.0,  121.0,   47.0,
    45.0,   39.0,   20.0,    1.0,    3.0,   93.0,   43.0,   39.0,   49.0,   35.0,
     1.0,    0.0,   84.0,   62.0,   38.0,   43.0,   29.0,    4.0,    1.0,   39.0,
    47.0,   47.0,   36.0,   32.0,    0.0,    0.0,   91.0,   32.0,   10.0,   28.0,
    22.0,    0.0,    1.0,   25.0,   34.0,    6.0,   39.0,   33.0,    1.0,    1.0,
    31.0,   40.0,   40.0,   31.0,   22.0,    1.0,    0.0,   69.0,   48.0,   40.0,
    27.0,   19.0,    0.0,    1.0,   32.0,    9.0,   10.0,   21.0,   22.0,    1.0,
     1.0,   24.0,   40.0,   25.0,   38.0,   35.0,    1.0,    0.0,   84.0,   30.0,
    39.0,   51.0,   28.0,    0.0,    2.0,   71.0,   42.0,   30.0,   36.0,   18.0,
     0.0,    0.0,   84.0,   42.0,   21.0,   20.0,    0.0,    0.0,    1.0,    0.0,
   120.0,   57.0,   33.0,   21.0,    0.0,    0.0,   91.0,   35.0,   32.0,   24.0,
    33.0,    1.0,    0.0,   77.0,   25.0,   30.0,   27.0,   23.0,    2.0,    3.0,
    84.0,   53.0,   35.0,   42.0,   28.0,    2.0,    1.0,   97.0,   29.0,   61.0,
    34.0,   18.0,    0.0,    1.0,   68.0,   23.0,   20.0,    3.0,   18.0,    2.0,
     3.0,  132.0,   48.0,   25.0,   31.0,   21.0,    1.0,    0.0,    1.0,   97.0,
    46.0,   42.0,   16.0,    1.0,    0.0,   75.0,   37.0,   23.0,   29.0,   22.0,
     0.0,    3.0,   66.0,   60.0,   32.0,   29.0,   24.0,    0.0,    0.0,   91.0,
    45.0,   39.0,   27.0,   16.0,    2.0,    1.0,   90.0,   42.0,   28.0,   37.0,
    36.0,    1.0,    1.0,   75.0,   35.0,   39.0,   35.0,   29.0,    0.0,    1.0,
    98.0,   41.0,   36.0,    8.0,   12.0,    1.0,    0.0,   71.0,   37.0,   37.0,
    32.0,    7.0,    4.0,    0.0,   68.0,   20.0,   24.0,   35.0,   14.0,    3.0,
     2.0,   37.0,   28.0,   17.0,   15.0,   14.0,    0.0,    2.0,   78.0,   34.0,
    12.0,   19.0,   15.0,    5.0,    1.0,   99.0,   26.0,   29.0,   30.0,   27.0,
     3.0,    1.0,   87.0,   45.0,   26.0,   27.0,   21.0,    0.0,    1.0,   83.0,
    28.0,   30.0,   16.0,   10.0,    2.0,    0.0,   30.0,   17.0,   18.0,   17.0,
    20.0,    2.0,    2.0,   51.0,   39.0,   32.0,   35.0,   23.0,    2.0,    1.0,
    96.0,   44.0,   47.0,   37.0,   21.0,    0.0,    0.0,  115.0,   49.0,   48.0,
    33.0,   37.0,    1.0,    1.0,   92.0,   52.0,   23.0,   14.0,   31.0,    2.0,
     2.0,   75.0,   36.0,   23.0,   35.0,   24.0,    4.0,    1.0,   86.0,   50.0,
    35.0,   36.0,   32.0,    3.0,    0.0,   93.0,   32.0,   35.0,   26.0,   16.0,
     0.0,    0.0,   99.0,   52.0,   32.0,   33.0,   24.0,    1.0,    0.0,   87.0,
    39.0,   26.0,   59.0,   20.0,    0.0,    2.0,   81.0,   42.0,   38.0,   30.0,
    22.0,    4.0,    2.0,   68.0,   46.0,   34.0,   34.0,   18.0,    2.0,    0.0,
    56.0,   37.0,   17.0,   18.0,    3.0,    0.0,    0.0,    7.0,    3.0,    2.0,
     1.0,    0.0,    0.0,    0.0,    7.0,    3.0,    3.0,    2.0,    2.0,    0.0,
     0.0,    9.0,    5.0,    4.0,    7.0,    4.0,    0.0,    0.0,   16.0,    3.0,
     3.0,    2.0,    0.0,    0.0,    1.0,   11.0,    7.0,    6.0,    8.0,    3.0,
     3.0,    1.0,  112.0,   78.0,   47.0,   36.0,   36.0,    1.0,    0.0,   97.0,
    44.0,   36.0,   81.0,   33.0,    2.0,    0.0,   99.0,   32.0,   27.0,   33.0,
    25.0,    2.0,    0.0,   77.0,   44.0,   45.0,   32.0,   30.0,    1.0,    1.0,
    84.0,   45.0,   31.0,   33.0,   30.0,    0.0,    2.0,   77.0,   16.0,   35.0,
    30.0,   23.0,    1.0,    1.0,   75.0,   10.0,   39.0,   13.0,   27.0,    1.0,
     1.0,  105.0,   47.0,   31.0,   39.0,   30.0,    3.0,    1.0,   69.0,   47.0,
    35.0,   39.0,   38.0,    2.0,    0.0,   85.0,   59.0,   42.0,   45.0,   29.0,
     2.0,    2.0,  107.0,   58.0,   42.0,   36.0,   18.0,    0.0,    0.0,   61.0,
    32.0,   36.0,   25.0,   24.0,    0.0,    0.0,   85.0,   32.0,   18.0,   43.0,
    23.0,    4.0,    2.0,   96.0,   40.0,   32.0,   31.0,   20.0,    1.0,    0.0,
    74.0,   31.0,   39.0,   31.0,   21.0,    2.0,    0.0,   78.0,   30.0,   19.0,
    20.0,    3.0,    2.0,    0.0,    1.0,   92.0,   60.0,   38.0,   24.0,    0.0,
     0.0,    0.0,   99.0,   43.0,   31.0,   25.0,    2.0,    1.0,   78.0,   38.0,
    33.0,   32.0,   32.0,    1.0,    0.0,   87.0,   24.0,   41.0,   48.0,   26.0,
     0.0,    1.0,   85.0,   32.0,   86.0,   39.0,   11.0,    0.0,    1.0,   79.0,
    71.0,   22.0,    2.0,    9.0,    2.0,    1.0,   95.0,   56.0,   35.0,   36.0,
    23.0,    2.0,    0.0,    0.0,   85.0,   63.0,   38.0,   11.0,    2.0,    0.0,
    89.0,   50.0,   33.0,   31.0,   24.0,    2.0,    0.0,   86.0,   58.0,   35.0,
    29.0,   23.0,    3.0,    0.0,   99.0,   65.0,   37.0,   27.0,   20.0,    3.0,
     0.0,  114.0,   42.0,   38.0,   35.0,   13.0,    0.0,    1.0,   32.0,   44.0,
    33.0,   26.0,   21.0,    3.0,    1.0,   25.0,   28.0,   21.0,   32.0,   11.0,
     2.0,    0.0,   68.0,   15.0,   14.0,   20.0,   10.0,    1.0,    2.0,   57.0,
    16.0,   31.0,   22.0,   15.0,    1.0,    1.0,   67.0,   10.0,   26.0,   28.0,
    14.0,    0.0,    0.0,   80.0,   30.0,   22.0,   38.0,   24.0,    1.0,    3.0,
    75.0,   35.0,   26.0,   26.0,   18.0,    1.0,    2.0,   75.0,   34.0,   50.0,
    28.0,   27.0,    2.0,    2.0,   77.0,   50.0,   31.0,   33.0,   28.0,    3.0,
     0.0,   80.0,   46.0,   33.0,   38.0,   17.0,    2.0,    0.0,   71.0,   43.0,
    42.0,   37.0,   27.0,    1.0,    2.0,   40.0,    1.0,   78.0,   42.0,   13.0,
     1.0,    2.0,   94.0,   29.0,   49.0,   29.0,   23.0,    0.0,    1.0,   94.0,
    48.0,   35.0,   24.0,   30.0,    1.0,    2.0,   94.0,   66.0,   39.0,    7.0,
    17.0,    0.0,    1.0,   32.0,    5.0,   70.0,   52.0,   35.0,    1.0,    0.0,
    87.0,   36.0,   17.0,   35.0,   18.0,    1.0,    2.0,   94.0,   53.0,   43.0,
    37.0,   34.0,    0.0,    0.0,   92.0,   48.0,   44.0,   45.0,   28.0,    1.0,
     0.0,  111.0,   33.0,   42.0,   37.0,   29.0,    2.0,    2.0,  115.0,   47.0,
    36.0,   13.0,   30.0,    3.0,    1.0,   76.0,   48.0,   39.0,   35.0,   15.0,
     0.0,    0.0,   73.0,   14.0,   30.0,   16.0,    5.0,    2.0,    0.0,    1.0,
	 1.0,   20.0,    5.0,    7.0,    2.0,    0.0 }
    };

    private double max = 850;
    private int numData = data[0].length;
    private final double w2 = (double) Math.sqrt(2);
	
    private Point2D.Double center;
    private Point2D.Double[] wheelPoint = new Point2D.Double[8];
    private Point2D.Double[] timePoint = new Point2D.Double[2];

    private Line2D.Double[] wheelAxis = new Line2D.Double[8];
    private Line2D.Double timeAxis;

    private GeneralPath arrowTemplate;
    private GeneralPath[] wheelArrow = new GeneralPath[8];
    private GeneralPath timeArrow;

    private GeneralPath wheel;

    private Color [][] featColor = {
	{ new Color(255,255,  0), new Color(  0,255,  0), new Color(255,255,255), new Color(  0,255,255),
	  new Color(255,  0,255), new Color(  0,  0,  0), new Color(255,  0,  0), new Color(  0,  0,255) },

	{ new Color(210,210,128), new Color(128,210,128), new Color(192,192,192), new Color(128,210,210),
	  new Color(210,128,210), new Color(128,128,128), new Color(210,128,128), new Color(128,128,210) },
    };
    private int wi = 0;

    private static double [] sintab = new double [360];
    private static double [] costab = new double [360];

    private Rotator rotL;
    private Rotator rotR;

    private Zoomer zoomP;
    private Zoomer zoomM;

    private Shifter shiftL;
    private Shifter shiftR;

    private Scroller scroll;
    private Labeler label;

    private Labeler[] featLabel = new Labeler[8];

    private int numLines;
    private int offset;
    
    private int[] paintIndex = new int[6];

    private boolean numLineSwitch;

    private Point mp;

    public TimeWheel() {

	super();

	numLines = 30;
	offset = 0;
	numLineSwitch = false;

	setLayout(null);
	rotL = new Rotator(true);
	rotR = new Rotator(false);
	add(rotL);
	add(rotR);
	moveToFront(rotL);
	moveToFront(rotR);

	zoomP = new Zoomer(true);
	zoomM = new Zoomer(false);
	add(zoomP);
	add(zoomM);
	moveToFront(zoomP);
	moveToFront(zoomM);

	shiftL = new Shifter(true);
	shiftR = new Shifter(false);
	add(shiftL);
	add(shiftR);
	moveToFront(shiftL);
	moveToFront(shiftR);

	scroll = new Scroller();
	add(scroll);
	moveToFront(scroll);

	label = new Labeler();
	add(label);
	moveToFront(label);

	center = new Point2D.Double();
	
	for (int i = 0; i < 8; i++) {
	    wheelPoint[i] = new Point2D.Double();
	    wheelAxis[i] = new Line2D.Double();
	    wheelArrow[i] = new GeneralPath();
	    featLabel[i] = new Labeler();
	    add(featLabel[i]);
	}

	for (int i = 0; i < 2; i++) {
	    timePoint[i] = new Point2D.Double();
	}
	timeAxis = new Line2D.Double();
	timeArrow = new GeneralPath();

	arrowTemplate = new GeneralPath();
	arrowTemplate.moveTo( 0.0f,  0.0f);
	arrowTemplate.lineTo(-9.0f, -3.0f);
	arrowTemplate.lineTo(-9.0f,  3.0f);
	arrowTemplate.closePath();

	wheel = new GeneralPath();

	for (int i=0; i<360; i++) {
	    double w = (double)i/180 * Math.PI;
	    sintab[i] = Math.sin(w);
	    costab[i] = Math.cos(w);
	}
    	
	addMouseListener(this);
	addMouseMotionListener(this);

	setPreferredSize(new Dimension(400,400));
	
	reLayout();
	repaint();
    }

    public void setBounds(int x, int y, int w, int h) {
	super.setBounds(x,y,w,h);
	reLayout();
    }

    public void reLayout() {
	
	int w = getWidth();
	int h = getHeight();

	center.setLocation((double) w/2, (double) h/2);

	double len = (w<h) ? (double)w/3.0 : (double)h/3.0;
	double len2 = len/2.0;
	double lenw2 = len/w2;
	int len4 = (int) (len/4.0);

	rotL.setSize(len4, len4);
	rotR.setSize(len4, len4);
	rotL.setLocation((int)(center.x-len2-lenw2),(int)(center.y-len2-lenw2));
	rotR.setLocation((int)(center.x+len2+lenw2-len4),(int)(center.y-len2-lenw2));

	zoomP.setSize(len4, len4);
	zoomM.setSize(len4, len4);
	zoomP.setLocation((int)(center.x-len2-lenw2),(int)(center.y+len2+lenw2-len4));
	zoomM.setLocation((int)(center.x+len2+lenw2-len4),(int)(center.y+len2+lenw2-len4));

	shiftL.setSize(len4, len4);
	shiftR.setSize(len4, len4);
	shiftL.setLocation((int)(center.x-len2-len4-5),(int)(center.y-len4/2));
	shiftR.setLocation((int)(center.x+len2+5),(int)(center.y-len4/2));

	timePoint[0].setLocation(center.x - len2, center.y);
	timePoint[1].setLocation(center.x + len2, center.y);
	timeAxis.setLine(timePoint[0], timePoint[1]);

	double t = len/(double)numData;
	scroll.setBounds((int) (timePoint[0].getX()+t*offset), (int)(timePoint[0].getY()-(len4/6)), (int)(numLines*t), Math.round(len4/3));

	wheelPoint[0].setLocation( -len2        ,  +len2 + lenw2);
	wheelPoint[1].setLocation( -len2 - lenw2,  +len2        );
	wheelPoint[2].setLocation( -len2 - lenw2,  -len2);
	wheelPoint[3].setLocation( -len2        ,  -len2 - lenw2);

	wheelPoint[4].setLocation( +len2        ,  -len2 - lenw2);
	wheelPoint[5].setLocation( +len2 + lenw2,  -len2        );
	wheelPoint[6].setLocation( +len2 + lenw2,  +len2        );
	wheelPoint[7].setLocation( +len2        ,  +len2 + lenw2);

	
	for ( int i = 0; i < 8; i++ ) {
	    double x = wheelPoint[i].getX();
	    double y = wheelPoint[i].getY();
	    wheelPoint[i].setLocation( center.x + (x * costab[wi] - y * sintab[wi]),
				       center.y + (x * sintab[wi] + y * costab[wi]));
	}

	wheel.reset();
	wheel.moveTo((float)wheelPoint[0].getX(), (float)wheelPoint[0].getY());
	for (int i = 1; i < 8; i++ ) { wheel.lineTo((float)wheelPoint[i].getX(), (float)wheelPoint[i].getY()); }
	wheel.closePath();

	wheelAxis[0].setLine(wheelPoint[0], wheelPoint[1]);
	wheelAxis[1].setLine(wheelPoint[1], wheelPoint[2]);
	wheelAxis[2].setLine(wheelPoint[2], wheelPoint[3]);
	wheelAxis[3].setLine(wheelPoint[3], wheelPoint[4]);
	wheelAxis[4].setLine(wheelPoint[0], wheelPoint[7]);
	wheelAxis[5].setLine(wheelPoint[7], wheelPoint[6]);
	wheelAxis[6].setLine(wheelPoint[6], wheelPoint[5]);
	wheelAxis[7].setLine(wheelPoint[5], wheelPoint[4]);

	AffineTransform at = new AffineTransform();
	for (int i = 0; i < 8; i++) {
	    
	    double diffX = wheelAxis[i].getX2() - wheelAxis[i].getX1();
	    double diffY = wheelAxis[i].getY2() - wheelAxis[i].getY1();
	    
	    double q = (len != 0) ? (diffY/len) : (diffY/Double.MIN_VALUE);

	    // double-Fehler abfangen q für sin() darf nicht größer +-1 sein
	    if ( q > 1 ) { q = 1; } else { if ( q < -1 ) { q = -1; } };
	    
	    double winkel = Math.asin(q);
	    
	    if ( diffX < 0 ) {
		if ( diffY < 0 ) {
		    // - -
		    winkel += Math.PI;
		}
		else {
		    // - +
		    winkel += Math.PI;
		}
	    }
	    else {
		if ( diffY < 0 ) {
		    // + -
		    winkel = -winkel;
		}
		else {
		    // + +
		    winkel = -winkel;
		}
	    }

	    //System.out.println(i+" -> ("+diffX+","+diffY+" = "+winkel*180/Math.PI+" ("+len+")");

	    at.setToTranslation(wheelAxis[i].getX2(),wheelAxis[i].getY2());
	    at.rotate(-winkel);
	    wheelArrow[i] = (GeneralPath) arrowTemplate.clone();
	    wheelArrow[i].transform(at);
	}
	at.setToTranslation(timeAxis.getX2(), timeAxis.getY2());
	timeArrow = (GeneralPath) arrowTemplate.clone();
	timeArrow.transform(at);


	if ( wi < 22 ) {
	    paintIndex[0] = 0;
	    paintIndex[1] = 2;
	    paintIndex[2] = 7;
	    paintIndex[3] = 5;
	    paintIndex[4] = 3;
	    paintIndex[5] = 4;
	}
	else { 
	    if ( wi < 22 + 45 ) {
		paintIndex[0] = 4;
		paintIndex[1] = 1;
		paintIndex[2] = 3;
		paintIndex[3] = 6;
		paintIndex[4] = 2;
		paintIndex[5] = 5;
	    }
	    else {
		if ( wi < 22 + 90 ) {
		    paintIndex[0] = 5;
		    paintIndex[1] = 0;
		    paintIndex[2] = 2;
		    paintIndex[3] = 7;
		    paintIndex[4] = 1;
		    paintIndex[5] = 6;
		}
		else {
		    paintIndex[0] = 6;
		    paintIndex[1] = 4;
		    paintIndex[2] = 1;
		    paintIndex[3] = 3;
		    paintIndex[4] = 0;
		    paintIndex[5] = 7;
		}
	    }
	}
    }
    
    public Shape toPoint(Point2D p) {
	Rectangle r = new Rectangle((int)p.getX()-2,(int)p.getY()-2,5,5);
	return (Shape) r;
    }

    public void incNumLines() {
	if ( numLines < numData ) {
	    numLines++;
	    if ( offset+numLines > numData ) {
		offset = numData - numLines;
	    }
	    else {
		if ( numLineSwitch ) {
		    decOffset();
		}
		numLineSwitch = ! numLineSwitch;
	    }
	}
    }

    public void decNumLines() {
	if ( numLines > 0 ) {
	    numLines--;
	    if ( numLineSwitch ) {
		incOffset();
	    }
	    numLineSwitch = ! numLineSwitch;
	}
    }

    public void incOffset() {
	if ( offset+numLines < numData ) {
	    offset++;
	}
    }

    public void decOffset() {
	if ( offset > 0 ) {
	    offset--;
	}
    }

    public void setOffset(int ofs) {
	if ( ofs < 0 ) { ofs = 0; }
	if ( ofs+numLines > numData ) { ofs = numData-numLines; }
	offset = ofs;
    }
    
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) { label.setVisible(false); mp = null;}
    public void mouseDragged(MouseEvent e) {}

    public void mouseMoved(MouseEvent e) {
	mp = e.getPoint();
	repaint();
	//Point mp = e.getPoint();
	double minDist = Double.MAX_VALUE;
	double d = 0;
	int minAxis = 0;
	for ( int i = 0; i < 9; i++) {
	    if ( i < 8 ) {
		d = wheelAxis[i].ptLineDist((double) mp.x, (double) mp.y);
	    }
	    else {
		d = timeAxis.ptLineDist((double) mp.x, (double) mp.y);
	    }
	    if ( d < minDist ) {
		minDist = d;
		minAxis = i;
	    }
	}

	if (minDist < 2) {
	    label.setLocation((mp.x < getWidth()/2) ? mp.x : mp.x - label.getWidth(), mp.y-label.getHeight());
	    if ( minAxis < 8 ) { 
		label.setLabel("Feature Axis: "+minAxis+" Scale: ["+0+".."+(int)max+"]");
	    }
	    else {
		label.setLabel("Time Axis: "+0+"--["+offset+".."+(offset+numLines-1)+"]--"+(numData-1));
	    }
	    label.setVisible(true);
	}
	else {
	    label.setVisible(false);
	}
    }

    public void paintComponent(Graphics g) {
	
	Graphics2D g2 = (Graphics2D) g;
	g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, // Antialiasing setzen
			     (aa) ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF );
	double x;
	double y;

	double diff = timeAxis.getX2() - timeAxis.getX1();
	double step = diff/numLines;
	double step2 = step/2;
	
	x = timeAxis.getX1();
	y = timeAxis.getY1();
	double minDist = Double.MAX_VALUE;
	int minIndex = -1;
	double d = 0;
	
	try {
	    if ( Math.abs(mp.y - y) < 10 ) {
		for ( int i = 0; i < numLines; i++ ) {
		    d = Math.abs(mp.x-(x+step2));
		    //System.out.println(i+" "+d);
		    if ( (d < 3) && (d < minDist) ) {
			minDist = d;
			minIndex = i;
		    }
		    x += step;
		}
	    }
	} catch ( NullPointerException e) { /* mouse has exited */ }

	if ( minIndex == -1 ) {
	    for (int i = 0; i < 8; i++) {
		featLabel[i].setVisible(false);
	    }
	}
	
	for (int f = 0; f < 6; f++) {
	    int fIndex = paintIndex[f];
	    x = timeAxis.getX1();
	    y = timeAxis.getY1();
	    
	    int cI = (f>3) ? 0 : 1;
	    g2.setColor(featColor[cI][fIndex]);

	    for (int i = 0; i < numLines; i++) {
		Point2D.Double tp = new Point2D.Double(x+step2, y);
		Point2D.Double fp = new Point2D.Double();
		Line2D.Double li = new Line2D.Double();
		double val = data[fIndex%7][offset+i];
		double t = val/max;
		fp.x = wheelAxis[fIndex].x1 + t * (wheelAxis[fIndex].x2-wheelAxis[fIndex].x1);
		fp.y = wheelAxis[fIndex].y1 + t * (wheelAxis[fIndex].y2-wheelAxis[fIndex].y1);
		li.setLine(tp, fp);
		g2.draw(li);
		if ( i == minIndex ) {
		    String s = "#"+(offset+i)+"="+val;
		    int w2 = (g2.getFontMetrics().stringWidth(s)+3)/2;
		    Rectangle2D.Double r = new Rectangle2D.Double();
		    r.setFrameFromCenter(fp, new Point2D.Double(fp.x-w2,fp.y-6));
		    featLabel[fIndex].setBounds(r.getBounds());
		    featLabel[fIndex].setLabel(s);
		    featLabel[fIndex].setVisible(true);
		    //Color c = g2.getColor();
		    //g2.setColor(Color.WHITE);
		    //g2.fill(r);
		    //g2.setColor(Color.BLACK);
		    //g2.draw(r);
		    //g2.setColor(c);
		    //g2.drawString(s,(int)fp.x-w2,(int)fp.y+3);
		}
		x += step;
	    }

	    double value, pastAvg, futureAvg,markScale;
	    int index,num;
	    double dx,dy,mx,my,rx,ry;

	    pastAvg = 0;
	    index = offset-1;
	    num = 0;
	    while ( (index >= 0) && (num <= numLines) ) {
		pastAvg += data[fIndex%7][index];
		index--;
		num++;
	    }
	    if ( num != 0 ) { pastAvg /= num; }
	    else { pastAvg = 0; }

	    futureAvg = 0;
	    index = offset+numLines+1;
	    num = 0;
	    while ( (index < numData) && (num <= numLines) ) {
		futureAvg += data[fIndex%7][index];
		index++;
		num++;
	    }
	    if ( num != 0 ) { futureAvg /= num; }
	    else { futureAvg = 0; }

	    dx = wheelAxis[fIndex].x2-wheelAxis[fIndex].x1;
	    dy = wheelAxis[fIndex].y2-wheelAxis[fIndex].y1;
	     mx = dy*0.05;
	     my = -dx*0.05;
	     rx = dx*0.05;
	     ry = dy*0.05;
	    markScale = pastAvg/max;
	    dx *= markScale;
	    dy *= markScale;
	    if (fIndex > 3) { mx = -mx; my = -my; }
	    GeneralPath gp = new GeneralPath();
	    gp.moveTo((float)(wheelAxis[fIndex].x1+dx), (float)(wheelAxis[fIndex].y1+dy));
	    gp.lineTo((float)(wheelAxis[fIndex].x1+dx+2*mx), (float)(wheelAxis[fIndex].y1+dy+2*my));
	    gp.lineTo((float)(wheelAxis[fIndex].x1+dx+mx-rx), (float)(wheelAxis[fIndex].y1+dy+my-ry));
	    gp.closePath();

	    g2.setColor(featColor[cI][fIndex]);
	    g2.fill(gp);
	    g2.setColor(Color.DARK_GRAY);
	    g2.draw(gp);

	    dx = wheelAxis[fIndex].x2-wheelAxis[fIndex].x1;
	    dy = wheelAxis[fIndex].y2-wheelAxis[fIndex].y1;
	     mx = dy*0.05;
	     my = -dx*0.05;
	     rx = dx*0.05;
	     ry = dy*0.05;
	    markScale = futureAvg/max;
	    dx *= markScale;
	    dy *= markScale;
	    if (fIndex > 3) { mx = -mx; my = -my; }
	    gp = new GeneralPath();
	    gp.moveTo((float)(wheelAxis[fIndex].x1+dx), (float)(wheelAxis[fIndex].y1+dy));
	    gp.lineTo((float)(wheelAxis[fIndex].x1+dx+2*mx), (float)(wheelAxis[fIndex].y1+dy+2*my));
	    gp.lineTo((float)(wheelAxis[fIndex].x1+dx+mx+rx), (float)(wheelAxis[fIndex].y1+dy+my+ry));
	    gp.closePath();

	    g2.setColor(featColor[cI][fIndex]);
	    g2.fill(gp);
	    g2.setColor(Color.DARK_GRAY);
	    g2.draw(gp);

	    //System.out.println("NumVal: "+numLines+
	    //		       " Offs: "+offset+
	    //		       " Past: "+pastAvg+
	    //		       " Futu: "+futureAvg);

	}

	g2.setColor(Color.WHITE);
	g2.draw(timeAxis);
	g2.fill(timeArrow);
	if ( step > 3 ) {
	    x = timeAxis.getX1();
	    y = timeAxis.getY1();
	    for (int i = 0; i < numLines; i++) {
		g2.draw(new Line2D.Double(x, y-2, x, y+2));
		x += step;
	    }
	}

	g2.setColor(Color.BLACK);
	for ( int i = 0; i < 8; i++) {
	    g2.draw(wheelAxis[i]);
	    g2.fill(wheelArrow[i]);
	}
    }

/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
    public class Labeler extends JComponent {

	private String str;
	public Labeler() {
	    
	    super();
	    
	    str = "LabelString";
	    
	    setOpaque(false);                    // ..
	    setVisible(false);                   // .
	    setDoubleBuffered(true);             // .
	    setSize(70,15);
	}

	public void setBounds(int x, int y, int w, int h) {
	    super.setBounds(x,y,w,15);
	}

	public void setLabel(String s) {
	    str = s;
	    repaint();
	}
	
	public void paintComponent(Graphics g) {
	    
	    Graphics2D g2 = (Graphics2D) g;
	    g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, // Antialiasing setzen
	    			 (aa) ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF );

	    setSize(g2.getFontMetrics().stringWidth(str)+3, getHeight());

	    Rectangle b = getBounds();
	    b.x = 0;
	    b.y = 0;
	    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f));
	    g2.setColor(new Color(255,255,255));
	    //g2.setColor(Color.WHITE);
	    g2.fill(b);
	    b.width--;
	    b.height--;
	    g2.setColor(Color.DARK_GRAY);
	    //g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
	    g2.draw(b);
	    g2.drawString(str,b.x+1,b.height-3);
	}
    }

/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
    public class Scroller extends JComponent {

	private boolean inside;
	private Point mp;

	public Scroller() {
	    
	    super();
	    
	    inside = false;
	    
	    setOpaque(false);                    // ..
	    setVisible(true);                    // .
	    setDoubleBuffered(true);             // .
	    
	    addMouseListener( new MouseAdapter() {
		    public void mousePressed(MouseEvent e) {
			mp = e.getPoint();
		    }
		    public void mouseReleased(MouseEvent e) {
		    }
		    public void mouseEntered(MouseEvent e) {
			inside = true;
			repaint();
		    }
		    public void mouseExited(MouseEvent e) {
			inside = false;
			repaint();
		    }
		});

	    addMouseMotionListener( new MouseMotionAdapter() {

		    public void mouseDragged(MouseEvent e) {
			
			// neu Scroller Position berechnen
			int x = getLocation().x - mp.x + e.getPoint().x;

			// daraus neues Offset ableiten
			int l = (int)timeAxis.x2 - (int)timeAxis.x1;
			double t = (x - timeAxis.x1) / l;
			((TimeWheel)getParent()).setOffset((int)(t * numData));

			// durch reLayout wird auch an neues Offset angepasste
			// Scrollerposition bestimmt und neu gemalt
			((TimeWheel)getParent()).reLayout();
			((TimeWheel)getParent()).repaint();

			//System.out.println(t+" "+timeAxis.x1+" "+timeAxis.x2+" "+l+" "+lp.x+" "+offset);
		    }
		});
	    
	}
	
	public void setBounds(int x, int y, int w, int h) {
	    super.setBounds(x,y,Math.max(w,3),h);
	}
	
	public void paintComponent(Graphics g) {
	    
	    Graphics2D g2 = (Graphics2D) g;
	    g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, // Antialiasing setzen
	    			 (aa) ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF );
	    Rectangle b = getBounds();
	    b.x = 0;
	    b.y = 0;
	    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f));
	    g2.setColor((inside) ? new Color(255,255,190) : Color.LIGHT_GRAY);
	    g2.fill(b);
	    b.width--;
	    b.height--;
	    g2.setColor(Color.DARK_GRAY);
	    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
	    g2.draw(b);
	}
    }

/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
    public class Rotator extends JComponent {
	
	private boolean left;
	private boolean inside;
	private javax.swing.Timer timer;
	private GeneralPath rot;

	public Rotator(boolean l) {
	    
	    super();

	    inside = false;
	    left = l;
	    rot = new GeneralPath();

	    ActionListener taskPerformer;	
	    int delay;
	    taskPerformer = new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
			if (left) {
			    if ( wi > 0 ) {
				wi--;
				((TimeWheel)getParent()).reLayout();
				getParent().repaint();
			    }
			}
			else {
			    if ( wi < 135 ) {
				wi++;
				((TimeWheel)getParent()).reLayout();
				getParent().repaint();
			    }
			}
		    }
		};
	    delay = 0; //milliseconds
	    timer = new javax.swing.Timer(delay, taskPerformer);
	    
	    setOpaque(false);                    // ..
	    setVisible(true);                    // .
	    setDoubleBuffered(true);             // .

	    addMouseListener( new MouseAdapter() {
		    public void mousePressed(MouseEvent e) {
			timer.start();
		    }
		    public void mouseReleased(MouseEvent e) {
			timer.stop();
		    }
		    public void mouseEntered(MouseEvent e) {
			inside = true;
			repaint();
		    }
		    public void mouseExited(MouseEvent e) {
			inside = false;
			repaint();
		    }
		});
	}

	public void setBounds(int x, int y, int w, int h) {
	    super.setBounds(x,y,w,h);
	    reLayout();
	}

	public boolean contains(Point p) {
	    return rot.contains(p);
	}

	public boolean contains(int x, int y) {
	    boolean b = rot.contains(x,y);
	    return rot.contains(x,y);
	}

	public void reLayout() {
	
	    int w = getWidth();
	    int h = getHeight();

	    float len = (float) ((w<h) ? w : h);
	    float len6 = len/6.0f;

	    rot.reset();
	    if (left) {
	    	rot.moveTo(0*len6, 4*len6);
	    	rot.lineTo(1*len6, 4*len6);
		rot.append(new Arc2D.Double(new Rectangle2D.Double(1*len6, 0*len6, 10*len6, 8*len6), 180, -90, Arc2D.OPEN),true);
	    	rot.lineTo(6*len6-1, 0*len6);
	    	rot.lineTo(6*len6-1, 2*len6);
		rot.append(new Arc2D.Double(new Rectangle2D.Double(3*len6, 2*len6, 6*len6, 4*len6), 90, 90, Arc2D.OPEN),true);
	    	rot.lineTo(4*len6, 4*len6);
	    	rot.lineTo(2*len6, 6*len6-1);
	    }
	    else {
		rot.moveTo(0*len6, 0*len6);
		rot.append(new Arc2D.Double(new Rectangle2D.Double(-5*len6, 0*len6, 10*len6, 8*len6), 90, -90, Arc2D.OPEN),true);
		rot.lineTo(5*len6, 4*len6);
		rot.lineTo(6*len6-1, 4*len6);
	    	rot.lineTo(4*len6, 6*len6-1);
	    	rot.lineTo(2*len6, 4*len6);
	    	rot.lineTo(3*len6, 4*len6);
		rot.append(new Arc2D.Double(new Rectangle2D.Double(-3*len6, 2*len6, 6*len6, 4*len6), 0, 90, Arc2D.OPEN),true);
		rot.lineTo(0*len6, 2*len6);
	    }
	    rot.closePath();
	}

	public void paintComponent(Graphics g) {
	    
	    Graphics2D g2 = (Graphics2D) g;
	    g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, // Antialiasing setzen
	    			 (aa) ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF );
	    g2.setColor((inside) ? new Color(255,255,190) : Color.LIGHT_GRAY);
	    g2.fill(rot);
	    g2.setColor(Color.GRAY);
	    g2.draw(rot);
	}
    }


/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
    public class Zoomer extends JComponent {
	
	private boolean plus;
	private boolean inside;
	private javax.swing.Timer timer;
	private GeneralPath zoom;
	
	public Zoomer(boolean p) {
	    
	    super();

	    inside = false;
	    plus = p;
	    zoom = new GeneralPath();
	    
	    ActionListener taskPerformer;	
	    int delay;
	    taskPerformer = new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
			
			if (plus) {
			    if ( numLines > 1 ) {
				((TimeWheel)getParent()).decNumLines();
				((TimeWheel)getParent()).reLayout();
				getParent().repaint();
			    }
			}
			else {
			    if ( numLines < numData ) {
				((TimeWheel)getParent()).incNumLines();
				((TimeWheel)getParent()).reLayout();
				getParent().repaint();
			    }
			}
		    }
		};
	    delay = 0; //milliseconds
	    timer = new javax.swing.Timer(delay, taskPerformer);
	    
	    setOpaque(false);                    // ..
	    setVisible(true);                    // .
	    setDoubleBuffered(true);             // .

	    addMouseListener( new MouseAdapter() {
		    public void mousePressed(MouseEvent e) {
			timer.start();
		    }
		    public void mouseReleased(MouseEvent e) {
			timer.stop();
		    }
		    public void mouseEntered(MouseEvent e) {
			inside = true;
			repaint();
		    }
		    public void mouseExited(MouseEvent e) {
			inside = false;
			repaint();
		    }
		});
	}

	public void setBounds(int x, int y, int w, int h) {
	    super.setBounds(x,y,w,h);
	    reLayout();
	}

	public boolean contains(Point p) {
	    return zoom.contains(p);
	}

	public boolean contains(int x, int y) {
	    return zoom.contains(x,y);
	}

	public void reLayout() {
	
	    int w = getWidth();
	    int h = getHeight();

	    float len = (float) ((w<h) ? w : h);
	    float len6 = len/6.0f;

	    zoom.reset();
	    if (plus) {
		zoom.moveTo(0*len6, 2*len6);
		zoom.lineTo(2*len6, 2*len6);
		zoom.lineTo(2*len6, 0*len6);
		zoom.lineTo(4*len6, 0*len6);
		zoom.lineTo(4*len6, 2*len6);
		zoom.lineTo(6*len6-1, 2*len6);
		zoom.lineTo(6*len6-1, 4*len6);
		
		zoom.lineTo(4*len6, 4*len6);
		zoom.lineTo(4*len6, 6*len6-1);
		zoom.lineTo(2*len6, 6*len6-1);
		zoom.lineTo(2*len6, 4*len6);
		zoom.lineTo(0*len6, 4*len6);

	    }
	    else {
		zoom.moveTo(0*len6, 2*len6);
		zoom.lineTo(6*len6-1, 2*len6);
		zoom.lineTo(6*len6-1, 4*len6);
		zoom.lineTo(0*len6, 4*len6);
	    }
	    zoom.closePath();
	}

	public void paintComponent(Graphics g) {
	    
	    Graphics2D g2 = (Graphics2D) g;
	    g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, // Antialiasing setzen
	    			 (aa) ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF );
	    g2.setColor((plus) ? new Color(255,0,0) : new Color(0,220,0));
	    if ( inside ) { g2.setColor(new Color(255,255,190)); }
	    g2.fill(zoom);
	    g2.setColor((plus) ? new Color(180,0,0) : new Color(0,180,0));
	    g2.draw(zoom);
	}
    }


/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
    public class Shifter extends JComponent {
	
	private boolean left;
	private boolean inside;
	private javax.swing.Timer timer;
	private GeneralPath shift;

	public Shifter(boolean l) {
	    
	    super();

	    inside = false;
	    left = l;
	    shift = new GeneralPath();

	    ActionListener taskPerformer;	
	    int delay;
	    taskPerformer = new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
			
			if (left) {
			    ((TimeWheel)getParent()).decOffset();
			    ((TimeWheel)getParent()).reLayout();
			    getParent().repaint();
			}
			else {
			    ((TimeWheel)getParent()).incOffset();
			    ((TimeWheel)getParent()).reLayout();
			    getParent().repaint();
			}
		    }
		};
	    delay = 0; //milliseconds
	    timer = new javax.swing.Timer(delay, taskPerformer);
	    
	    setOpaque(false);                    // ..
	    setVisible(true);                    // .
	    setDoubleBuffered(true);             // .

	    addMouseListener( new MouseAdapter() {
		    public void mousePressed(MouseEvent e) {
			timer.start();
		    }
		    public void mouseReleased(MouseEvent e) {
			timer.stop();
		    }
		    public void mouseEntered(MouseEvent e) {
			inside = true;
			repaint();
		    }
		    public void mouseExited(MouseEvent e) {
			inside = false;
			repaint();
		    }
		});
	}
	
	public void setBounds(int x, int y, int w, int h) {
	    super.setBounds(x,y,w,h);
	    reLayout();
	}

	public boolean contains(Point p) {
	    return shift.contains(p);
	}

	public boolean contains(int x, int y) {
	    return shift.contains(x,y);
	}

	public void reLayout() {
	
	    int w = getWidth();
	    int h = getHeight();

	    float len = (float) ((w<h) ? w : h);
	    float len6 = len/6.0f;

	    shift.reset();
	    if (left) {
		shift.moveTo(6*len6-1, 2*len6);
		shift.lineTo(3*len6, 2*len6);
		shift.lineTo(3*len6, 1*len6);
		shift.lineTo(0*len6, 3*len6);
		shift.lineTo(3*len6, 5*len6);
		shift.lineTo(3*len6, 4*len6);
		shift.lineTo(6*len6-1, 4*len6);
	    }
	    else {
		shift.moveTo(0*len6, 2*len6);
		shift.lineTo(3*len6, 2*len6);
		shift.lineTo(3*len6, 1*len6);
		shift.lineTo(6*len6-1, 3*len6);
		shift.lineTo(3*len6, 5*len6);
		shift.lineTo(3*len6, 4*len6);
		shift.lineTo(0*len6, 4*len6);
	    }
	    shift.closePath();
	}

	public void paintComponent(Graphics g) {
	    
	    Graphics2D g2 = (Graphics2D) g;
	    g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, // Antialiasing setzen
	    			 (aa) ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF );

	    //g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f));
	    g2.setColor((inside) ? new Color(255,255,190) : Color.LIGHT_GRAY);
	    g2.fill(shift);

	    g2.setColor(Color.DARK_GRAY);
	    //g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
	    g2.draw(shift);
	}
    }
}
