/*
 * LumenDims.java
 *
 * Created on December 20, 2000, 6:22 AM
 */

package pharynx;
import java.util.*;

/**
 * An object that gives the dimensions of the C elegans pharyngeal lumen.
 *
 * @author leon@eatworms.swmed.edu
 * @version 0.1
 */
public class LumenDims {
    private double[] diameter;
    private double[] isthmusDiameter;
    private double[] corpusDiameter;
    /*
    private ArrayList motion;
    private List isthmusMotion;
    private List corpusMotion;
     */
    private int isthmusP = ISTHMUS_P;
    private int isthmusA = ISTHMUS_A;
    private int corpusP = CORPUS_P;
    private int corpusA = CORPUS_A;
    /** Creates new LumenDims object */
    public LumenDims() {
        init(0);
    }
    /** Creates new LumenDims object 
     * @param option    Currently ignored.
     */
    public LumenDims(int option) {
        init(option);
    }
    /* 
     * All the diameter access methods make a clone of the array so that user
     * can't screw up the original.  The motions are all unmodifiable lists, so
     * they can be returned directly.
     */
    /**
     * Get diameter of the pharyngeal lumen
     *
     * @return an array of lumen diameters from posterior to anterior
     */
    public double[] diameter() {
        double[] d = new double[diameter.length];
        System.arraycopy(diameter, 0, d, 0, d.length);
        return d;
    }
    /**
     * Get diameter of the isthmus lumen
     *
     * @return an array of lumen diameters from posterior to anterior
     */
    public double[] isthmusDiameter() {
        double[] d = new double[isthmusDiameter.length];
        System.arraycopy(isthmusDiameter, 0, d, 0, d.length);
        return d;
    }
    /**
     * Get diameter of the corpus lumen
     *
     * @return an array of lumen diameters from posterior to anterior
     */
    public double[] corpusDiameter() {
        double[] d = new double[corpusDiameter.length];
        System.arraycopy(corpusDiameter, 0, d, 0, d.length);
        return d;
    }
    /**
     * Get motions of the pharyngeal lumen
     *
     * @return a List of Lists of MotionPoints. Each element of the top level
     *         list corresponds to one location along the anterior/posterior
     *         axis of the pharynx. Each List of MotionPoints tells how that
     *         particular section of lumen moves. The MotionPoints are ordered
     *         by t.
     */
    // public List motion() { return new ArrayList(motion); }
    /**
     * Get motions of the isthmus lumen
     *
     * @return a List of Lists of MotionPoints. Each element of the top level
     *         list corresponds to one location along the anterior/posterior
     *         axis of the pharynx. Each List of MotionPoints tells how that
     *         particular section of lumen moves. The MotionPoints are ordered
     *         by t.
     */
    // public List isthmusMotion() { return new ArrayList(isthmusMotion); }
    /**
     * Get motions of the corpus lumen
     *
     * @return a List of Lists of MotionPoints. Each element of the top level
     *         list corresponds to one location along the anterior/posterior
     *         axis of the pharynx. Each List of MotionPoints tells how that
     *         particular section of lumen moves. The MotionPoints are ordered
     *         by t.
     */
    // public List corpusMotion() { return new ArrayList(corpusMotion); }
    /**
     * Posterior boundary of the isthmus
     *
     * The isthmus extends from subscripts isthmusP (inclusive) to isthmusA
     * (exclusive).
     */
    public int isthmusP() { return(isthmusP); }
    /**
     * Anterior boundary of the isthmus
     *
     * The isthmus extends from subscripts isthmusP (inclusive) to isthmusA
     * (exclusive).
     */
    public int isthmusA() { return(isthmusA); }
    /**
     * Posterior boundary of the corpus
     *
     * The corpus extends from subscripts corpusP (inclusive) to corpusA
     * (exclusive).
     */
    public int corpusP() { return(corpusP); }
    /**
     * Anterior boundary of the corpus
     *
     * The corpus extends from subscripts corpusP (inclusive) to corpusA
     * (exclusive).
     */
    public int corpusA() { return(corpusA); }
    public int length() { return LENGTH; }
    public double width() { return WIDTH; }
    // Internal methods
    private void init(int option) {
        diameter = new double[DIAMETER.length];
        isthmusDiameter = new double[ISTHMUS_A - ISTHMUS_P];
        corpusDiameter = new double[CORPUS_A - CORPUS_P];
        initDiameter();
        /*
        motion = new ArrayList(DIAMETER.length);
        initIsthmusMotion();
        initCorpusMotion();
        motion.trimToSize();
        corpusMotion = motion.subList(CORPUS_P, CORPUS_A);
        isthmusMotion = motion.subList(ISTHMUS_P, ISTHMUS_A);
         */
    }
    // copy DIAMETER to instance diameter
    private void initDiameter() {
        System.arraycopy(DIAMETER, 0, diameter, 0, diameter.length);
        System.arraycopy(diameter, ISTHMUS_P,
            isthmusDiameter, 0, 
            isthmusDiameter.length);
        System.arraycopy(diameter, CORPUS_P,
            corpusDiameter, 0, 
            corpusDiameter.length);
    }
    // copy CORPUS_MOTION to all of corpusMotion
    /*
    private void initCorpusMotion() {
        MotionList cm = new MotionList(CORPUS_MOTION.length);
        for(int i = 0; i < CORPUS_MOTION.length; i++) {
            cm.add(i,
                new MotionPoint(CORPUS_MOTION[i][0], CORPUS_MOTION[i][1]));
        }
        motion.addAll(CORPUS_P, Collections.nCopies(CORPUS_A - CORPUS_P, cm));
    }
    // interpolate between ISTHMUS_P_MOTION and ISTHMUS_A_MOTION
    private void initIsthmusMotion() {
        MotionList imc = new MotionList(ISTHMUS_P_MOTION.length);
        MotionList imi = new MotionList(ISTHMUS_P_MOTION.length);
        for(int i = 0; i < ISTHMUS_P_MOTION.length; i++) {
            imc.add(i, new MotionPoint(
                ISTHMUS_P_MOTION[i][0], ISTHMUS_P_MOTION[i][1]
            ));
            imi.add(i, new MotionPoint(
                (ISTHMUS_A_MOTION[i][0] - ISTHMUS_P_MOTION[i][0]) / 
                (ISTHMUS_A - ISTHMUS_P - 1),
                (ISTHMUS_A_MOTION[i][1] - ISTHMUS_P_MOTION[i][1]) / 
                (ISTHMUS_A - ISTHMUS_P - 1)
            ));
        }
        for(int j = ISTHMUS_P; j < ISTHMUS_A; j++) {
            MotionList imcc = new MotionList(imc.size());
            for(int i = 0; i < imc.size(); i++) {
                imcc.add(i, new MotionPoint(
                    imc.getmp(i).t() + (j - ISTHMUS_P) * imi.getmp(i).t(),
                    imc.getmp(i).r() + (j - ISTHMUS_P) * imi.getmp(i).r()
                ));
            }
            motion.add(j, imcc);
        }
    }
     */
    // Isthmus is subscripts [0, 207)
    private static final int ISTHMUS_P = 0;
    private static final int ISTHMUS_A = 207;
    // Corpus is subscripts [207, 820)
    private static final int CORPUS_P = 207;
    private static final int CORPUS_A = 820;
    
    private static final int LENGTH = 820;
    private static final double L_TO_W_SCALE = 2.189;
    private static final double WIDTH = L_TO_W_SCALE * 39;
    // The motions of each part of the pharynx are given as a series of (t, r)
    // pairs. t is in milliseconds. r varies from 0 = closed lumen, to
    // 1 = fully open.
    /*
    private static final double[][] CORPUS_MOTION = {
        {0, 0},
        {167, 1},
        {172, 0},
        {315, 0}
    };
    private static final double[][] ISTHMUS_P_MOTION = {
        {0, 0},
        {100, 0},
        {300, 1},
        {305, 0},
        {315, 0}
    };
    private static final double[][] ISTHMUS_A_MOTION = {
        {0, 0},
        {67, 0},
        {267, 1},
        {272, 0},
        {315, 0}
    };
     */
    /*
     * Diameter of the pharyngeal lumen. Units are arbitrary, but are the same
     * as the subscripts.
     */
    private static final double[] DIAMETER = {
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 1,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 2,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 3,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 4,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 5,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 6,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 7,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 8,
	L_TO_W_SCALE * 10,
	L_TO_W_SCALE * 11,
	L_TO_W_SCALE * 12,
	L_TO_W_SCALE * 13,
	L_TO_W_SCALE * 14,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 16,
	L_TO_W_SCALE * 17,
	L_TO_W_SCALE * 19,
	L_TO_W_SCALE * 20,
	L_TO_W_SCALE * 20,
	L_TO_W_SCALE * 21,
	L_TO_W_SCALE * 22,
	L_TO_W_SCALE * 23,
	L_TO_W_SCALE * 23,
	L_TO_W_SCALE * 24,
	L_TO_W_SCALE * 25,
	L_TO_W_SCALE * 25,
	L_TO_W_SCALE * 26,
	L_TO_W_SCALE * 27,
	L_TO_W_SCALE * 27,
	L_TO_W_SCALE * 28,
	L_TO_W_SCALE * 29,
	L_TO_W_SCALE * 29,
	L_TO_W_SCALE * 30,
	L_TO_W_SCALE * 30,
	L_TO_W_SCALE * 31,
	L_TO_W_SCALE * 31,
	L_TO_W_SCALE * 31,
	L_TO_W_SCALE * 32,
	L_TO_W_SCALE * 32,
	L_TO_W_SCALE * 33,
	L_TO_W_SCALE * 33,
	L_TO_W_SCALE * 34,
	L_TO_W_SCALE * 34,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 39,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 38,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 37,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 36,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 35,
	L_TO_W_SCALE * 34,
	L_TO_W_SCALE * 34,
	L_TO_W_SCALE * 33,
	L_TO_W_SCALE * 33,
	L_TO_W_SCALE * 33,
	L_TO_W_SCALE * 32,
	L_TO_W_SCALE * 32,
	L_TO_W_SCALE * 32,
	L_TO_W_SCALE * 31,
	L_TO_W_SCALE * 31,
	L_TO_W_SCALE * 30,
	L_TO_W_SCALE * 29,
	L_TO_W_SCALE * 29,
	L_TO_W_SCALE * 28,
	L_TO_W_SCALE * 28,
	L_TO_W_SCALE * 27,
	L_TO_W_SCALE * 26,
	L_TO_W_SCALE * 26,
	L_TO_W_SCALE * 25,
	L_TO_W_SCALE * 25,
	L_TO_W_SCALE * 24,
	L_TO_W_SCALE * 23,
	L_TO_W_SCALE * 23,
	L_TO_W_SCALE * 22,
	L_TO_W_SCALE * 21,
	L_TO_W_SCALE * 20,
	L_TO_W_SCALE * 19,
	L_TO_W_SCALE * 18,
	L_TO_W_SCALE * 17,
	L_TO_W_SCALE * 17,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15,
	L_TO_W_SCALE * 15
    };
}