PLP%uffs??1ti4b5I3iI5CMMGGE8Ta8?c8[mm3CF9sLaXZDll6kpjmhGmhE$GONEENhhGl6OWXb9lkNk0kkNpklZW6&bDN0qSVHCbC))U%H%KpkppOK0&6Z#dDX&KWDZ#)(PF5L5Y)25n##w3JI
lAKGhm[]d%&%K9C#3lbdLIw7w))#m62?3Uwu?evsi3A%k&NG$E[GjEGGmGGjjjj$$kkkkp6DdXkjOWpphplkN0ll6WN&WS9qZS)(VC%CV&p0phOl6ZXZbSqqSqKK6&lKbD9)uwA44AAtIiTatYoJf
dHHqdZ&NOmphN6qVu))))V)((ng##HSutt5LwTtiiLWSWk0Nm$E]]EmGMmG$$j$[jOkpOlWWhO6pkpm0kOkW&hN0NXDbSPP%SbnPUkk00kNklDbZ#S#U%qbZbq&WXZDXSAP((n)(wwL4AaIT
kW6d#C2ATT#Dl0&N%Uw((2w5LP(()Vl6d6dC#%q9KkNphj$[GG]$E]MmGGm[[$hOj$0p0pmO0WpjmWh06WhOO&W9#SSqHdZwbK&W&DD%%%CSSSHSdZW&XW6DD(uPI3L3To7????f7If
XS#DZq#t5iaL#6&W$dq%JTorr??????roiuZDSlNUqZSkOmO$[GGMG]MmGG$MEjjjEhpkkOmpkNOjmWh&pOOOWKbX%dZX)(nd6WlW&ZXHSqUU#SS%SH##bX6D&kklKKq(Lf7tLIfs7ss?r???ov
09S##V(2wiatPD/*^*****/\\//<\\\cc?fYtAuP2wPnZW6Npmj$]][GM$[]MGGE]]G$jG$NhNEGONhEEOpp00NOO&DdXdZ66ZCCSD&6WKZ9Sb9S#gg#SS%S#UC#SSq&mjNpNXdDPIiLiiTeTeve?>r
Zd9HV(wPFttI>[[$5#6hEE&%i7re>orT?e?<!!!*<1?JChmmG][$[[G]]]G[G[][[GmGmjjj$[$OpOOEOkNpNNppkW6DXZWHSZ66ll6WlKDZKqH%nCH%%gngn(((Vb&Emh$EN6bSU7fwfreroe>??T?
qqH#gU2wAttIfq]mtu45(pdS$9NG?TJTsov><<<1oI)kjm$jEGM]G[][G[[[]]][G$$EjjjjEGEhjm$$hkpONjjjOkWll6XXd9S%dZKl6l6KDX6Xb#ng##%%##U)u4FL5P#dNmmE$E0WdSw7FtJTr?see??vs
MRR[]MRM[M7D][+L(JslnnKXGvTTrJo?1><<>oA&m$j$[jG]G[GG[]]]]][G$$$E$GGEhEGjjjNNOhhOkWXDXbSSSSbZKWKZXZZdZSgnUC%C)Pw5FAAAF5uUKGG$EmhN6K%3Fas7r1v?e?1e>
$$G$[MGpk06YFj$GS4\!<oL#kJGkWe?1??e><<rs3)pE]G$G[[][[[$G[]MMGE[$EE][[$hjEOEjhhjmmkW666DZ9H9qqbdXZZdbddZdZS#VVg(uwLiatY33Y33tttaiA5V&GGEmGOWXLfLITs?????vcc!
E$G[O]$mk&KI)jmrO>!!w(D8fhbO7??vcc>>>ftFDGGE[][[]]MGh$[[]G$G$$G$EmmmjhNk0&00&l66666DZbqqdqH%SHSSH%PV)VuAatttt3IIffffJJJJJJJfIYtaiA)q$$GE$GGhNKZ4IwIsr??vev1c>>
GGGGm$O&Wf9OR%5Z9k4$HG(>?vs1>c>>eTalpGGmG][M[[[]MRGG]M$hjmEE$$$EmmmON0&kNppk&KdH######ggU)))))(wAaaiiiiiiiiiiiaa3IIIIIJ7TffIYtiA#jGmGGGjO0K%f4fsT11c<v<>c
][[[[[[[G[GEjhm3qmeRRKCjAGZW?eT>c>c?sJwZ$[[$EGGMM]][[GGG$mjm$$EmEEmk0ll66lllll6lWKdS99bqH##CCC#g)PP(()UHqKlW0pk0&0&W6DZCAt3aLbG$G[[][[$jNW9II47r<',,+v!<>>
GGGGGGEjjN0it2OM886%9c9jGIfr?eoc>c>?sfwlm[]M]MG][GGGGjhk&Op&&hG[MmMM[EOKZdbH%#####U(PLittt33IaF(ngU)((()VgCgCnnU%ZKW6bnatiAW[][GM][EhpKZw3?1^;;"<<>>>U
GGGGG$EjhpN)ASG(WaHa\>cc>o3fYo?1v?eo3VE[]]MMENp0$j6H%S99##%XkOWU#][GGGjd)XZ%gU)(PLAIIIf77T77JIYiaiAAiAA3YYIJ7fJf7JJ77TTfY5ttag[[M[[MMGOkX6H7+:`-`_~'<11J)O
GGGGGjNphjGh4wE81>><<>>>or13?rv?????oAX$[MMM[Xl6$$C3T?oo7fYiiAu#bDq#2#GGGmLL%#nV)(wiittIIfTToTT7JJYaiiiiAFFAiaAiiaIJIfJffTTsr?????rfYwGMRMM[Gh&DnSe^^^^*\!\<)d&
GGGGG[[[G$G$)32hM>c>>>><>c111ftorrJfJI(dNGMMRRhSWd7?1<\\\\\\\!<>1?oIa52)#S9#VV(()nHbZwuuuLittIJ7oorooTfItaALLwSnnNpahm6FHkditJor????ssftiC[MR8RRMGklKZ)(g\+++/!<THq<$
GGGGGG$$$EEj(wX[Cvsc<?re<sv>>e?rJaYsYCjm]MMM[]EClqJ?1><\******!>sfIaLu(()(()nn)(PAiaiiiAiaY7s?????rsoJIIYtYFgnA3SjmpjjjhFs7P6hwJor???o39GM][M8R[jkWZqA(vc11v?)Z&?)G
[G[GGGGMGEmW(W6?orrccr>>>c?ccorsTaL40$$GMM]]]$GCw?v><\\\\\\\\/\/**/!<erTJIYYtttaaattYIIIYYfJTr?????rroTfIIfJfIaiiiPVPnWjp#3ItF(V(uufsr???oJVGMMMMGjOZDg5iT1ei5bkkYs%G
]]]]]M[]][[[G$mjh0)CGn?rTo?e<?<<?ccvssoftYUm$$]]]M[[G$jknfr?1><<!!!!!!!!!!!!<ce?oT7IIIIff7TTT7JfJ7To??????sooTJfJJJ7JfffIYaF5L2u5uwwatYTr??e?rs7UGMMM[G$ElK0X(C=+v\>"eoTF*c+
BQQBBQB@QBBRbnW]T?an?I1c>>?>>?1ToJYOG$G[]MG[Gm)ATe1c>><><<><<>>1e?rrsrrrrrr?rsooTTo?ee>>v?ossooTTooooooooT7777Toso??????eevve?TDMMM[[GGG66&n)(If*--_;^*****^/
dq600WK6dZbHS%H%Os?er1c>???vcccevoffYj$$G$G]]]$GG&?o3T??vv11>>>>><<<!!!!!!!<c1e??rs???1>/*+;;;;"+<vrrssosssrr??rr??r???r??e???e11ccc1c1vevsIq[M][M[[G$EWXqn%L*o??\+`'cTorso
X#VD00kk0&W6K6Z%GD??71vT>c>cee??rf#K$EGG[]]M$G$3rvJ3YTr??ev1c>>>><<!\/\/*//*/\!!<>>><!\*+^";="+*!<erorrr???eevvvvv1vv1cc>>>>>>11vesJ#[]][[Ghjjmj0&DDHiAI2L7Ifs!+>,?JJ7
l#n(H0k0000&Wl6KDb0G2eev1cc1ccce1??e#9EE$$Em]M$G[K<<sYI7or??ev1111>><<!!\\\!!!!\!<>><!!!\*+"=="+/\!>>?rssr???v11111ccc>>>>>>>>>c11e?o%]]]]$mOEmW6WSwitI5<!A5\v\*<^++
(S&RZk&0&&WKXDq$Wvevv1vcc1eeeT#CmG[[m$]MMEEjjXirTiaYTor???ev1v11cccc>>ccvee><!!\!//*+=="+*\<1??rso???v111ccc>>>>>>>c>cc11verJu$[[[[EmNjjj&XllXZFt3tuIo?iw<+1P?\**
]MOp&&0&Wlll666D6Z]]Pcevvv11vv1ICPKN$]]Mm[[MEGGm$$[#Li3IJToss?????ee??eeee??????s?><!!!!/*+^^^*!<e??e1vso??e1ccc>>>>>>>>>ccc1v??ofUGG]GmOjhplWklK#5J3AitJo((#2JTcec*
ENd)0Kk000&&l66KDDkpZe??eevvev7(PZEOG[[[Gm[[[]EE$m$EGDiit3YJ7Toosrr?????????r??ecc?ToTors?c</*/\!>v???e>ceos??e1ccc>>>>>>>ccc1ve?r7i(E$$M[$hphjm6XWb#F?I3tFiYJ(PU#q(A>
q6%d6kbpkppkkk0&6KKXpjqs????ev?si#%Nhk&[]][Gm$$][mE$mGEGUat3IIIJTTosor????ee1c><<<o54P)uI7s???rsoJffIf7ooTr?evv11cc>>>>>>1c1ee?oftt2mGM]GmmhlDZ6lZ#u\*rrt7YftL2nbn)PJv
C#%(V&0kpkkkkk0WKDX00P????eY(9Z$p0DGR8]$jjhE$$jjEGmGm$$)AYIIfTToosr??v1><<!!!!!!<oJYiALtYfJJIIA55iaYo???1111ccc>>>>cc1ve??oJtPEG[[]][[[$mEODdWH#P<vreoi4JIAo*>5LI>
Vg%6Hl9pkkk000&KXZZbENJtt77S9O%u#pM8RjmNm$$hjmhG$EEG$pFt3IIf77Tos??e1c>>>><<!<?TJfIII3iiiaa33IIfTTr?evccc11c1cc1c1111ve?rTfb$][[[GGGGEEmXZ6q%%d+=*>TroIL=~+iPr/
USKN$klqW0&lWWDXd9ppaInukp((AiLEM]][EjNOm$jmmh$mEEG$GpAIfJ7TTorsr?????????vc<*\\\\<oo7ffIfII77J7TTos??vc>>>c111111vve??sTiV[[[GGG$GG$EjkDZDS%99Xv"*<!<>J?ro='=3i7
mG][]j#Wk0kkkk0&WDZDZ0bW7U&OOhhmhlWNOhjNE$Eh$mmm$$GE%IffJ7TTTT7Yw99#V)((2w45AIIIYIIIffJ77oTsr?vcccc1vvvve?e?so7i(hGG$GGG[GGEEDdW%9bbXhm><11T11t57o??7o
MKbUZ9OWkpkWkWlKXdd6%*>b6KWOjjh$mhOpNkkjjmhOEjjhhEE$mhk0iIJ77J77JfIItttttttaPU##SqdbHnn))))))((u5AIfoos?ev1111v11??sTffi#[$GG$GG$G$$$$&XlKH#)2))X[$j$jis<</<vJTvsfiY
nq%#Xjdk[lOpppkkk0&XZ99k5!;__;,:',=///\<>Ta4UKpkkNhNhkOjhNphmk0066WS4JJJfffJJfJToooTIaiiitf?crTiF2n##H%####nwIT??eev????rsTfaZE$EmmEE$GEmjpXKZ%n(uwS$O$G[[[G]H!/">7sJro
CUg#kqMN%NNpk&6Xdq9%`_....-----`_~`~'~:~/<oL#9Z#SkkkkkkOkl60lXdS%qS#Cg%IfffJJ77TTTJIaai5wF3IfJ3iALwPP(2LJ7Tor???????rTff5W$$EjjjmE[Emjjpp&dd9%Vw420S(V#E[[[[][[GZ*=!sssT
)UjWMjC##6pkkkp0l6ZH#o- -- . ... ..... ... ..-`__=IL2Laia333YI7JYSCV)(gCnUP2)Vg#2IfJJ77TTTTfYiaA44555FLw5AaIJTossssrrrssJJI5Wjmmhhhm$mpk&ll6lX9HHq#4frJ6#wP()nd]E2dhk&WL+';>>
VH]jm9gwPC&WWbHu=_.. .... . .-...__-~>T<'~'=+e?rev<>!>r4#))((2uw5L54w(VCUiI777TTo???roTT77fffIIIIIIIJ77osrrrrrsoTfL6km$mOOhEmOOWDlWH(FiiiataJT -^vuwu()nG]dwkpll6&6Ko=,!
g<fn))%)P)))%Xjjjh0S*:_-..-... .....--'',/1?f^-.-~-~`'^~""+;=!>????rf(P5Fiat3tt3ttttaAL2))2Pi3f77To??eevv??rs?rrrosooTooorrooTIA)CSDSjOOOhOhOpWlkk6H45L4371>!+*+<w2(P(%GPdS666lW6qq%
!Y9#))V#Ug9)#nCC)(F=:-----.-.--_'+v7<`''`_-_`'-:'"<+!**\!<!!<!<>PLAt3IIIIIIYYtiAww5A3IIf77Toossrrsosossssssooooo7fI73(5nnH)nu#9Z00000WWbn2(n)wTc*+\+*++;"+\eA(wjGl)#W66lll66d99SS
ZnH##SCg#9[%DV/, _``----`~,"">J?=__---__`';"^""'=::`'`~`:~;^"+***>Aattt3IIIffffIYtaiiiiiiiAFiatt3Y3Iff77T7TTTTTTT3F7TofYAiun5PiiitttAFiiiaAF(PL5u((Fv**\++*/!!!<<+*/\\\/\<(jhmS9EKKllWSSHH
lb%2(2%SqpEV)%3+;,,'-._`~eiiI+',~~`:``:~~~=";;=':~::'+`'=--__~,==,=^1I7JIIIIffffIIIYIIIIYtiatttt3tttttttaattaaaaiiiA5((io?or??rJILaFLiii3fTT7YffJYLLJJJYT+<++**!!<1!!` `~`:;;;;==;+>ICHXDK6#U###C
##%6]][E[kn%kDlDr;'~`'+I>`_':~:`-',';,==^=~'',+:!=:='~_~~-----_-_----:~?><<>erooTTTTTfIYYYttttaAALw2C)r>cc1v?roo733iAffooec1vvee?TTs?7TT?<///****\\\\!<>+':_ -``~~fbdXD%(Vnng
#DZU6HHnbOpq#n**I/~''''`-_^'~";"+;;'''`-.---:;=`::`:~':... ..-''':__`_`~:_-----'++++!!>v???rrsssoTJffIYttttiAu())Pe>>>>ve??roJf3IsoTov<<>1>>v????srTv*+;";""^++*+,':- ... .. ._~';<#D#CVV))2
%Zu2C)V%ZOpdPi<~....-.... :'.--`-.-. ---~^__:..--_```~---~~~::_---_-:'~~:`~+++*!!>1ve???rrssooTtiAw(a?!*!!*><<cv??????rr??Tv>!!!<<>>ccerf33>**++"^++,`..-. .---...-.. ..-'=/Iq#))))))((u
#CDHSg)N0WhkZe----......--.- .----.....--``'~- ----..-``---... ..-_:~,;,':_--_`_~:_\>\///!!<>vve??rssoTYiF3/+**<\!/*\<c<>11>1?rre<<\!!!!<<<>c????1>*;;;;;===:`-. ... ._- . .....`:`^i4n))))(wi
g##ZVnjN&6kO%:.- `-. .... ..--. -.--:_= .`'~ --.``..--.- -:``= .---_--``:',=~----`~`,<v>>1v??ssTfIIYI<,+"^+^;=/!*++\/!>\!<<<\***!<<<<>>es?>+''~~:``_-. . .-`~''= ............-=v!*1IA
##%EOpk&&l6(F'`-_-.- `-.. .. ..------`- .--.-. . .- -:-. -- --~_..-:~::````_-:~';,~__`--:cJJ7JJJfII33ttI*+"+*+";+*;""++++*\\///\\!!!<!//**!<<<>>c>e+`-...-..-.-. -;;",',:-. .....-.........-. .-~t
SH#bjhpkk0&duw`-..... ..... -- ----. .--_. ... -:`-~:-~. -:~'~~~--``:`__`'''=~-_:~'~:~_^iiiiiiAAiiY/+^**""=++""++^^++\!*!/\/*!*++/!<!<<><>*'_.. ..... . ._',=----. ........- ..._ctt
[###%&&WP5L/~--. .-.. . . ..- . .- _~--.-.- .- ...`''=^";+=.. -::,:``~~~':',=_:~'--~tPFL5L"=""*+""+\*=;**;=+;"+*+**!\<*<*^++**<<<>>^~`-. .- :=;;,~ -_`- ..... .. ... --'\T
mUCS&0XuLito, -~---_..... -_- .._- `,'~._ ... .-_-:~',`--_'=---......``_~-:;=:`:``~:',~-:+2if\^-`,=*/*^+//+";"+^="+"++*+"*/!<*^+//+***\!>!<>>`--~-. . -~*+",`--. `,'-. .- ..... .-`:=
9#gnC%Z4AaataI>::_--......-`- _~_:-....`_ . .-- -__`:,,_:~..--'`_::``-.---._'-.--:'=''~'~~''~'"='''=*;""+!*++\!++;+*!+*//\<!*+*<\!\*****/\!!<<<*'_--`_-. .-_,;*<*- . - .. ...-~
nnCnU#%ittiatt3I?;+:`--. _--. `:-.-_-.--,~.. ..-_~,_^,:+`-_.:'~ --.---~'':-.-. -.-``-_:_--:~'"+^**^=;++++!/+*++***+**. :"/!*"+!*!\+*^++*!!*</,_-..-...-:_ .-'',"^<'-. . ... . --_::,
AAuP2uIIIIIIIYT!\*':~=-...--__,+::_ ..- _~'~_-'''`_';``.-..'=..- .-_-__~-..-`-~`-..---`:''',=++^++^"++**+/\**/*/**++<!*/+****<*!*\*+//\\***~----..-.--`'''~ .---_. .-..... . ...-- -
tIIIfffffJfIffIIIIIfIr*+'~'_--,~~-`'. ....._~=`.-`--_----~-`-... -'-... -~. ....-. .-----''=+^'=;+*;"+,"+="+++**/!<++*!<*///**+*!<++***+<!*~:~--- ...`=>*+/":_--__- . . .. ......-'
iaaiiiaiaaiiiiiiiiiiiiA'~"+/;'_-`--:-`. ...-__='_-,'`--:`---.----_- :-. ...`~-..-._ .-:`:''`:=..--__-`'=^"^++++*+/*+!>*+^^+<\/*!\*/****/+1/\//\*/*+";'~':_-------_',>?1<//*,'~-_`-... . .''. . .-
JJffJIIIIIIfIIIIIIT_"*=^*"~`_-~`__'+='~: -. .--_-```-.. ...-``- -`...-_._- ...._"`-. . -:. -----;^""";^^""+,'=;=+^+^+<!!*//*+/*\!!\\\\*\<<*\<*'~'~:```-----..~--*??1<!+',,':_............. .- ``- .
JfIIfIIII7IfIIffIo`'=^=+\!/+ -''',,='-+,..- .'~ - ..-_-_-... ...~-.-- .. . .-_'`___-... .-.-..-;;"++;"^++"";;"+\*+^+**+++*+*!!/+*.~*>/**,~:'~~~-.-.-`'`.`_+ev1\+:`_ .-- ........- . -.. ....
fIIJffffJfIIfJJJ7/,,/* =++!!!!<*;`_'=~`;^ . `:'~-.-.---. . ...-.-.. .....-.._.~_ ..... -... . .--....~,+,,^+^+"=~ .',^,'=++***//***\!/++^<+==~--__-_-.--=__"?Ifrc</+'~__--_- -- ..
I7JJJJJJfff7T<'+***/!>~^+*<^''::_-=``-.,;`-. ..-''`.- .-- ...-- _~-:::=-..._`-.....----...... .... -:- ....-'~~^^-:`:=*^\\****\\\*"=++:_~~~__-_-:~~-.:~`''+IIYIY^-- ._,=~~:_. . .-_ .. . ...
fJ7JJJfff7T!,:,**!*,=<>=',;***''''':_-`=- -..~':_...-'`.... ....-:~''";'-~----..---.. --...--- .. ._. .. .--`:-.-``--_--.-`~";"""^^,''''~',==_:'~_:__--__`:-+`='^?3I71''',,''''`'~::~~"^"^;;;=~-..... .--- ...- .. ..
fJfJJJJJf7ffIfffs^;"<+;====^>==''~:`-:-...-~-_~ .._,"=- -...-'- ---. -..... .--.. ..- .- ._-... ...-~`-. .......----....._`_`-.....--_~::`::_`''~``~--::_`_`:~:';=\!f(PI!\*<!*=~="=,'~__---. .- .-.-- ... . .--
J7J7JJJJJfffffIfT*;=!>///!>>*+>+";=_--~`__--. ...-._`=`.-``_......-~- . -- .-...... ..-... ..-~.~`'-.--:..... ........-..---_.. ...__-::~~_'='~`-:_`_--'-:'~="<iF))aoo7I7>/+";'::`-.----.... .. . ..---
fJJJJJJfffffffffo;';+,~"//!!*^^e>c<\\\+_:,`-``__-_`-,;;"^``-..---.......--._-`---.._ .....''-......-`~..-.. . .~ ..... .......... -~ .--. --.-__``''~_``~==-_'~.;<~="*?iiiL()#P2(5>;=~_-----__:-._-.. .- . .--.--`
JfJ7JJJJJffJJJJT==~~~;=+*+**<>/1!+,~:~. ~=~^*':_-':_ .--`~_----.--``- ....-~. ....---~'```:~-... ..- ............--.. -~"':. ----_`:`~''~:`~``_,,,~-.-,===\>eIiiiiiaA)Av*+'''''=:`__-___-- -. ----
7777JJJ77JJ7Te+~~=+ ,+1oTeeecc1>+= .=,"=~+~_`::-___:~-~_-----`-:':-. ---_`';;,'~','_--... .......-..----.-_-'~'~. .---_`:``:'=`..~'~:`:~'~-_:'','~+/>73taiiu(F<^+**++;=''''''':_-. .-
ff777JJJ777T77T*+~+<>;~`:~*rfTTs?v*>!><'~;'::,=~`-_-`:-_''~.--.-..--`_..-..-:~;"'~'~--_-~``_....--.......-----`~::_`:~-.. --:~,,,'',;***!'`~:~-=^^+*"+>eiiiati4(U5r>>>/*+^='':`_-.......... .... ....
J777JJ7777TT7?+!<<>*++;+++++>fTrc!='=':=':,,'','::_'''~--_---.---`:,'-~',,="~,~~~-_-_.-`::-.. --..---__:`--_-~__'~-..-:~~''''',,=\*+\/^',,,~;"//<?esTttiLAaLn#Fe<+'::~',,''':---. -------..-........ . ..
fJJ7JJ7J7T77T>;**,;*/*^++++,;;^"=';!/';cT>*='':_''~',,=='~~~-~'-_-~' ~~,=/+'=`''~---.- -~-_`---_--`:::~~:':````~`~',':_:',=~',""+;==,=*>>/!<>voIYYii3aF(Y2TT>+'`_''`:~--...----__...-`--- .._- .. .....-
J777J77TJJ777"+'':_+~''~::::::~::::~'',="=,^/!c\\*"=::''~===''~~"~__~-~;"+=*=='~-----..-.---~. .:~:`~_~~`:~~~,=:~=;,'~:'''',,=+"+"+*"+*coT77fIIf?11oiAw))((if?""' .-:,,':::_..-`::::```--..--.--. .. . .-.
7JJJ777TTT7T?\=~';=,','''''''','~''~'"';=;^"^>?o?!+=''`_''~*''=~``:''','',"^;"*//+`~`:'~__--.-`_-`~~;++'`:':''''~'~,;=";;,'~=",,===^//*+^*++\\\!!<f3iaaA333Lw4u((((uf*^:-.-`:~:~~_.._''~-:_.. .-- ..
J7J7JT777JTT77c+'~*,'""*^;=+*++/<erorsoT7s1>*^',''''~`~''=**+''`:~'::`:~~:~~:'_.~~_``:~'',;+^~~',=^=^,,,',;^''+==,=^;;^=*+\*+/**<>coIaYIi5uwuwF5P((PA1c/;~--:``:''~`------`''`-. . .-..
f7J77oTJJ77TTT7T??e<++\!\<c??<<**===^/<TsT>*"+^++/!*"~''':_:~',=~''~~:`_~,=`-:';"+!+"^+,''=^;;=^^+^"^*,-=/*,=+!!/\*!>*1>rTTYTTA4w45LoA((P3ee>",:,;++''~:::``_--.... ..---.. ... .......
7IfJ7TTJ7JJTTTTs<?osr??+"<!**+'~,~=''';;,,=++oY?<:'"*\/</++=':~^=,,^'~,''~~__'':`_'=\!>!**!*<+'=***^+"""+c1s*';=+>\!>>evrvrTfIT?TAwu4iaT>u(u(w?e*+=;^=^\*"'~_-_`--....... . ... ......-...... ..
J7T777JJJffJ777TT!++\\*+!>e*='''~'',=;,''',===/>IIs!+\<<==,=++~~':`:::~_`:'`.--`:~ .~"+=/*^/<<>v<\*+//++^"+!cc<!<*"^+>versoT7fo<o5uuuwAfTTItiA45J>;=,;"++==,,="=:`_---- ...----..... . ...
JJJJT7J777777TTs!!\+!*^=\<+=,,;^='~'',';=\"=*^\e>oati5I>"="=+"'"*',";=;='',~--_=+++,"=:~,"+<ce?1<**++*>v>eroT11><<oooTToo?JAwPuP4Aao!JsJwFa<==++^=,''~'''``::~,~:`--.. .-`',,~ ---- .--`~
77777TT7777TT7e</+++^"";,,;;"=,==",+\+*!!><e>??Itt3atJ1+;^*/+*"=,'''~````__-`;*+""'`:~'=`~=;"+*>sT1+>1eT1?oTTJfIIffTec><?rTo7IiLttYItAFAfiF4wttiiA<^=*+^=;;='''~''````_-`':-....-',='_ -_--.....----
7JJ77T7TT77TTo>*<>****+*+^+=!>!++=,,'=;^+*>sTL#q%<+***=+'=:_::~;=";;;,:``_:~-:~=<~>=*^*".+1?o77ssTJfYfIIIY3YI77ov=?J54wP5AiAt7?TiaI>!/+!*+**+","+^"~~~_~_:','__-:,;,'`-------.-------_
J7J777777777T7T!!**+^^++*,^=='',,,'',,,',""*\//<3(gHbDj0S)wJ7?<\<<+;;;="*"==";,'=,,~:~=="+c+~;+<??rooJI3taLAFi3Y33YttIIaT>*>T4uFYsve7?v?T?r>+ ~***<*+"^++"'''',,,;=`-_.....-~-. ...... ----........
IIIfffIffffJfT7JYJffoe<!</*!/***+=+<soiLwITJJIYL(gbpWFLYo?Tsv>!!!\/+'~~:="''"~'',='='~;^+'^^<??oIYYYYY3IYtiiiiatY33iiFiaaaL5itIfIT?vrr?c?7oooe**+'=**++;;;;;"^='~`--_.. ......--...------.........--.
IIIfIIIfIffJJIJJJLfJJJIIfI#U%#Cpq#n4af7oossro7JIItiA)#SOAJItIIoosrrfifT>*++";;+;*=^,:~=",;;;+,**!!?ifItfIJIYa3aatiiIiFff77iFPLLL45555Litt3fJTc?TIoT/^"=;"^;='''','''''''~~~-.-.-.-``-_---.--. _=_.---......--
f7fJJfJ77777Jfi7J77Jffff##q9OmEVLitIff7oossoTfIta5(VqH1cTJo??or?osrs?o>^"';+''^='',+*,'=^+ `<>/<esr?*c?esffi7J7JTofIAwuLFF5L52uuLitttIJsoII3IT\+,^^^;=*;";='''''':``:``-`:`_-``_---`__`-_-`~---.---...-
f7f7Jff7J77J7A7J77IfJII%hhOE$GCuAt3If7TrsTJJI3iF2VK!\/!<oTToTossrr3fY<!<+!+/+'^="'''!vvsT++!^;=/**;+"*++>""\viiIatLF5P4Fww5iitIT?sfFuuP3>*==^""";=,'~::::::_----`~~~`-_-`_:_---------------
7fIfffJJJJ7fftITJJJIIfIIi&jjhh$$$$Ed(wit3IffTooT7fIti5u(V1***vrevrrrTs?soTossssv!<****^"";"+<?!*++"^;+;"^*+\^+;";;"++\/!?>oiIAP4LT7YiIo/;!ei2P()uf?1>\+,"+;"=`_''':~=~```_~:::``_`-``_----:::-..--~_--
ffffJJJffff7iJ7IfffIJYN$jhOhjE$$[]M(uA3II7TooTJI3iAPC1!+\*\!**><soosT???s?JT7fIoT1>>e?r>\**///*/*+++>=+*<^+*<!+>\c/>fJtFPi3oJiIiL(2P2P()SPLiiiitio/<\/\*"=_'':--:`::`:~'~`--_`_-------.-.---.......
fJ7ffJffffItYJfffIJY$G]mhjjm$[[]MG)watY7Tooo7JIIa52nis>!//***++e>>seer?oTfYtttt3aAttatf?e<\>*r<<><!!<>*!>!><s>!<\\>e<eItiL((V))V2w2P))uPwwF>*_ ^/+=::~-`~---`~`_-.```-....-_-.-..---.--.-
IIfffIIIff3JJJJIIYamG[GEE$GjEM[MW4it3If7ToooTItiiLPA>!<**^"=^+^;"+/>?soIfIIIIf3tA5wuFAT7???c?esT7see?sT/<fYf?TotIA(n%UU(n()(((P4itJ7o7TY5Le>*+\/+''''`-.---_``_```_-_:':_--~:_---`::_...-
IIIIIIIIIItfJffffIY(j[[[[[G$]$mGj$]M]$n2FaIffJTToTfItaFwT!\/*++;=^^++^+!!*+++<e?JawLiuP#nV)PiiY7o7fI7o??c- !?aCUCg###%H#Cd9S%gUw77rTaP%H3ITcc>,'~````_-----`',,~_-`~`---:'~-----_---
tIIIIIfIYJ7ffIIIYa0]G$[]]GmjOGG$jEG25Ft3Y7ToTTfIaw(T1*/++*"^*+,=***++++<1rYr c5VUgn##gZ#)VVVVC(L5(Vn##%D9)inU]MMMMMG$$jjjEGGXi31',==>>"=~'''~``:~'''~~=~__~~----:~:~
YYIfItwfIIIIIYYijM[$GGGmG]]G]8[G&u5ia3IfJT77oTtAF(sT*\!+++++=*!\//!\<r??TiAww)2n)()()(u)(n()(ngUn(CgS%HbdK$]MMMEMRM][GGGGGmhjmGS!+~="+**<!++=,'''''''''''','''''''''''''''~''''
t33YIAfIIIIIIY335GG[[][[$jGGG]E$mG)2uLiat3If7TTTI33L%r/\>^+^+*+*>c<<TiitYIaT7iAiIrffiL5(()2V%DZKk$G8BRRRM8RRMMM]]M]]M][[GGG$G$hu/**!/***++++""++;=,''''==~,'~`::::~:_`~
源码:
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObjectContainer; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; import flash.net.FileReference; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; /** * 分析图片生成文本表现形式 * @author:Frost.Yen * @E-mail:871979853@qq.com * @create: 2016-6-28 下午12:25:01 * */ [SWF(width="1920",height="1080")] public class ImageToText extends Sprite { private var _charArr:Array = []; private var _text:TextField; private var _file:FileReference; private var _ldr:Loader; public function ImageToText() { _text = new TextField; var tfm:TextFormat = new TextFormat; tfm.size = 8; //tfm.leading = -2; _text.defaultTextFormat = tfm; _text.autoSize = TextFieldAutoSize.LEFT; var text:String = " "; var min:int = 32; var max:int = 120; while (++min < max) { var c:String = String.fromCharCode(min); text += c; } text += " .'*#@%+-)(TiI?><~"; for (var i:int = 0; i < text.length;i++ ) { c = text.charAt(i); _charArr.push({d:getDensity(c),t:c}); } _charArr.sortOn("d", Array.NUMERIC|Array.DESCENDING); addChild(_text); var btn:TextField = getTextButton(this,"浏览图片",10,1000,100,30); btn.addEventListener(MouseEvent.CLICK,browse); _ldr = new Loader(); _ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad2); } public function getTextButton(parent:DisplayObjectContainer,text:String,x:Number,y:Number,width:Number,height:Number):TextField { var button:TextField = new TextField(); button.autoSize = "center"; button.width = width; button.height = height; button.selectable = false; button.border = true; button.htmlText = "<a href='event:#'>"+text+"</a>"; button.x = x; button.y = y; parent.addChild(button); return button; } /** * 根据图像渲染生成文字效果 * @param bmd 图像 * @return */ private function render(bmd:BitmapData):void { _text.width = bmd.width; _text.height = bmd.height; var x:int = 0; var y:int = 0; _text.text = ""; while (y < bmd.height) { while (x<bmd.width) { var gray:Number = getGray(bmd.getPixel(x, y)) / 0xff; var index:int = int((_charArr.length - 1) * gray); _text.appendText(_charArr[index].t); var r:Rectangle = _text.getCharBoundaries(_text.text.length - 1); x = r.right; } _text.appendText("\n"); y = r.bottom; x = 0; } } /** * 获取文字的明暗值 * @param t 文字 * @return Number */ private function getDensity(t:String):Number { var ttf:TextField = new TextField; ttf.autoSize = TextFieldAutoSize.LEFT; ttf.text = t; var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff); bmd.draw(ttf); var c:int = 0; for (var x:int = 0; x < bmd.width;x++ ) { for (var y:int = 0; y < bmd.height;y++ ) { if (bmd.getPixel(x,y)!=0xffffff) { c++; } } } return c / ttf.width / ttf.height; } private function getR(color:uint):uint { return color << 8 >>> 24; } private function getG(color:uint):uint { return color << 16 >>> 24; } private function getB(color:uint):uint { return color << 24 >>> 24; } /** * 获取像素点的灰度 * @color 像素点的颜色值 * @return uint */ private function getGray(color:uint):uint { return getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114; } private function browse(e:Event):void { _file = new FileReference(); _file.browse(); _file.addEventListener(Event.SELECT, onSelect); } private function onSelect(e:Event):void { _file.load(); _file.addEventListener(Event.COMPLETE, onLoad); } private function onLoad(e:Event):void { _ldr.loadBytes(_file.data); } private function onLoad2(e:Event):void { var content:Bitmap = e.target.content as Bitmap; content.x = content.width+100; stage.addChild(content); render(content.bitmapData.clone()); } } }