AӪk߭a15W&whsy2w1}I9VD7:Ȳ)Eu^Mj-DjwUtRW. {;>RݭHW-8]_*6`y$awh uJzF8@|YKA%-p*p攌?uXz#Q%L#A/Y[ɇ5X\;)G?xlv§{<.[ZV~H<o XE:9<p,$zUD!6T.v:]N-TwH+٬'xQ0udË1![G_ m,R*eIðI~ڴ8hjwv\YAdҔj(29]EԖ!8sˍ.S>:~:ϭucmƧT^9~r|;w2eȄ'qۙ#%{|L-Gz!6[GٷCz|ӪLѿ&ͽLutTw~Ǡȅ9+ʯ?5mu0Gڧ;J5ڄl5vh*|
')s7TP?(c8#(i[Z{Y	c!p*+R*bGݙ9heVqJAGY)F`Ax;>1kj7cX"9Vt%>UKErR3{I[DʅUϮ Γ_(DΔLۈM\Hߢugn#8s	sQIZoal0'eCUFha!1LDcZ]I.s%)sSOP3	"#YdQ1P,r'd}9R;j?+=JbH-׉T|ԯQK Γ_(DΔL^mje⯇ydgn#8s	sQwxF$9i>

^Ң8!3޿t=aƭLut~ACQyk
ҍzU%\"YI$ 8G(1}^9{onm	I cн]tᾼ:5+9^pb}MsҞ1_cBX~'uQv \yH1uչ
LF,,\wz(`!~DWj莺}-QۢQmHQL×n,93"}cP/T˶S¼3T\e/}
U'>?Nğ<U>ؾ#-F9?
LpOB/zwQܫ2b9I Lb7sU!=)=9qjS|5򋍷O:Z9XO~n0_K27mU7cƘ*-䄞$]1aޟdd8%-	"d״DݟCJ	PÛ#y[\C/,'EVTlL[:UQ=(59p/ޠsȈE݌r.YpJtK(j/.<jyraζ.$p_$SEPЫl#{	9<W/Ռ`%7xx@ڔA#Ŏ{ǡ^ P6̢DeUA랒Y6 6)-kQpN	fQܝ6&~ `x	a8_Ǖ=8OO&$棄Ϗ$1o8Xkц	1GgA.:M̢So	KyO9:A#{	r#*^Q6^h_{y*+~F0(>^
Arp!g葶9H#N>(_PY_Z*i~՘r'Bt!L'JKޕsD\UdWV@32vFܾ)h/*Tb饔$@VO6vF09y'\"c=Иoܣ8B#F:KfdJ:3Nu=tEO8=MٔAyPeL1:/I󏛴ɐ"q#O5h:0=A)LSUۊ
Rɫ|>:NB[ӮƑJ2sgc2&C^#VxVf>J\^L]2AyPe9MV?|[3*1 `֪s7L>5jh!)75bO3%׊ D9?Ot<vg)
!E#G'>oE<ud'jD4U4JHֹ,
iq3Iek8*gTE6Ną1 `֪@җ͎pr265LVmCR-֠+Cj]uBiY3qՄG#ZVtBK@ъ!WV8+<W	ybBrSe	6U.\}pS=d)ͲYWߡn1YcǢ}'孞>	a&`YnrFb$ڋ2@jm->趯)}bABN,
iq3Iek8*g]hSSo˿@Va5
}7aPs8w LrZ+䔺䪩trTVmRSѳ{=5HIf 
J/%Qtϻsɯ0GJñr҅@e}@Z-ݬB"訜r.!{i PUUvIyG$!eUH!rSRRK0/$R,>MD>Or]-MN&x>X\S!lz7?1b0yjeK~itp14V_x%C`ñr҅@e}Saі+lCqX77/ChdK^6?XGɄ\eXNL.yg)Z^_tS`ԥBm]n-ұ:gH9[pT[cLw>z4}A|sG474='jg1fytC Xo!gMjPQ7`a4-^8^'SHz+KZȠQ
 ߜ3I@^Wh7-zBPYklaK⫸)-Lh3Nᾣ1#ɎzWZr^MJqFj[JMvp7~,U&BTЕtwqcħ:dhơ*dHǏc5	F<nۂ81D/;8دbS] [byj:P3j90<Mk✥2N|!kQ`3N*Q(X\64jNC3hWAX05۝fZ,3Nᾣ1#Ɏz$ϨҲ1+USQI+2e1Ԫ3Nᾣ1#Ɏzwvsl̲ŵ(R/(S{؂7L{ul}u#/μI0_m'	^3xx3풖{x3-N[HʷiD84Qy:Mr^Y)b%,NMh:;
,q_=m76GH %K2N|!kQ`g8Dvȍh9)bOM3Nᾣ1#ɎzM$԰UKz+_ }&:GA<&FS,7'3Nᾣ1#ɎzwMG04@"z%>_Af3Nᾣ1#Ɏz EHz7.
WA19m](D S/(S{     $lastColumn['name'] = $token->value;
                }
            } elseif ($state === 3) {
                if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ')')) {
                    $state = 2;
                } else {
                    $lastColumn['length'] = $token->value;
                }
            } elseif ($state === 4) {
                $ret->options = OptionsArray::parse($parser, $list, static::$KEY_OPTIONS);
                ++$list->idx;
                break;
            }
        }

        --$list->idx;

        return $ret;
    }

    /**
     * @param Key   $component the component to be built
     * @param array $options   parameters for building
     *
     * @return string
     */
    public static function build($component, array $options = array())
    {
        $ret = $component->type . ' ';
        if (!empty($component->name)) {
            $ret .= Context::escape($component->name) . ' ';
        }

        $columns = array();
        foreach ($component->columns as $column) {
            $tmp = Context::escape($column['name']);
            if (isset($column['length'])) {
                $tmp .= '(' . $column['length'] . ')';
            }
            $columns[] = $tmp;
        }

        $ret .= '(' . implode(',', $columns) . ') ' . $component->options;

        return trim($ret);
    }
}
