catalog

. 引言
. struts2的类型转换
. struts2的输入校验
. struts2的拦截器机制
. 使用struts2的Ajax支持
. struts2 OGNL表达式
. struts2的文件上传
. Struts2标签库

0. 引言

. 与所有MVC框架类似,struts2也提供了类型转换和输入校验支持
. struts2提供了非常强大的类型转换支持,它既提供了大量内建类型转换器,用以满足常规的Web开发,也允许开发者实现自己的类型转换器
. struts提供了非常强大的输入检验功能,开发者既可以通过XML文件来配置校验规则,也可以通过重写validate()方法来进行更复杂的校验
. struts2拦截器机制是struts2框架的灵魂,拦截器完成了struts2框架的绝大部分功能
. struts2致力于成为一个完备的MVC框架,因此整合了Dojo库
. struts2框架提供了简单、易用的上传、下载支持

0x1: Action

HelloWorld.jsp

<%--
Created by IntelliJ IDEA.
User: zhenghan.zh
Date: //
Time: :
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title></title>
</head>
<body>
<h2><s:property value ="message" />
</body>
</html>

classes/tutorial/HelloWorld.java

/**
* Created by zhenghan.zh on 2016/3/18.
*/
package tutorial; import java.text.DateFormat;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private String message; public String getMessage() {
return message;
} @Override
public String execute() {
message = " Hello World, Now is " + DateFormat.getInstance().format( new Date());
return SUCCESS;
}
}

classes/struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="ActionDemo" extends ="struts-default" >
<action name ="HelloWorld" class ="tutorial.HelloWorld" >
<result name="success">/HelloWorld.jsp</result>
</action>
</package>
</struts>

http://localhost:8080/s2-029/HelloWorld.action?
strut2是一种MVC的WEB架构,通过浏览器访问时指定的是C(control层)的映射,strut2在C层中进行逻辑处理后,将结果传递到View层进行展示(并返回处理结果状态码)

Relevant Link:

《轻量级Java_EE企业应用实战_struts2+Spring3+Hibernate整合开发》
http://blog.chinaunix.net/uid-7602921-id-2048554.html
http://blog.csdn.net/gaopu12345/article/details/47024555
http://blog.csdn.net/ldl420783321/article/details/7546607

1. struts2的类型转换

所有的MVC框架,都需要负责解析HTTP请求参数,并将请求参数传给控制器组件,但是HTTP请求参数都是字符串类型,但java是强类型语言,因此MVC框架必须将这些字符串参数转换成相应的数据类型

aaarticlea/png;base64,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" alt="" />

struts2提供了非常强大的类型转换机制,struts2的类型转换可以基于OGNL表达式,只要我们把HTTP参数(表单元素、GET/POST参数)命名为合法的OGNL表达式,就可以充分利用struts2的类型转换机制
除此之外,struts2提供了很好的扩展性,开发者可以开发自己的类型转换器,完成字符串和自定义复合类型之间的转换(例如完成字符串到Person实例的转换),如果类型转换中出现未知异常,类型转换器开发者无须关心异常处理逻辑,struts2的conversionError拦截器会自动处理该异常,并且哎页面上生成提示信息。struts2的类型转换器提供了非常强大的表现层数据处理机制,开发者可以利用struts2的类型转换机制来完成任意的类型转换
表现层另一个数据处理是数据校验,数据校验可以分为客户端校验和服务端校验两种

. 客户端校验: 进行基本校验,如检验非空字段是否为空,数字格式是否正确等等,客户端校验主要用来过滤用户的误操作
. 服务端校验: 防止非法数据进入程序,导致程序异常、底层数据库异常,保证程序有效运行及数据完整性的手段

0x1: struts2内建的类型转换器

对于大部分的常用类型,struts2可以完成大多数常用的类型转换,这些常用的类型转换是通过struts2内建的类型转换器完成的

. boolean/Boolean: 字符串和布尔值之间的转换
. char/Character: 字符串和字符之间的转换
. int/Integer: 字符串和整型值之间的转换
. long/Long: 字符串和长整型之间的转换
. double/Double: 字符串和双精度浮点值之间的转换
. Date: 字符串和日期之间的转换
. 数组: 在默认情况下,数组元素是字符串,如果用户提供了自定义类型转换器,也可以是其他复合类型的数组
. 集合: 在默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封装所有的字符串
//对于数组的类型转换将按照数组元素的类型来单独转换每一个元素,但如果数组元素的类型转换本身无法完成,系统将出现类型转换错误

0x2: 基于OGNL的类型转换

借助于内置的类型转换器,struts2可以完成字符串和基本类型之间的类型转换,除此之外,借助于OGNL表达式的支持,struts2允许以另一种简单方式将请求参数转换成复合类型

package crazyit;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport
{
private User user; //user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return (this.user);
} public String execute() throws Exception
{
if(getUser().getName().equalsIgnoreCase("LittleHann" )
&& getUser().getPassword().equalsIgnoreCase("") )
{
return SUCCESS;
}
else
{
return ERROR;
}
}
}

User.java

package crazyit;

public class User
{
private String name;
private String password; public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
} public void setPassword(String password)
{
this.password = password;
}
public String getPassword()
{
return this.password;
}
}

该Action里包含了一个User类型的属性,这个属性需要进行类型转换,struts2框架接收到HTTP请求参数后,需要将这些请求参数封装成User对象
但struts2提供的OGNL表达式允许开发者无须任何特殊处理,只需在定义表单域时使用OGNL表达式来定义表单域的name属性,struts2会在底层完成复合类型的映射

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body> <h1>Hello World From Struts2</h1>
<form action="login">
<s:textfield name="user.name" label="username"/>
<s:textfield name="user.password" label="password"/>
<tr>
<td colspan="">
<s:submit value="transfer" theme="simple"/>
<s:reset value="reset" theme="simple"/>
</td>
</tr>
</form> </body>
</html>

表单中的文本框对应两个请求参数: user.name、user.password,这就是OGNL表达式的形式,struts2会自动对OGNL请求参数作逐级切分,赋值对应对象的属性
通过这种方式,struts2可以将普通请求参数转换成复合类型对象,但有几点需要注意

. 因为struts2将通过反射来创建一个复合类(User类)的实例,因此系统必须为该复合类提供无参数的构造器
. 如果希望使用user.name请求参数的形式为Action实例的user属性的user属性赋值,则必须为user属性对应的复合类(User类)提供setName()方法,因为struts2是通过调用该方法来为该属性赋值的

更进一步,我们甚至可以直接生成Collection,或者Map实例

package crazyit;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction implements Action
{
//Action类里包含一个Map类型的参数
//Map的value类型为User类型
private Map<String, User> users; //user属性的setter和getter方法
public void setUsers(Map<String, User> users)
{
this.users = users;
}
public Map<String, User> getUsers()
{
return this.users;
} public String execute() throws Exception
{
System.out.println(getUsers());
if(getUsers().get("one").getName().equalsIgnoreCase("LittleHann" )
&& getUsers().get("one").getPassword().equalsIgnoreCase("") )
{
return SUCCESS;
}
else
{
return ERROR;
}
}
}

上面的Action中定义了一个users属性,该属性的类型为Map<String, User>,只要在定义表单域的name属性时使用OGNL表达式语法,struts2一样可以将请求参数直接封装成这种user属性

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body> <h1>Hello World From Struts2</h1>
<form action="login">
<s:textfield name="users['one'].name" label="the one user usrename"/>
<s:textfield name="users['one'].password" label="the one user password"/>
<s:textfield name="users['two'].name" label="the two user usrename"/>
<s:textfield name="users['two'].password" label="the two user password"/>
<tr>
<td colspan="">
<s:submit value="transfer" theme="simple"/>
<s:reset value="reset" theme="simple"/>
</td>
</tr>
</form> </body>
</html>

通过这种方式,struts2可以将HTTP请求转换成Map属性
类似地,如果我们需要访问Action的Map类型的属性,也可以使用OGNL表达式

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
the one user usrename: <s:property value="users['one'].name"/><br/>
the one user password: <s:property value="users['one'].password"/><br/>
the two user usrename: <s:property value="users['two'].name"/><br/>
the two user password: <s:property value="users['two'].password"/><br/>
</body>
</html>

如果把LoginAction中的user属性改为List<User>,也就是需要struts2将用户请求封装成List属性,同样可以利用OGNL表达式实现,我们通过索引来指定要将请求转换成List的哪个元素

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body> <h1>Hello World From Struts2</h1>
<form action="login">
<s:textfield name="users[0].name" label="the one user usrename"/>
<s:textfield name="users[0].password" label="the one user password"/>
<s:textfield name="users[1].name" label="the two user usrename"/>
<s:textfield name="users[1].password" label="the two user password"/>
<tr>
<td colspan="">
<s:submit value="transfer" theme="simple"/>
<s:reset value="reset" theme="simple"/>
</td>
</tr>
</form> </body>
</html>

0x3: 指定集合元素的类型

前面我们使用集合时使用了泛型,这种泛型可以让struts2了解集合元素的类型,struts2就可以通过反射来创建对应类的对象,并将这些对象添加到List中
但是如果不使用泛型,struts2就不知道使用类型转换器来处理该users属性,因此,开发者需要通过"局部类型转换文件"来指定集合元素的类型,类型转换文件就是一个普通的Properties(*.properties)文件,类型转换文件里提供了类型转换的相关配置信息

package crazyit;

import java.util.List;
import java.util.Map; import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction implements Action
{
private List users; //user属性的setter和getter方法
public void setUsers(List users)
{
this.users = users;
}
public List getUsers()
{
return this.users;
} public String execute() throws Exception
{
System.out.println(getUsers());
//因为没有使用泛型,所以要进行强制类型转换
User firstUser = (User)getUsers().get();
if(firstUser.getName().equalsIgnoreCase("LittleHann" )
&& firstUser.getPassword().equalsIgnoreCase("") )
{
return SUCCESS;
}
else
{
return ERROR;
}
}
}

如果仅仅通过上面Action类的代码,struts2无法知道该Action的users属性里集合元素的类型,所以我们要通过局部类型文件来指定集合元素的类型
文件名为ActionName-conversion.properties形式,类型转换文件应该放在和Action类文件相同的位置
为了指定List集合里元素的数据类型,需要指定两个部分

. List集合属性的名称
. List集合里元素的类型

通过在局部类型转换文件中指定如下key-value对即可

Element_<ListPropName>=<ElementType>
//ListPropName替换成List集合属性的名称、ElementType替换成集合元素的类型即可,例如
Element_users=crazyit.User

增加上面的局部类型转换文件后,系统将可以识别到users集合属性的集合元素是crazyit.User类型,因此struts2的类型转换器可以正常工作
总结一下,为了能让struts2能了解集合属性中元素的类型,可以使用如下两种方式

. 通过为集合属性指定泛型
. 通过在Actino的局部类型转换文件中指定集合元素类型

0x4: 自定义类型转换器

大部分时候,我们使用struts2提供的类型转换器,以及基于OGNL的类型转换机制,就能满足大部分类型转换需求,但是在有些特殊的情况下,例如需要把一个字符串转换成一个复合对象时,这就需要使用自定义类型转换器

package crazyit;

import java.util.List;
import com.opensymphony.xwork2.Action; public class LoginAction implements Action
{
private User user; //user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return this.user;
} public String execute() throws Exception
{
if(getUser().getName().equalsIgnoreCase("LittleHann" )
&& getUser().getPassword().equalsIgnoreCase("") )
{
return SUCCESS;
}
else
{
return ERROR;
}
}
}

从上面的代码中可以看出,该Action的user属性是User类型,而对应表单页发送的user请求参数则只能是字符串类型,struts2不知道如何完成字符串和User对象之间的转换,这种转换需要"自定义类型转换器"来完成
User类就似乎一个普通的JavaBean类
struts2的类型转换实际上依然是基于OGNL框架的,在OGNL项目中有一个TypeConverter接口,这个接口就是自定义类型转换器必须实现的接口

//OGNL提供的类型转换器接口
public interface TypeConverter
{
public Object converterValue(Map context, Object target, Member member, String propertyName, Object value, Class toType);
}

实现类型转换器必须实现上面的TypeConverter,但是因为接口里的方法太过复杂,所以OGNL项目还为该接口提供了一个实现类: DefaultTypeConverter,通常都采用扩展该类来实现自定义类型转换器,实现自定义类型转换器需要重写DefaultTypeConverter类的convertValue方法

package crazyit;

import java.util.Map;
import ognl.DefaultTypeConverter; public class UserConverter extends DefaultTypeConverter
{
//类型转换器必须重写convertValue方法,该方法需要完成双向转换
public Object convertValue(Map context, Object value, Class toType)
{
//当需要将字符串向User类型转换时
if(toType == User.class)
{
String[] params = (String[])value;
User user = new User();
String[] userValues = params[].split(",");
user.setName(userValues[]);
user.setPassword(userValues[]);
return user;
}
else if(toType == String.class)
{
User user = (User)value;
return "<" + user.getName() + "," + user.getPassword() + ">";
}
return null;
}
}

关于上面的类型转换器,有几点需要注意

. convertValue方法的作用
convertValue方法的作用最简单,该方法负责完成类型的转换,同时这种转换是双向的,为了让该方法实现双向转换,我们通过判断toType的类型即可判断转换的方向 . convertValue方法参数和返回值的意义
该方法有如下三个参数
) context: 类型转换环境的上下文
) value: 需要转换的参数,随着转换方向的不同,value参数值也是不一样的
) toType: 转换后的目标类型 . 浏览器发送的HTTP参数是一个字符串数组

可以认为DefaultTypeConverter是通过HttpServletRequest的getParameter Values(name)方法来获取请求参数值的,因此它获取的请求参数总是字符串数组,如果请求参数只包含一个单个的值,则该请求参数的值是一个长度为1的字符串数组

0x5: 注册类型转换器

仅仅为该应用提供类型转换器还不够,因为struts2依然不知道何时使用这些类型转换器,所以我么必须将类型转换器注册在WEB应用中,struts2框架才可以正常使用该类型转换

. 注册局部类型转换器: 局部类型转换器仅仅对某个Action的属性起作用
. 注册全局类型转换器: 全局类型转换器对所有Action的特定类型的属性都起作用
. 使用JDK1.5的注释来注册类型转换器: 通过注释方式来注册类型转换器

1. 局部类型转换器

注册局部类型转换器使用局部类型转换文件指定,只要在局部类型转换文件中增加如下一行即可

<propName>=<ConverterClass>
//propName: 指定需要进行类型转换的属性、ConverterClass: 指定类型转换器的实现类

LoginAction-conversion.properties

user=crazyit.UserConverterfdg

index.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body> <h1>Hello World From Struts2</h1>
<form action="login">
<s:textfield name="user" label="the one user usrename"/>
<s:textfield name="user" label="the one user password"/>
<tr>
<td colspan="">
<s:submit value="transfer" theme="simple"/>
<s:reset value="reset" theme="simple"/>
</td>
</tr>
</form> </body>
</html>

LoginAction.java

package crazyit;

import java.util.List;
import com.opensymphony.xwork2.Action; public class LoginAction implements Action
{
private User user; //user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return this.user;
} public String execute() throws Exception
{
return SUCCESS;
}
}

Loginsucc.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
user info: ${user}
</body>
</html>

因为已经实现了自定义转换器并进行了局部注册,因此这里可以直接使用user来输出内容
2. 全局类型转换器

局部类型转换器的局限性很明显,它只能对指定Action、指定属性起作用,但如果应用中有多个Action都包含了User类型的属性,或者一个Action中包含了多个User类型的属性,使用全局类型转换器将更合适
全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用,例如对所有crazyit.User类型的属性起作用
注册全局类型转换器需要提供一个xwork-conversion.properties文件,该文件也是Properties文件,直接放在WEB应用的WEB-INF/classes路径下即可

<proType>=<ConvertClass>
//proType替换成需要进行类型转换的类型、ConvertClass替换成类型转换器的实现类

例如

crazyit.User=crazyit.UserConvertert

一旦注册了上面的全局类型转换,该全局类型转换器就会对所有类型为crazyit.User类型的属性起作用

. 局部类型转换器对指定Action的指定属性生效,一个属性只调用convertValue()方法一次
. 全局类型转换器对指定类型的全部属性起作用,因此可能对一个属性多次调用convertValue()方法进行转换,当该属性是一个数组或集合时,该数组或集合中包含几个该类型的元素,那么就会调用convertValue()方法多次

3. 使用JDK1.5的注释来注册类型转换器

0x6: 基于struts2的自定义类型转换器

我们之前讨论的都是类型转换器都是基于DefaultTypeConverter类实现的,基于该类实现类型转换器时,将字符串转换成复合类型以及反转要通过convertValue方法实现,因此我们必须先通过toType参数来判断转换的方向,然后分别实现不同转换方向的转换逻辑
为了简化类型转换器的实现,struts2提供了一个StrutsTypeConverter抽象类,这个抽象类是DefaultTypeConverter类的子类,StrutsTypeConverter类简化了类型转换器的实现,该类已经实现了DefaulTypeConverter的convertValue方法,实现该方法时,它将两个不同转换方向替换成不同方法

0x7: 处理set集合

Action中的Set集合属性处于无序状态,所以struts2不能准确得将请求参数转换成Set元素,不仅如此,由于Set集合里元素的无序性,所以struts2也不能准确读取Set集合里的元素,除非Set集合里的元素有一个标识属性,这个标识属性可以唯一地表示集合元素,原理上类似于很多编程语言中提供的存储数据结构可以重写一些"比较器"以此来实现排序、索引等目的

puublic class LoginAction extends ActionSupport
{
private Set users;
public void setUsers(Set users)
{
this.users = users;
}
public Set getUsers()
{
return this.users;
}
}

为了让struts2能够将参数转换成Set集合对象,我们需要提供类型转换器,除此之外,为了让struts2能够准确地存取Set集合元素,我们还必须让struts2识别Set集合元素的标识属性,指定struts2根据该标识属性来存取Set集合元素

public class User
{
private String name;
//省略name的setter、geter方法 public boolean equals(Object obj)
{
//如果将比较的两个对象是同一个对象,则直接返回true
if(this == obj)
{
return true;
}
//只有当obj是User对象
if(obj != null && obj.getClass() == User.class)
{
User user = (User)obj;
if(this.getName().equals(user.getName()))
{
return true;
}
}
return false;
} //根据name属性来计算hashCode
public int hashCode()
{
return name.hashCode();
}
}

上面的代码重写了equals、hashCode方法,该User类的标识属性是name,当两个User的name属性相等时即可认为它们相等
struts2允许通过局部类型转换文件来指定Set集合元素的标识属性,在局部类型转换文件中增加如下

KeyProperty_<SetPropName>=<keyPropName>
//SetPropName替换为集合属性名、keyPropName替换成集合元素的标识属性

一旦指定了集合元素的索引属性后,struts2就可以通过该索引属性来存取Set集合元素了

<!-- 访问user集合属性里索引属性值为LittleHann的元素的name属性 -->
<s:property value="users('LittleHann').name"

注意到访问Set元素用额是圆括号,而不是方括号,但对于数组、List、Map属性,则通过方括号来访问指定集合元素

0x8: 类型转换中的错误处理

实际上,表现层数据涉及的两个处理: 数据校验和类型转换是紧密相关的

. 类型转换: 只有当输入数据是有效数据时,系统才可以进行有效的类型转换
. 数据校验: 只有当数据完成了有效的类型转换后,下一步才去做数据校验

struts2提供了一个conversionError拦截器,这个拦截器被注册在默认的拦截器栈中
struts-default.xml

<interceptor-stack name="defaultStack">
..
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
..
</interceptor-stack>

默认拦截器栈中包含了conversionError拦截器的引用,如果struts2的类型转换器执行类型转换时出现错误,该拦截器将负责将对应错误封装成"单域错误(FieldError)",并将这些错误信息放入ActionContext中
显然,conversionError拦截器实际上是AOP中的Throws处理,Throws处理当系统抛出异常时启动,负责处理异常,通过这种方式,struts2的类型转换器中只完成类型转换逻辑,而无需关注异常处理逻辑

为了让struts2框架处理类型转换错误,以及使用后面的数据校验机制,系统的Action类都应该通过继承ActionSupport类来实现,ActionSupport类为完成类型转换错误处理、数据校验实现了许多基础工作

1. 处理类型转换错误

当类型转换出现异常时,conversionError拦截器会处理该异常,然后转入名为input的逻辑视图,因此需要为该Action增加名为input的逻辑视图定义

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="crazyit" extends="struts-default">
<action name="login" class="crazyit.LoginAction" method="execute">
<result name="success">/Loginsucc.jsp</result>
<result name="input">/input.jsp</result>
</action>
</package>
</struts>

如果用户输入不能成功转换成User对象,系统将转入input.jsp页面,等待用户再次输入
同时,struts2会负责将错误封装成FieldError,并将其放入ActionContext中,这样就可以在对应视图中输出转换错误,在页面中使用<s:fielderror/>标签即可输出类型转换错误信息
2. 处理集合属性的转换错误

如果Action里包含一个集合属性,只要struts2能检测到集合里元素的类型(可以通过局部类型转换文件指定、也可以通过泛型方式指定),类型转换器就可以正常起作用,当类型转换器在执行类型转换过程中出现异常时,系统的conversionError拦截器就会处理该异常,处理结束后返回名为input的逻辑视图

2. struts2的输入校验

输入校验也是所有WEB应用必须处理的问题,异常的输入,轻则导致系统非正常中断,重则导致系统崩溃,应用程序必须能正常处理表现层接收的各种数据,通常的做法是遇到异常输入时应用程序直接返回,提示浏览器必须重新输入,也就是将那些异常输入过滤掉,对异常输入的过滤,就是输入校验,也称为数据校验
struts2提供了强大的类型转换机制,也提供了强大的输入校验功能,struts2的输入校验既包括服务端校验,也包括客户端校验

0x1: 编写校验规则文件

struts2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,struts2的验证框架将会负责进行服务器校验和客户端校验,struts2在底层会自动将配置文件转换为Servlet形式的输入验证判断

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>请输入您的注册信息</h3>
<s:fielderror/>
<form method="post" action="regist.action">
name: <input type="text" name="name"><br />
pass: <input type="text" name="pass"><br />
age: <input type="text" name="age"><br />
birth: <input type="text" name="birth"><br />
<input type="submit" value="注册">
</form>
</body>
</html>

假设本应用要求这4个请求参数满足如下规则

. name、pass只能是字母和数组,且长度在4~25之间
. 年龄必须是1~150之间的整数
. 生日必须在1900--~--21之间

RegistAction.java

package crazyit;

import java.util.Date;
import com.opensymphony.xwork2.ActionSupport; public class RegistAction extends ActionSupport
{
private String name;
private String pass;
private int age;
private Date birth; //name
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name = name;
}
//pass
public String getPass()
{
return this.pass;
}
public void setPass(String pass)
{
this.pass = pass;
}
//age
public int getAge()
{
return this.age;
}
public void setAge(int age)
{
this.age = age;
}
//birth
public Date getBirth()
{
return this.birth;
}
public void setBirth(Date birth)
{
this.birth = birth;
} public String execute() throws Exception
{
return SUCCESS;
}
}

通过为该Action指定一个校验规则文件后,即可利用struts2的输入校验功能对该Action进行校验

<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验文件的根元素 -->
<validators>
<!-- 校验Action的name属性 -->
<field name="name">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入名字</message>
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{,})]]></param>
<message>您输入的用户名只能是字母和数字
,且长度必须在4到25之间</message>
</field-validator>
</field>
<!-- 校验Action的pass属性 -->
<field name="pass">
<!-- 指定pass属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入密码</message>
</field-validator>
<!-- 指定pass属性必须满足匹配指定的正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{,})]]></param>
<message>您输入的密码只能是字母和数字
,且长度必须在4到25之间</message>
</field-validator>
</field>
<!-- 指定age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min"></param>
<param name="max"></param>
<message>年龄必须在1到150之间</message>
</field-validator>
</field>
<!-- 指定birth属性必须在指定范围内-->
<field name="birth">
<field-validator type="date">
<!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
<param name="min">--</param>
<param name="max">--</param>
<message>生日必须在${min}到${max}之间</message>
</field-validator>
</field>
</validators>

struts2中每个Action都有一个校验文件,因此该文件的文件名遵守如下规则

<Action name>-validation.xml
//<Action name>可变,且该文件应该被保存在与Action class文件相同的路径下

与类型转换失败类似,当输入校验失败后,struts2也是自动返回名为"input"的Result,即使类型转换失败,系统并不是直接返回 input 逻辑视图,依然会调用 Struts 2 的输入校验机制进行输入校验

需要注意的是,RegistAction-validation.xml的文件头对struts2来说很重要,它规约了当前配置文件的文法规范,如果这些配置信息错误,将会导致struts2加载失败,进而输入验证器失败
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

0x2: 国际化提示信息

0x3: 使用客户端校验

struts2应用中使用客户端校验很简单

. 将输入页面的表单元素改为使用struts2标签来生成表单
. 为该<s:form../>元素增加validate="true"属性

register.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>请输入您的注册信息</h3>
<s:fielderror/>
<s:form action="regist" validate="true">
<s:textfield name="name" label="name"/>
<s:textfield name="pass" label="pass"/>
<s:textfield name="age" label="age"/>
<s:textfield name="birth" label="birth"/>
<s:submit value="reigst"/>
</s:form>
</body>
</html>

需要注意的是,如果我们希望struts2的客户端校验能发生作用,那么进入jsp页面之前必须先经过struts2的核心Filter,在纯粹的MVC思想中,JSP页面只是简单的视图,用户请求不应该直接向视图页面发送请求,而是应该向控制器发送请求,由控制器来调用视图页面向浏览者呈现数据
为了避免这种情况,我们把应用中所有JSP页面都移到WEB-INF/content目录下,这样就可以避免浏览者直接向指定页面发送请求(这是MVC框架保证的)

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="crazyit" extends="struts-default">
<action name="*">
<result>/WEB-INF/content/{}.jsp</result>
</action> <action name="regist" class="crazyit.RegistAction">
<result name="input">/register.jsp</result>
</action>
</package>
</struts>

增加了上面的配置后,浏览者不应该直接向register.jsp页面发送请求,而是应该向regist Action发送请求,这个请求会先经过StrutsPrepareAndExecuteFilter,然后再由该Filter forward到/WEB-INF/content/register.jsp页面

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>请输入您的注册信息</h3>
<s:fielderror/>
<s:form action="register" validate="true">
<s:textfield name="name" label="name"/>
<s:textfield name="pass" label="pass"/>
<s:textfield name="age" label="age"/>
<s:textfield name="birth" label="birth"/>
<s:submit value="reigst"/>
</s:form>
</body>
</html>

客户端校验依然是基于JavaScript完成的,因为JavaScript本身的限制,有些服务端校验不能转换成客户端校验,客户端校验仅仅支持如下几种校验器

. required validator: 必填校验器
. requiredstring validator: 必填字符串校验器
. stringlength validator: 字符串长度校验器
. regex validator: 表达式校验器
. email validator: 邮件校验器
. url validator: 网址校验器
. int validator: 整数校验器
. double validator: 双精度数校验器

客户端校验有三个值得注意的地方

. struts2的<s:form../>元素有一个theme属性,不要将该属性指定为simple
. 浏览者不能直接访问启动客户端校验的表单页,这样会引发异常,我们可以把启用客户端校验的表单页放到WEB-INF路径下去,让浏览者访问的所有资源之前都先经过它的核心Filter
. 启用客户端校验的表单页面的action和namespace要分开写,例如我们向namespace为/lee,name为regisPro的Action请求,应写成<s:form action="registPro" namespace="/lee">,而不应该写成<s:form action="lee/registPro">

0x4: 字段校验器配置风格

struts2提供了两种方式来配置校验规则

. 字段校验器风格: 字段优先
采用字段校验器配置风格时,校验文件里以<field../>元素为基本元素 . 非字段校验器风格: 校验器优先
以<validator../>元素为基本元素
//并没有本质的不同,只是组织校验规则的方式不同

0x5: 非字段校验器配置风格

对于非字段校验器配置风格,这是一种以校验器优先的配置方式,在这种配置方式下,校验规则文件的根元素下包含多个<validator../>元素,每个<validator../>元素定义了一个校验规则
对于采用非字段校验器配置风格的校验规则文件,<validator../>元素下有多个<validator../>元素,每个<validator../>元素都有如下格式

<validator type="校验器名">
<param name="fieldName">需要被校验的字段</param>
<param name="参数名">参数值</param>
..
<message key="I18Nkey">校验失败后的提示信息</message>
</validator>

RegistAction-validation.xml

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts2数据校验的规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- Struts2校验文件的根元素 -->
<validators>
<!-- 配置指定必填字符串的校验器 -->
<validator type="requiredstring">
<!-- 使用该校验器校验name属性 -->
<param name="fieldName">name</param>
<param name="trim">true</param>
<!-- 指定校验失败后输出name.required对应的国际化信息 -->
<message>${getText("name.requried")}</message>
</validator>
<!-- 配置指定正则表达式的校验器 -->
<validator type="regex">
<!-- 使用该校验器校验name属性 -->
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="expression"><![CDATA[(\w{,})]]></param>
<!-- 指定校验失败后输出name.required对应的国际化信息 -->
<message>${getText("name.regex")}</message>
</validator>
<!-- 配置指定必填字符串的校验器 -->
<validator type="requiredstring">
<!-- 使用该校验器校验pass属性 -->
<param name="fieldName">pass</param>
<param name="trim">true</param>
<!-- 指定校验失败后输出pass.required对应的国际化信息 -->
<message>${getText("pass.requried")}</message>
</validator>
<!-- 配置指定正则表达式的校验器 -->
<validator type="regex">
<!-- 使用该校验器校验pass属性 -->
<param name="fieldName">pass</param>
<param name="trim">true</param>
<param name="expression"><![CDATA[(\w{,})]]></param>
<!-- 指定校验失败后输出pass.required对应的国际化信息 -->
<message>${getText("pass.regex")}</message>
</validator>
<!-- 配置指定整数校验器 -->
<validator type="int">
<!-- 使用该校验器校验age属性 -->
<param name="fieldName">age</param>
<!-- 指定整数校验器的范围-->
<param name="min"></param>
<param name="max"></param>
<!-- 指定校验失败后输出age.range对应的国际化信息 -->
<message>${getText("age.range")}</message>
</validator>
<!-- 配置指定日期校验器 -->
<validator type="date">
<!-- 使用该校验器校验birth属性 -->
<param name="fieldName">birth</param>
<!-- 指定日期校验器的范围-->
<param name="min">--</param>
<param name="max">--</param>
<!-- 指定校验失败后输出birth.range对应的国际化信息 -->
<message>${getText("birth.range")}</message>
</validator>
</validators>

0x6: 短路校验器

为了实现短路校验器,我们只需要在<validator../>元素或<field-validator../>元素中增加short-circuit="true"即可,则当第一次校验失败的时候,之后的校验失败将不会再显示

0x7: 校验文件的搜索规则

struts2的一个Action中可能包含了多个处理逻辑,当一个Action类中包含多个类似于execute的方法时,每个方法都是一个处理逻辑,不同的处理逻辑可能需要不同的校验规则,struts2允许为不同控制逻辑制定不同校验规则的支持
为了能精确控制每个校验逻辑,struts2允许通过为校验规则文件增加名为Action别名来指定具体需要校验的处理逻辑

<ActionClassName>-<ActionAliasName>-validation.xml
//ActionClassName是Action处理类的类名,ActionAliasName是在struts.xml中配置该Action时所指定的name属性

假设系统有两个Action: BaseAction、ResigtAction,则系统搜索规则文件顺序如下

. BaseAction-validation.xml
. BaseAction-ActionAliasName-validation.xml
. RegistAction-validation.xml
. RegistAction--ActionAliasName-validation.xml
//即使找到第一条规则,系统还会继续搜索,并将规则全部汇总,取并集,如果两个校验文件中指定的校验规则冲突,则后面文件中的校验规则取胜

0x8: 检验顺序和短路

校验器增加了短路的特性后,校验器的执行顺序就变得非常重要了,因为前面执行的校验器可能阻止后面校验器的执行

. 所有非字段风格的校验器优先于字段风格的校验器
. 所有非字段风格的校验器中,排在前面的先执行
. 所有字段风格的校验器中,排在前面的先执行

校验器短路的原则是

//在短路模式下
. 所有非字段校验器是最优先执行,如果某个非字段校验器校验失败了,则该字段上所有字段校验器都不会获得校验的机会
. 非字段校验器的校验失败,不会组织其他非字段校验器的执行
. 如果一个字段校验器校验失败后,则该字段下且排在该校验失败的校验器之后的其他字段校验器都不会获得校验的机会
. 字段校验器永远不会阻止非字段校验器的执行

0x9: 内建校验器

struts2提供了大量的内建校验器,这些内建的校验器可以满足大部分应用的校验需求
xwork-core-2.3.24.jar\com\opensymphony\xwork2\validator\validators\default.xml

<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>

如果开发者自己开发了一个自己开发的校验器,则可以通过添加一个validators.xml文件(放在WEB-INF/classes路径下)来注册一个校验器,validators.xml文件的内容也是由多个<validator../>组成的,每个<validator../>元素注册一个校验器
如果struts2在WEB-INF/classes路径下找到一个validators.xml文件,则不会再加载系统默认的default.xml文件,因此如果开发者提供了自己的校验器注册文件(validators.xml),一定要把default.xml文件里的全部内容复制到validators.xml文件中

0x10: 基于annotation的输入校验

基于Annotation的输入校验实质上也属于struts2零配置特性的一部分,它允许使用Annotation来定义每个字段应该满足的规则
为了在Action类通过Annotation指定验证规则,经过如下配置即可

. 使用验证器Annotation修饰Action里各属性对应的setter方法

0x11: 手动完成输入校验

基于struts2校验器的校验可以完成绝大部分输入校验,但这些校验器都具有固定的校验逻辑,无法满足一些特殊的校验规则,对于一些特殊的校验要求,可能需要在struts2中进行手动校验,struts2提供了良好的可扩展性,从而允许通过手动方式完成自定义校验

1. 重写validate()方法

package crazyit;

import java.util.Date;
import com.opensymphony.xwork2.ActionSupport; public class RegistAction extends ActionSupport
{
//封装用户请求参数的四个属性
private String name;
private String pass;
private int age;
private Date birth; //name属性的setter和getter方法
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
} //pass属性的setter和getter方法
public void setPass(String pass)
{
this.pass = pass;
}
public String getPass()
{
return this.pass;
} //age属性的setter和getter方法
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
} //birth属性的setter和getter方法
public void setBirth(Date birth)
{
this.birth = birth;
}
public Date getBirth()
{
return this.birth;
} public void validate()
{
System.out.println("进入validate方法进行校验" + name);
if(!name.contains("LittleHann"))
{
addFieldError("user", "您的用户名必须包含LittleHann");
}
} }

在validate方法中,一旦发现校验失败,就把校验失败提示通过addFieldError方法添加进系统的FieldError中,这与类型转换失败后的处理是完全一样的,如果struts2发现系统的FieldError不为空,将会自动跳转到input逻辑视图
2. 重写validateXxx()方法

我们知道,struts2的Action类里可以包含多个处理逻辑,不同的处理逻辑对应不同的方法,即struts2的Action类里定义了几个类似于execute的方法,只是方法名不是execute,如果我们的输入校验只想校验某个处理逻辑,struts2的Action允许提供一个validateXxx()方法,其中Xxx即是Action对应的处理逻辑方法

总结一下,struts2的输入校验需要经过如下几个步骤

. 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属性值
. 在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到FieldError里,然后执行第3步,如果转换过程中没有异常信息,则直接进入第3步
. 使用struts2应用中所配置的校验器进行输入校验
. 通过反射调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法
. 调用Action类里的validate()方法
. 如果经过上面5步没有出现FieldError,将调用Action里处理用户请求的处理方法,如果出现了FieldError,系统将转入input逻辑视图所指定的视图资源

aaarticlea/png;base64,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8PDwvXv3Llq0aMeOHYcOHWptbW1vb1+/fv1XX33197///cMPP3zvvfdmzpx58eLFcePGFRUVnTt37uuvv7azswsODk5NTf3yyy8XL158/PjxnJwcBoOhUCgSExMDAwN//PHHWbNmHThwALKXNBpNTU0NeAMgh58gCBRnB7cpSCF4b3k8HovFEggEu3fvflRdBYN5ShlMJSUSSUhIiNlshuQVuVyO3F5qtRqybZRKJaTsyOXytra2goICGxuboKCgNWvWfPPNN5cvX96/f7+zs/P8+fNLSkqKi4ujoqKKioqSkpJWrFgxZ86cd9999+jRoyUlJcHBwevXr1+0aNHy5csnT5780UcfOTs7L1++3MXFJSIiIj8/H6Tz/fffnzBhwqJFiz744IOFCxcmJyenpqZ6e3u/9957I0aMmDhx4vTp07/66qt169a988478NsFCxZMmjQpNDTUy8trxIgRhw4dmjBhQnBwcFxc3LZt23x9fefOnXvjxo28vLzS0tI7d+7ExMQ0NDSEhIT4+/tPmjTp73//+8cff/z8888PHz58+fLlXl5eVCo1Kirq66+/Xrhw4axZs7755psVK1aEhISMHz8+KSnp7Nmz77zzzujRo0NCQq5evfrBBx8sWbLk4MGDOTk5iYmJ3t7e8+fPnzBhgq2t7ZIlS95///1Vq1bV1NS0tLSw2WyRSNTT08Pj8dBUS4jSgNdSpVLJ5fLu7m7IV+Xz+X19fdu2bXtUXQWDeUoZbMStVCqDgoIEAoFKpQI3GaQ9glyCLQluuI6Ojq6uLh6P197evnr16pEjR7733nv5+fn+/v7FxcWpqaknTpy4deuWtbW1lZVVYGCgv7//xx9//PHHH3/11VeTJk1asGBBXV1dXl7e559/Hhwc7ObmNnbs2FOnTr3wwguVlZV3796Fbz744IO//e1v77zzzogRI0aNGvXSSy9t2rQpOzs7OTn59ddfHzly5D/+8Y/XXnvNycmpvr7+s88+u379elNT06VLl9588827d+8mJye/8cYbaWlpb7755oULF5qbm3ft2vW3v/3tu+++W7Ro0eeffz59+vSXXnpp/PjxjY2NBQUF6enpCxcuPH78+LZt22bMmBEaGrp8+fKmpiahUNjR0WFra+vn5+fs7Lx06VJbW9uEhIQJEyZkZWVNnz79xRdffOmllxwcHL7++utXXnnlk08+sbe3X7BgQVFREYvFio+Pnzhx4quvvvrOO+9YWVl9+OGHL730UkVFBXhXGxsbqVSqVCqF8DoEsiBSDxY9+DobGxs7OzsZDAa2JTGYv5rB8iW1Wu2RI0f6+vrAlgRlVCqVEokERn8QxJBKpfBggyPy1q1bX3zxxc6dO8vLy3ft2rV06dL4+Pj9+/c3Nze3tLSMHz8+JSWlo6Njzpw5VlZW//d//+fn58fn8+/cudPS0pKdnT1hwgQHB4fnn39+3LhxgYGBfD5fp9N1dHQ0NTXNmzfvu+++27Bhg5ub21dffZWUlFRVVVVVVZWWlhYVFbV06dJDhw55eHj4+vqGhYWtXr26qamps7Nz48aNo0aN+uGHH0aMGPHOO+9UVFRMnTo1Li6utLT0//7v/8aNG/fjjz9qNBoul1teXj5mzJj79+93dHSsWrXqs88+S0hIEAgEhYWFly5dam5utre3j4qKEgqFV69eXbRoUWpq6oEDB1avXn3w4MGVK1f+85//vHnzpqen59atW//1r38tXrx43759f//732F2TVdXV1NTU3p6+siRI99///233norMTFx+vTp9+/ff/vtt/Py8rRaLY1G6+zsBDcCRMMhRC6TySDOThCERCLhcDhisZjBYDCZTB8fn0fYWzCYp5HBbEmj0RgYGAgJ0mazGWwZVAnCZDKJxWK1Wm02m1tbWyGw0NPTU1tb++abb7q4uFRWVsbHx48cOTIxMTE8PBw8m+PHjy8sLLx+/fpnn302duxYa2trb2/vrq4umJ9Ho9G2bNkybNiw9957b9SoUXw+XyAQZGRk+Pj4zJ8//80331y1atXXX3+9adOmuLi4MWPGjBgx4uDBg6NHj7aysnr99dc//PDDysrKyZMnz5gxw9bWlsvl7t+//+uvv/by8srJydm8efOIESP8/Pw++uijysrKCxcuHDhw4MMPP2xvb1cqlUwmk0ajvfPOO2lpaZWVldbW1u+///6aNWsOHDiwbNmyhQsXBgcHb926NSgoqK6ubv/+/REREcXFxfHx8V9//XV6evr7779fU1OTmppKpVJbWlrefvttJyennTt3jho16u233x4+fPiVK1cuX7786aefTpgwYe7cuf/4xz/2799vZWW1fv36qVOnHj16FJIBKBRKTU2NwWCALE4wIaVSKUo153K5TCYTJt5UVVW5ubk9yu6CwTyFDKaSarX6yJEjMJcO9BGMSnKgvqFEIoHiQP39/UwmUy6Xd3Z22tnZbdq0ydnZ2cnJKSYmJiYmJj8/PzQ0FFKmx44de/jwYVtb21GjRo0ZM+Zf//rX7t279Xo9lUo9d+7c/PnzZ86c6eTk9M033zg7O8fExNTU1KSnp7u5uV2+fHn79u1vv/32+PHjb968uXbt2sDAwKysrJaWFiqVOm3atDFjxtjY2HA4nNmzZ7/22msbNmygUqn9/f379+/fu3dvT0/Pu+++O3/+/JMnT77++uuenp6pqakMBuNf//pXe3s75FFWV1d/+umnhYWFWVlZ9vb2y5YtW7FixejRo1955ZXPP//cyspq1qxZS5YsodFoRUVFCxcudHFx2bRp03PPPbd69WpHR0c6nZ6VlTV79mxbW9u//e1vX3zxxYYNG3bs2DFt2jQHBweYeFNbWxsQEDBz5syJEycOGzZs+PDhY8eOHTdunI+PD41Gg3ypvr4+oVAI1xzy9mHaJWQ+qVQqmN+p0+loNJqnp+cj7C0YzNPIYCrJZrN9fHwgVRvlphAEAQmDWq1WJpMZjcbOzk4YMjc3N4eHh0+ZMgVGwZs2bWpsbLx//35ubu727dvZbLZUKn3jjTfGjh0bHh4+evTojz/++OWXX964cWNbW5urq+s///nPwMDAAwcOBAYGzpw5s6OjY8aMGVZWVqGhoTKZjM/nu7i4zJ8/f/ny5aNGjVqxYgVU32hvb29oaNi6detbb70VEhICDVi8ePH48ePv3bvHYDB27NixZs0aZ2fnffv2FRYW6vX6WbNmjR49+uTJk5WVlV9++WVRURFJknfu3AkLC/viiy+gGAeHw6mqqrpy5crnn3++e/fuxMTECRMmXLx4saurSyqV1tXVRUZGxsbGxsXFvfHGGydOnEhISAgPD79x48bkyZPHjRsHQ/va2tolS5Z8/fXXxcXFJSUlFAolKyvr9OnTPj4+Pj4+06ZNCw0N/fe//93d3U2SJIPBgElK8O4hLYq/oTcTZPWDRxjm7fj7+z/C3oLBPI0MppIcDufw4cMw79hkMkFKNoy4oY6k2WyGlMmmpqbq6ura2tr4+PiSkpKUlBQul8vhcFpaWrKysqytrVNSUigUSl9f3/bt25OSku7evfvZZ59lZWU5OjoGBwdTKJS4uLjQ0NDm5mYfH5+xY8c6ODi0tLTk5+e7ubk1NDRA0GPmzJlLly6dO3duY2MjzGXu7u4uKiqytbVdu3ZtQEDAmDFjxo8fHxwc3N3dvW/fPicnp7KyMltb2w8//NDd3f3u3bsdHR10Oj02Nnb8+PFnzpypqKiYMmVKZmZme3t7RETE9OnTZ8yY0d/fT6VST506ZW1tvXbt2uDg4ObtEaUAACAASURBVNbWVh6PV1paunLlSi8vr4aGBicnpy1btnh6es6fP//11193dnZes2bNp59+mpGR0dnZGRUV9cUXX3R0dEAZJBsbm6ioKJFI1NTU5Ovr+9FHH82dO3ft2rW5ubl0On3Lli1jxow5fvw4k8mEADeTyVSr1SjvhyRJkUgEczEhpZzNZkNFDx6P99133z3K7oLBPIX8qkqCCB45cgQEkcViweQ80qLItlqt5nA4er2+r6+vpqYGAgt6vZ7D4cBEFzabLZFI8vLywBjUaDRQZ6yrqys7O5vBYCQkJNy9e7empobNZkMCOZfL/eGHH/Lz82/dugXxXJjp3NjYePDgwfDw8KKiIijkw2KxlEplbW3t0aNH79y509TU1NHRkZOT09zc3N/fX11dnZeXx+Fw7t27d+vWrdra2v7+flTYLTs7G6I0MTExxcXFPT091dXVOTk53d3dcrmcw+FERkaePXsWymfAVMXm5ubi4uJLly41NDQEBQWdPn06NDT07Nmz33///ZEjR86fP+/s7HzlypXW1ta2tjZwUHZ1dUkkkrt37+bm5pIkCWXTTp48+eOPP96+fbutrU0oFDKZzN27d1+4cEEoFNJoNA6H09bWdv/+fVQFA/6FmTkw7mYymQRB0Gg0iUTi7u7+CHsLBvM0MliMW61WHz58WKFQqNVqHo+nUqmg7CvklsOEEIlEolAoOBxOX18fmDlQPQgqgKFJdTD5RKFQgNMNpjZCOQyojgNBCQhfsNnszs5OmHID0kmhULq7u6lUKp1OZ7PZIBkikQimM7JYLIPBQKFQQK+lUinkEkLeNYfDYbPZqBi4XC6HsmxcLrezs7OnpwdmkYvFYiaT2draCuUkaDQa1DOnUqmQlCMSiWBqDZwXj8eDuZig4zATEU6qvb0drgNY33K5nMlkwhxtmGsIMyx7enqEQiHk6oM0i8Xi3t5eCoUCU9rBKQmV4cG/AfPc2Ww2BMqkUilWSQzmr2awETdBECdPniQIwmw2y+VygiC6u7vVajVM8YbJzv39/RKJpL29HSYgg80IIsjn82UyGVTx0Wg0ECK/d+8eqE9PTw/UKIOxeXV1NY1Gq66ubmlpAdnlcDhQ64zP5zc3N3d0dHR2dsLER6lUCgXNOBwOhUIxmUx0Op3P5zOZTAaDgbI7CYJQqVQsFksqlYJ6ajQamPMH4s7lcqHuBkiPUCgEdebxeFA+EqppQAo3zMiEEkFQegNOUCgUgpms1WphNieTydRqtRCtAhGE+YUymUypVIK+SyQSNpsNOyQHyhpB9aPe3l5YB4LBYIBDA6ZpM5lMqHYBVTbgIu/cufMR9RQM5mllMJVkMBiBgYH9/f0ymYwgCLAQAT6fD3PpUJUaGo0GOkIMlF8EWw+mJ0P8BwSCw+H09/cTA2WHSJKEkSZkBUKGIJ/Pl0gkKI+aw+GYTCYajQbmJ6q7AVIF38BEbxqNBkvHQEkhqB4kk8mgzhvE5UGDwJMA8sdkMpVKpdlshkoZyD5ls9lQJQjqD/H5fJBjmHcE86mhRIVKpTIYDCqVSiaTdXd3C4VCpVKpUCh4PB4Uu4RoGJqdzWAwYN0brVYLF0er1UKxJT6fD55fHo8HpwNhHChZBLFvCoUCrT169Ogj6ysYzNPJYCqp1WrPnDkDa1dB8S4I10ARRjqdLpPJ+vv7DQYDPPAgWwaDAaye/v5+kBXI8gN9hDJlMOCFwjbgemtra4M65E1NTSRJmkwmGMYKBAKQIajJBvXNoPw4qsbG4/Gg/hCM6+HnUJ1IKpVCBVywf6F0ORRAg1LqBEFAqXOTyQTaDftvbm4GgxQUkByoGgcV5LRaLUxJAuEWCARwFnD6YCHCcUH3ISCj0+mQ/wHyq0A9oeYF5JNCpXSRSARHh7cIVK6E6I3ZbJZKpSC4MpkMz1DEYP5qfsOWjI6OhqErygeCHBQQI6VSCVuiapJQURxkAmQLFbAxGAxQRBLqocGyBxqNhiAICPWAZQpl1sBLSKPRQGRNA8tb8/l8uVwOdiWyKGFMKpVKwVEIcgbTosG+A1GGVCQqlQrVf5GgCwQCjUZjNptB9GEIDM5QiUQCUkun04VCIUEQRqORw+GIRKL6+noQL3DOikQiOE0whEHsoC6cXq+HtS7odDrMfBeJROA3EIlEUN4c2gNLSsD7AC4y1DAHrYQiQOTAMg8MBqOmpmbHjh0P3zgS1wTCYP48BoveQIy7r68Pxp4Q3QathNGrSCQCGwpNpwNLDZ58pEdQcdZsNoPGwWQSLpcLfjowmkAHIVkabE+xWAyVH1EdbzDWoEw6KvUIBpdSqYQRK1hwcApo/VgYg6OUT61W29PTI5PJYEIRpMpDuUnkHFAqlWjJB4hKwcmiFXehHhIUSBcKhRDQhwgMlFVHIg5+BoIgYDEcvV4P0Sooad7f39/Z2YnqnIMnF6rwwvsAGgyyqNPpcnNz4UXS0tLS0tLysF8SqyQG8+cymEpKJBLIBodRHogjsiXBcQbpQWhxG3AFwvAQQiXwkENIBEbrCoUChZ4FAkFvby8sdANhH1jKBpaIADWBmAZMHocYC6yiBQYghM4hmmQymbRaLRhlcFwwXcFkU6vVDQ0N0DZY7gbESCaTiUQiBoMBERuxWCwSicCVCYEdWMsBvofqv8i4gypnUE1do9FAGAckEiLaEGOBDCcoJAzxay6XC68TcFZADWD4IYzE4YUEcXlYkgzMbaj0DmN2BoNx4sSJB24cVkkM5s9lsJVmSZKMjY2dOXPmjRs3YmNjT506lZeXl5CQkJycnJGRcefOnaSkpJiYmGvXrt2+ffvWrVvZ2dlJSUmZmZm3b98OCwu7dOlSYmIifJmUlFRYWBgbG5uampqQkHDt2rXr169HRERcu3atoKAgISHh0qVL8H1UVFRERERKSkpKSkpmZmZycnJiYmJWVlZ+fn5lZWVycnJ6enpGRkZubu7NmzfLy8uzsrKKiopSUlISExMLCgqys7PT0tKuXr2alJR08+bNpKSkO3fuFBcXZ2ZmlpSU5ObmxsfH5+fnJycn5+XlQUHcsrKyn376KTEx8e7duwUFBYWFhbdv387JySktLa2srKyoqPjpp5/q6+uLiooKCgrKysrKy8sTExOLi4vT0tISExMjIyMzMzMzMjIKCgri4uLy8/Ph4hQVFZWXl5eVlaWmpsKitdCG6urqwsLC0tLSzMzM8vLyW7du/fTTT1BWLjMzMzc3Nycnp66uDsoS19fX37t37969e11dXS0tLdXV1eHh4ZBrCXPb79+//8CNwyqJwfy5DKaS4BcTCARQzRsmOKekpCQlJaWlpeXk5KSnpycnJ6ekpGRnZ6empoIqxcfHw2ZpaWmZmZkpKSkxMTFJSUmpqamxsbEJCQlxcXHXr1+PiYmJioq6fv367du3U1NTYcJfdHQ0COX169dh/t/Vq1ejo6NjYmKuX7+ekJAA/7169WpsbGxkZGRCQsKVK1eio6MjIyOvXLly7dq18PDwmJiY2NjYqKio5ORkUNX09HQ44vvvvx8SEnLjxo2rV6/Gx8eDCmdlZaWlpUVHR2dnZycmJsKJwKlBsxMSEqA+W0pKSkZGRmZmZlpaWlpaWnx8/OXLl6Ojo2/cuHH9+vWUlJTIyMikpKS4uLgbN27cuHEjOTkZtomNjY2Pj7906VJsbOyVK1fgLKKioqDZ0dHR58+fhzZHRERER0eHh4dHRUVFRUVFR0dHR0fDNpcvX46Li4uOjk5ISIiIiIiLi2MymeDYtQSrJAbz5/KrKgnZJ1qtFkbTMNAmLB5CtIoAjLXRnxDg6QOXH4zWIVxOEAQsCAGFZsH1BqYreDnBXYg+w55RxQ1YDRz2jOq5oaPAlihj5gHGjRuHXJPQQlhaCyqBw0LbsE+CICBUAqBSxCh1FLlTiYH1XVH7yYEMR/ivUql8YFfoSqJGwgY6nc5yMV5yYNY83BHSYlV02A/86oEbh1USg/lzGSzGjR5jVI0GnnAINyPZQqIDwkeSJCgOCnSgn1g+56AgoG6QHojUFuWEQwNAqUGUUdtge0v9BeGADwAK2sD3RqNx5syZ6HSgAXB0pCyWH+CIoEQPazEYceTPQ0Mg3ORA/ST0c6SAcFCTyQTy+sDFhKPAceFAaH1tSIZHqgp/Rft5+Mb96R0Fg3lqGWxFh6HHrFmzLJcbJAaWZsVgMJhfA6skVkkMBjMYWCWxSmIwmMHAKolVEoPBDAZWSaySGAxmMLBKYpXEYDCDgVUSqyQGgxmMIauSkGlIDGRfQurijBkzUDImQRDkQNY6BoPB/BpDViWJganoKGlcJpPNnDkTErNhA6ySGAzmNxmyKomm0MC/RqNRKBRaW1ujCYLEwNyex9lKDAbzxPMUqaRAIJg3bx7x82mIWCUxGMzgDGWVhNE0miItEokWLlxI/HymM1ZJDAYzOENZJS1rDhEEIRaLFy9e/EBtC+yXxGAwgzNkVZIYWJSCGBhxc7ncb7/9FqSTtOBxNxODwTzRDFmVBClE9R8JguDxeDY2NlBtzDKA8zhbicFgnnieLpVctWoVGok/7gZiMJj/DZ4ulVy/fj1pUfAcZZ5jMBjMr/F0qeQDtiTUMH/MDcVgME82T5dKLl68GC2Vg5Z/eNwtxWAwTzRPl0rOnTsXFpBBFiVWSQwGMzhPl0qCLUkMZEpaBrsxGAzmFxmyKomm3MAihWazmc/nr1ixAq1ZSBAEfMZgMJhBGLIqSZKkQqFAqeN6vV4ikUD0BoqnwYre2JbEYDCDM5RVEha/1uv1sGR2c3Pzt99+axm90ev1sKw2BoPB/BpDWSVBIkmSVKvVJEmWlZXZ29vDZ71e/0DRcgwGg/lFhrhK6nQ6sChJkuzs7Jw8eXJ/fz8MupGl+bhbisFgnmiGskqCDqampppMJqPR2NXVtXDhQuSpFIlE4J183C3FYDBPNENZJSE4c+DAgaqqKpPJVFZWtmLFCpIkJRJJZmZmZmamUqnEKonBYAZnKKskRLGvX78eFhZGkmRhYeG8efPMZrPRaLx06VJGRgauL4nBYH6TIauSkC9pNBrPnz+fl5en0+moVKqNjY3BYODz+Y6Ojt3d3XjEjcFgfpMhq5LEwBqzHR0djo6OTU1NaWlpy5Yto9PpxcXFixYtwtEbDAbzexjKKomyfGxtbc+dO1ddXf3NN990dHQcOnQoPDycIAjIE3qsbcRgME86Q1Yl0aI3RqPx6NGjGzduLCkpWbRoUUJCwjfffAP5QHK5HKskBoMZnCGrkiRJarVacE0WFxcvXrw4ODh4zZo1x48ft7e3R3EbHL3BYDCDM5RVEgbUJEkKBAJXV1cHB4cFCxbs2LEjISEBZ5VjMJjfyZBVSTASVSoV1E87duzYkiVLvvjii3nz5tXV1anVarS84uNuKQaDeaIZCiqJqlegWYnovwRBwHztmJiYGTNmDB8+fPv27eCshN9CwhBCq9USD0mn2YJHf3ZPFOhCoaIheOEgzJBnKKgkelZh2S94jGFFWRhQq9VqPp//zjvvWFlZubu7wwZKpRI2I0lSo9FAcSD4k0KheGD/uC4GwvJS4MuCeRoYIioJLkhIEQfVA6MSZtoQBNHd3T116tQ33njj4sWLarVarVabTCaDwQChcPi5Vqs1GAwGg0Gv15t/zuM+xScFZDniVYMwTw9DQSWNRqPBYBAKhTqdzmg0Iskzm83t7e2ZmZkODg42Njbh4eGpqanLli2bPXv23r17U1JSxGKxXq/n8XgwhARTFI3cLQ0lLJcAuDKQzU7gJAHMU8BQUEmwGVHMmk6nc7ncU6dO2dvbb9y4cdu2bXQ6ncViqVQqs9nMZDK7urpu3LgxZ86c1atX+/n5nTt3rr6+nsvlEgRhNBplMhn5KzzuE338IG8GgQNfmKeGoaCSJElKpdLm5ubc3Nzg4GAnJ6fVq1fv3bs3LS3t3r17QqEQXJDEQKEgnU4nkUgYDEZ8fHxmZua8efM+//zzAwcOlJaWZmdny2QyhUJhGgDZSlgUEKCVUAQeXxbMkGcoqCSbzb548eLKlSuXLl26b9++8vJykDkYgCsUCghzazQavV6PcoPMZjN8plKpKSkphw4dWrBgweTJk729vSsqKtRqtUaj0Wq1sBoEjuQCOp0OxcfkcjlcwMfdKAzmr+WRquQDsVFyoATkL6byEASB8nKQukkkEoIgNBoNk8nUaDS5ubm7du3aunWrs7Nzbm4ubIksx4ex9C0+PJpWq9VUKvXixYvr1q3z9vY+duxYSUkJrACh1Wo1Gg2M62FKD/oVSDASX3RS5MD0HrTl/5bUwlnAyYIvkiTJ0tLSbdu2ubu7b9q0ad68eenp6XC+EDeD9CD4yeNuPkEMXHmNRoPCehDiQ05VuGvkwFxVk8kE7mw4WVgWCTbW6/VarRZ6JtxxWHsOYoNo1WLoIeitDIFBiBOijqFSqSC6aBwAmqRWqwmLWlbEz3M20NqfaG07aAPsHFYoIQYeMYPBgJoBfV4qlaIrAI8VtAF1VNIiDQ76/AMZI3BzLTPnkOMFtRDaAFcJGgDmCPwQPmu1WrQqHwoAwoVCi6ygVqEfPuDkQQ8yUgxiwEWOHkNyIKiL5uD94W75qFUSnTxhIR/oosMHqVRKWsycsbydJElWV1dfvnzZ3t5+ypQpa9euTUtL6+joAGci2pVSqfzFBjwQgUGXEukaSZIymYxKpXZ1dZ05c2bp0qVLly49fPhwUVGRQCCA3gP712g00L8tj4s2QP0MPZPoZP9XIElSJBJRKJTx48cfPnyYJEmFQhEYGDhy5Mh169bt27dv8eLFcrlcrVZHRkZOnjx59+7d6P7C8/Z40ev16HZotVo2m93Q0LBv376FCxd+8sknU6ZMWbVq1YoVK+zs7GbNmjVhwoQFCxbY2dmtWLFi1apV06dPnzRp0uTJk2fNmrV06dJNmzY5OTnZ29tPnjz5m2++mTVr1ty5c+fOnTt16tRp06bNmDED/jtv3jxra+sZM2ZMnz595syZq1ev3rBhw7p165ycnDZs2LB58+ZNmzZt2LBh5cqV69at27Bhg729/dq1a11cXFatWuXg4GBvb79+/fpNmzbBlnv27PHy8nJxcXFycnJ2dnZzc3N3d9+wYYOHh4ebm5uPj4+7u/u2bds2b968Z88eX19fDw8P2L+rq+uuXbsOHz7s6Ojo6enp5+e3bdu2rVu3uru7e3h4eHp6wr979uwpLi4Gm8DFxcXT09PLy8vZ2Xnnzp0eHh5r1qzx8PBwcXHZvHmzp6fn1q1b161bt3z58jVr1mzYsGHjxo0bN250cXHZsmXL5s2bt2/f7uvr6+fnt3v3bn9/f09PTx8fn0OHDu3du9fHxweMGEdHR9hyx44dfn5+e/bs8fb29vLy8vHx2blz57Zt23x9fffv33/kyJGDBw/u2rVr+/btx44dO3z4cEBAwIkTJ06ePBkUFHTw4EF/f/9Dhw6dOHHixIkTx44dCw4OPn78+NGjR0+ePHn27NmwsLAffvghODg4KCgoKioqKiqKQqEolUoWi0X+F2USH4NKwoNk+SKCV7qljYbsSoPBAH1dIpEUFha6ubnZ2dllZ2fT6XS5XM5ms+FFih4G9MP/qD3kQ0YuqLZCoejq6kpKStq/f//atWs9PDxaW1st33hIBOHNqVQqwQpA+7R8H/zPqaTJZKqqqjp9+jQUByEIIiAgYObMmcuWLdu4ceP8+fNRRsGpU6e8vb1hG6PRqFKpHnfz/79NBK06ffr09u3bz58/X1JS0t7eXlRUBF7p3NzcW7dupaWl3b59u7i4uKSkpLy8PDs7u7CwsLi4GL6pra3t6Oior68vKioqLy9va2urrq5ubW2tqqqqq6urqKgoKSkpKysrKSm5c+dOYWHhrVu3cnJyCgeorKwsKSmprKwsLy/PysrKysoqKyu7f//+7du3CwsLS0pKbt68mZ6eHh8fn56enpGRkZWVlZqaWlxcnJ+fD3/Kzs7Ozs5OSEhITU0tLCy8fft2RUVFWVlZdXV1UVFRenp6Tk7OrVu3CgoKiouLS0tLb926lZqampmZmZ6efvv27bi4uPT09LS0tKysrJSUlOjo6JiYmKSkJCqVeuvWrXPnzmVkZNy8ebOkpCQ9Pb28vLy8vDw5OTk9PT0xMTExMTE7OzsnJyc5OTkuLi4pKSklJSUpKQlam5qaevXq1atXryYmJqakpKSkpCQmJl65cgUdMSkpKTY29sqVKxEREeHh4VFRUdHR0Tdu3IDNIiMjr1+/Hhsbe/HixUuXLkVGRkZHR1+7du3q1atXrlw5d+7c6dOnz507Fx4eHhERce7cuRMnTgQEBJw6derSpUsXL148f/78+fPnw8LCIiIi4CdXrly5fPlyWFjYpUuXjh8/7unp6e/vHxkZyePx0ADiD/BIVdJy2UJQSfgXDGawVoxGIxiPVCo1JiYmODjY39/f398/JCTk6tWrLS0tMNIBQURWOookgHH+H700kHWJzHtiYAgAwyWdTqdWqwUCQVVV1eXLl48dO3b69OmoqKi4uLiffvqJSqWidRlhVILyNC2Tioj/taQZGDfV19fHxsZKJJLu7u6WlpZTp04tWrRo3bp1QUFB69ati4yMrKioMJlMd+/e3bJlC2TjPyGOBTTIJQiio6Njy5YtZWVlPB5PIpFoNBq1Wi0SicRiMRpIEgRhNpuVSiX4W9H3arUavoEBOOwQpiEYDAaz2axWq/v7+4VCIWwGPhnwhms0GhgUw+gbXOEikQi+hKGG5Z/QrDB4+8LAGYaoJpNJqVQqFArI6hWLxQRBQJNkMhkMhqCvQqvQgBdeWmjgj4bn5MDYH7ol7Bb+tXQIoNkZ6FGFXg0eapPJBEeHAYRCoQCHPjHwNKFTQMnI4MSwfHjNZjNYGAqFAi4gbABbEgQBL2N0OnC5UPNgA7jp0FSlUqlWq8HzxuVyz58/HxUVBQsF/rG+9BhsSYIgLAe5KIOHz+eTJFleXr5x48Y5c+a4uLjk5+dzOBy4YSCO5EDQgLAw0EAxH3CaDNKAh/9qaT8ibxHcV8LCe6LX69GKjFKp9Pbt28eOHduyZYu7u3tJSQl8bxlPB6Bh/3M52ND4ysrKK1euNDc3Hz9+fNmyZaNHj3ZwcJgxY8a7777r6uo6Z86c9PR0k8lUXFzs6OhIWsxcfNzN//8eOpIk79+/f/78eQqFwmQyeTyeSCSCZ5sgCPBIwjMJemEymeRyuVgslkgklj0NHmyJRMJms2EYAapK/txDB0kUsJoIdGx4dJFxoNVqkUyg5HxywHFmOVKxfMtCa5GXnBzwUKnValCfBzo/GmOBXkO/hdNB3lK0KzgLCG+SJCmTyaDna7VaeGEYDAa5XC4QCORyOcxnA4lEh4OWo6fDsiVIneFkIaYK1wT5Qy3frKCAyPpBukwMqKHloUkL/ykxIM1wIjqdDgaper1+5syZaDz0B3jUMW50C9EbCV3ZmJiYoKAga2vrtWvXnj17Fi4fJH6jKwJ3CDoi3Gm4QKibgrT92uWwvHmERa44yvh5oJ8RA2sxIkMV1RCyDAKEhYW99dZbNjY2N27c6O7uhhYqlUr0bFhaqf8rwEPV0dEREhIiEAjAYHRycmKz2dnZ2S+++OLo0aMnTZokkUiMRmNtba2HhwfcSrBoHnfz//8AxWw25+TkxMbGwp3lcDhMJhNuDep7RqNRLBar1WqwWcDvDIMJtVpt6QsCIxTmbpEW09iR6HC5XDabLRaLxWIxCq2gw3E4HDabDUY3eJOEQiH8FnqUVCpFJh6KwMC9QIYYuN2RjsBx5XI5mLoAMZD3JhaLhUIhiB0EP8mBJaF0Oh049Hk8nlKpVCqV8LgpFArovWDfwdOhVqvhXiOFQloGZgqyi8H0UygUKPZFDhiM6OUBLTdblAKwDENZOtwsI2/wACKJRyps+Vf0IMOBdDodg8GYNGmSWq3+w46gR6qSIDGWrxoul+vs7Dxx4sTx48e7u7sfPXq0r68P9T908mCEI4V6eCRr+U627LsPYHlowmKanaWqoqJqSHlVKhW8QtHOUbwM3u0qlSo/P9/FxcXBwWHatGnffvvtnj177t+/39fXhx4wNKz7XwGuf3V19ZkzZ6D9fn5+rq6uq1evPnDgQEBAAJoVSpLk7du30QT5/8YB9CcCdxb6zL1790JCQsiBAYFCoZDJZGiOv6XcwBmpVCoQL7PZLBAIGAwGCARBEEajUS6Xt7e383g86CdCoZDP5/P5fI1GI5FI+vr66HS6TCbj8XjEz/M6dDodnU7v6OigUCgglBqNhs1mWwYPoVoVfJZIJFwuFwRXIBDA92CyiUQiGH6p1WoWi4WmQshksr6+PhiWofE72MsGg0EkErW2tioUCi6XS5Ik5LpBH4axGgx4LR8l4AFxROqGRvro0lkOmywfNHQFYDgPsmtpYj/wbBIWDjrkQyMH9B0ObWkbWY7Y0PWEk2Kz2TY2NhAT/mN96T9TSdSZ0PAWeX+QcKDkBmgx3AM4Z9T627dvnzt3LiAgwMHB4cSJE9nZ2fHx8TC4Rp0VPsBYAB0U3S241nK5HC635TZwadB+Hg4NIbeL5Y2BnSAfDWyAwuuWvQHdfuh8cDNgmiNJkm1tbTExMRcvXoTI5rVr1woKCgQCAbQKTockSbFYTA5kMFh2DsvuSA4EhVCP+WP3+I8Bl6K6uvr69eskSR4+fPjq1atisTgjI2P9+vWOjo41NTWtra1UKpUkSTA50X3/q98HD1wxy4gZ+fMELLiepaWl33//PWwvl8vBhiIIAlyB6FEE77PZbIbYPdwj9KxCZ4MbDSqDOiqXyzUajRwOh8fjcblcqVRKo9Fg/zCcJEmSz+dLpVLQOzgch8OBReFlMhlk5hIEoVQqwYoUCAT9/f0MBoMc0BSSJBsaGgQCAY/Hg52w2WwQROSaZLFYyIeA+jyHw1EqlRDop1AoWq1Wpm28XAAAIABJREFUqVRKpVLoXeBAUKlUCoWCz+fzeDz4hhjodeaBQgfQbKlUCi8AgiDYbDaHw0HuS9jYcvYaMoct03FIi+fR0lpER4HHxDJjCZ5ihUIhFostXasPPFaWooTGmgKBYMqUKWAd/7H+9h+rJOqd5M95eAPL1EK1Wi2VStva2gICAr799tsVK1Y4OTkdPnwYbjZKW7O8cOh76LWWg2t4LVi+asw/z7hEKXuoH8MHS48vGkSjS2x5ocEVDd9IJBLUMOQ5Rr/SaDRSqbS7uxv6K3p+hELhnTt31qxZ4+Dg4OXldezYsaKiIpIkpVKpZRexbKelPlr6GSzNokcGdL66urrjx4/n5+fHxcVJpVKwvNra2q5cuQIZHufOndPr9ZAGYNk3/qJWPeAYsexvMCa1/BKp5927dyMjI9Hgl/h5tT240RKJRKvVSqVSNptNpVLr6upaW1thJ8jca2tr0+l0fX19VVVVnZ2d3d3dPT09cKcqKytlMhmTyVQoFGBLKhSKzMxMo9HY39/f0NBAkiSdTicIAka11dXVTCaTJEmdTgd5KtABZDLZnTt3wHlKDqR2dHd3K5XK/v7+/v7+kpISs9lMo9FAPjgcDryoQNrodDqfz+/t7YUTb29vZzKZBoMB4irV1dUgrCC15IDFAFcAhBs0VCAQEAQB+0SRA5VKBd0eySu8OdBNB003Go1dXV2WvRe5pwwGg1AohFNDj49lb7c0Ns0D8z7QX6lUqkqlEggE8KxZ9jfYDDoAOAfQ0QUCwYwZM5RK5R9+ef9nKokczMh9g64RDASQ9xR9L5fLGxsbL168OH369C+//HLv3r0VFRWQMQNDaTAhwQNCkqRKpYLeg5zByGRDp61Wq2UymaX7GYLjWq0WXssEQUAcE75EGSGkhT0IYUr4UqlUwvUF2x55x6EBlu8ruPrIQEA2tVAohFtOp9OlUim0GVKRFQpFXl6ev7//0qVL//nPfx48eFAikUCvJQgCnNno1FBfIQdeD/BUQ1P/2D3+Y0BLIiIiPvnkk0OHDsEDgJonl8uR2RsdHb1y5UoPDw+UWv8IbEnLRlqa5CaLeiVoQFNYWJiSkiKRSEQiEWo2MkJRXyJJsqam5syZM2fOnImIiNi6dWtdXR1kmUAy0MGDB7u6uioqKubMmbNv3z43N7dr164plUoGg7Fv374bN27U19cHBATY2dmtXLny3Xff/fe//52Xl6dQKFxcXFpbW/v6+g4cOODi4mJraztu3LjKykoWi1VaWrpmzZrVq1cvXbrUxsZm2bJlo0aNCg0NBWmg0+kbN27s6urasWPHxo0bP/7445deeunatWs9PT29vb1wagsWLGhpaWGxWCwWKz09/f79+6mpqQEBAc7Ozr6+vocOHYJXeHZ2tpOTU0dHB/Tk3t5eo9EIngew/uAtyOfzUaiHTqfDhYInAh4l6NVw6QQCgVAoBN0nCAIsZRQCUigUsCvIE4DP8Hii0ScyepB0wrODvF50Oj0+Pv7gwYNXrlyBdEsnJ6f4+HiTyYTEHT1raESLnAwajYbFYs2ePXuQySa/yX+mkg87LMiHInHoQ3V19fHjx52cnGbOnOnm5lZcXIx8PVQqFRIp2tra2tvb8/LyamtrVSpVRERER0cHXEo0zwH2L5fLq6urKRSKWq3Ozs4mLUJj586dg3cLHL2lpeXu3bskSaanp8MHtB94QiDqx+Px0tLS4PWOmg36Dn2ivr4+JibGMqedxWJlZWX19vaiGwmWY01NDQhlWloai8Wqr6+HID76LY/HA7e9Wq3+4Ycfvv32W2dn57Nnz2ZkZKCdEz83kZAli/5kfuSJRCRJ9vT0pKam1tXVQUcUiUTITkdSzufzIQnRsj/8da2yNCdR+Bj99wFHCjQmMzMzMjKSSqXC/YKfQLgD+TQUCkVjY2NaWlpcXFxERMTevXtHjx69cOHCTz/99OWXXy4rKxMIBOvXr7948eLly5dfeeWV0aNHv/zyyyNGjDh58qRcLk9JSbl06VJjY+PixYvd3NySk5M3b948ceLEhoaG8PDw2bNnHz58uKys7B//+Me8efOWLFkyY8YMUGcWi5Wfn5+cnJyTk3Pp0qWYmJioqKjS0lKZTCaRSDo7Ozds2PDTTz85ODgEBQXt2rVrypQp+fn5+fn5s2fPXrhw4dixYz/44INZs2atXLlyxYoVEyZMsLW1PX36dGho6Pz58/fs2XPhwoXIyMjLly/funXL2tqaJEkul5udnX3q1Ckmk6lSqeDFD3EquLClpaVSqbSkpCQpKQnExWAwQKkEpGXgvge/anZ29q5du9atW+fq6trQ0FBXV8flcsEOAOsBjcrlcjmFQmltbW1qaiJJEo3N4TaxWCywXuFWgmMhMzPT2tp6y5Ytc+bMmTdv3v79+ydOnHjs2DEkO2DNgJ2EfKZms1kqlQqFQqFQSKFQ5s6dCw/UH+ty//GIG00GQkFqs9kMbmYGg3Hjxo2jR4+eP3/+woULUVFRt2/fbmxslEqlBoNBIpGYBxLQVCqVSqUqKipycnJKT09fuXLlqlWr1q1b5+joSKVSBQIBjUbbunWrj4/P1KlT9+/fHxoaGh0dHRgY6Ofnl5OTM3r06F27doWGhmZnZx84cGDkyJGrV6/OysoSCoWtra0wB6C3t9fOzs7e3v7q1atGo5HH44EJXFVVNW3atOXLl69bt+7VV18NCQkBN1BxcfHJkyePHz++ZMmSKVOm2NnZBQYGbt++/fr160qlsqurKzIyUqlU7ty589q1a1qtNj4+nsvlwrjD09Ozq6srLCzsk08+WbVq1QcffODs7FxcXAw9D+4ccp7C5+rq6vz8fD8/Py8vr5CQkN27dx85cqSqqkooFEJnJQgCYuvg7AP/9B+7x38MGJyiMewDk8DIgXc4yptDncE4MGHxr4C0iB7Am1Iqld64cSMsLOz69es9PT2QUQiWBTng109PTw8JCRGJRGC2yGQycE2i4R68bru7u21tbd3d3Tdv3rxixYpNmzZ5eHjs2rXr5s2bUqn06NGjH3/8saOjo6+v70cffbR48eKpU6cuXrz4xIkThYWFAQEBSUlJLBbLzc3N1tZ2586dPj4+u3btampq2rdv36RJk3x9fSMiIt57772xY8d++eWXtra2KpVKLBZHRETAjJGwsLDg4ODTp0/v2bNn69at5eXlmZmZs2fPDg4Obm5uXrhwYWho6J49e+bPny+VSul0ektLS1VVlbu7O5iiGzZscHBwSE9P7+zspNPpx48ft7a23rt3r5+f38GDB+3s7BISEr744ou2tjYej+fo6GhnZ5eWlgYPr1gsrqiogMkagYGB1tbWtbW11dXVd+/eNZlMPT090dHRd+/eZbPZNBoNkuFTUlLq6uq6urp8fHx8fX3Ly8s1Gk11dfXmzZuvXr1aX19/7dq1hISE7OxshULR3NxcUlJSUFAQGRnZ3t5+/vx5R0fHqqoqeMXW1dWx2ez29vaGhgYYh3V3d9+8edPa2vr27ds5OTmTJk3au3fvkiVLPv3006CgoHnz5mVnZ4OnVaFQgBahAA7cTY1Gw+FwhEKhTCbr7Oy0sbH5tfl4v4f/TCUtI7agHZ2dnZcuXQoKCvL29t6zZ09dXR1BEOAahy2RJ8g0MJuVJEmJRNLc3BwUFLRy5UorK6tXXnnljTfeGDNmDAxVLly40N3dPWXKlLFjx7733ntOTk4eHh6hoaHBwcGurq6FhYUffPBBQEAAhULp7u6+fv36+PHjjx492tDQkJ+f7+Tk9NZbb40aNWrUqFFeXl7Hjx93c3NraGig0WjwnOfm5lpZWX322Wfjxo178cUXf/zxR0jNBfPtzJkzcDM2bNiwffv2vLy8/v5+Dodz4cKFtWvXyuXynTt3RkVFcbnczz77rLi4WC6Xh4SETJ482dfX98cff5w4ceKRI0c++OCDy5cv19bWPmAOw82DcQE86pDVBd0UBmtbt251dXVdu3ZtaGgoDHKh2cZHXnEDSSGEIFDSDDEgoJZWABjOyKP019mSlntGSSeQASMWi/ft27d06dLTp0/n5uZCNg/02JSUlJCQEEiIAacem82WyWQymcxsNoOBCfVJKysr9+/ff/LkydTU1Llz5+7cuXPp0qUeHh5FRUWbNm1asGDBnTt3bt++7enpuWPHjh07dnh4eOTn5zOZzODgYBgJ2drajh49+vXXXx8+fPiXX35ZUlJy5coVeH2mpaV9//33GzZsmDVr1u7du2tqaigUSkpKSl5e3pkzZ+Li4mbPnu3p6Xnnzp3k5OSKigpvb+93333X29vb399/woQJ77777uLFi/fv35+RkcFms/v6+i5cuHDkyBEmk3nr1i17e/u7d+8ajUa1Wt3a2pqcnLxw4cLvv/8+Ozs7NDR03bp1YWFh06ZNUyqVUVFRYWFh2dnZ1tbWlZWVHA4nPDz8u+++g3e2n5/fyJEjKRRKSEjIihUrGAyGg4PDmTNn3NzcQkJCmpqa5syZM2PGjMTExAMHDly+fNna2prL5Wo0GkhIJEmyrq5u586dNjY2ly5d8vLyCgwM5HK5U6ZMmTBhAvRwT0/POXPmVFZWQgLZ9u3bv/vuu9LS0s2bN/v7+9fX1+/cudPR0XH8+PHx8fFFRUUTJky4fPnyqVOnbGxsEhISdu3aVVZWhioMyOVyyP9DQ3gYZfL5fBCcjo4OOzs7uPV/rNf9ZyoJFrJQKLx3715wcDBMaw0MDCwpKYFGI48k6Do6E2guOHElEklpaalWqxUKhXv37vX09FyzZo2fn5+3t/emTZsyMzPZbLbZbHZ2dj5z5szIkSMPHDiwb9++gICAoKAgf3//sLCwUaNGffXVV1evXh0zZsy4ceNeffXVzz//fOr/Y++7w6K88v3zPPe3d+9uNnuzm5vkuibZ3OzGGKNrbInYxQ4iCqIiShUrAiLFDtJHegcBC3ZE7IhioSigqCC9M4XpjRlgBmaG9/398XnmPK+Ysnf3ukad7x8877y85bznfM/nfPuZOlWpVAoEgqCgoKVLl86aNes3v/nNyJEj//CHP0ybNu3WrVuIX7t58+aIESOmT5/+6aefjhgx4ujRo3V1dT09PVVVVfv27Zs3b15YWNiUKVNaW1svXLhgbm4+d+7ckpKShISEmTNnXrlyZebMmQEBAXfv3l2wYEFZWdnTp0/Hjh37+eefh4SEfPbZZ7/5zW8+/PDD999//8MPP1yxYgWicInYRbCS2M7g1JJKpSRUQK1WV1RUpKSkBAcHT5w40c/Pr7W1tampif6Xe2+Y8VjgPzK4BB+ZEVHMcJCXFy9JGkAkVjQAiqFer79161ZgYKC5ubmFhYWjo2NGRkZLS0tWVlZ0dHRLSwvu5fF40C2ICw5eRKVSmZycPH78+EWLFv3+97//9a9//cUXX3zwwQfvvvuuo6Ojq6vryJEjLS0tFyxYMG7cOG9vb3d397/85S+lpaXNzc1hYWFJSUlHjhyZOHHi2LFj33nnnREjRowZM8bX1/dvf/vb3Llzr127FhUVZWtru2nTpjFjxkyfPp3FYlVUVKhUqrq6ur/97W/nzp0DXlRVVaFGalVVlZWV1ebNm7ds2WJmZvbee+99//33Gzdu9PLyKisri4yM/Oijj1auXDl58mRbW9tf/epXtra227dvj4+Pr6qqcnd3nzx58tKlS52dnR0cHBYuXJiZmWljY6NQKKCM29nZzZo1C5aE+fPn3759u7293c/Pb/78+StXruTz+WFhYS4uLqdOncrKynr69GlJSYmrq+utW7fmzJlz7tw5lUqVlpaWlJQ0bdq027dv19fXw3wxNDR07949KysriUTC5/NDQkLmzZt35cqVCRMmHDly5PLlyzNmzEhNTV2xYkV3d/e5c+fmzJnj5OT0t7/97ebNmwqFwtLS8vPPPz98+LBIJHJycrp9+7ZQKFyzZs2KFSsgNllYWKxataq4uFgsFhNvPkaToiidTgfHlE6nEwqF4JZnz54tWbIETpR/jOv+1xp3ZWWlr6/vuHHjNm3aVFRUhFhcMnMgZRDbEIGDYcGPAoFAqVRu2bLFxcWFz+fv2bMnKSmptrY2IiJi9OjRpaWl/f39q1atunXr1tSpU2EJmjZt2rRp06ysrA4cOPDhhx/+x3/8xyeffJKTk+Pi4hIQENDd3f3s2TOapltbWydOnDhy5MhPPvlk+fLl3t7e27Zt++qrr86cObN+/Xo7OzsrK6tvvvlm5syZ33777RdffPGHP/xh1KhRVVVV6enp3t7e586du3HjRlhY2OPHj8vLy2tqao4fP97V1XXy5MmpU6euX7/+k08+mT179uLFizdv3vzo0aOenh5ra2s7O7v6+vp169aNGzdu1KhRkBQaGhqIbMW0nalUKnQmsY61tLTgmOiJg4ODra2tx44dY7FYlpaWS5cuPXz4cEhICBwLoaGhQUFB4eHhhw4dSkpKio+PP3LkCKxp0dHRMTExiYmJaWlpGRkZaWlpycnJcXFxhw4dCgsLCw4Ojo2NjY+PRwrtoUOHkBKbnZ0dHx8fFxcXFxcXExOTlJSUnZ2dlJTEYrGA1xEREenp6YmJienp6UjIBeFnUlJSTExMWFhYUFDQwYMHY2JiMjIy8K+MjAxk16alpUVGRmZnZyOlNz4+nsViRUREREVFpaamJicnJycn44HHjh07derUsWPHMjIyzpw5c/78+bNnzx4/fhwpuqmpqefOncvOzj527FhiYmJycvLJkycTExOjo6NzcnJOnToVEBDg6uoaEBDg4uJiYWExYsSIDz74YMKECZmZmQgmx1Ld3d0tFosJo4KHS0pKUMnC29t71qxZkIamTJlibW197dq1srIyOzu78+fPe3l5QePx8/P7+uuvi4uLHz9+nJiYGBgYeP78+bi4OBsbm1//+tfTpk07fPjw0aNHr1y5snTp0pKSEuRx5uXljRgxYuXKle3t7Xw+v66uztPTMy4urqura9myZXl5edu2bYuKioI+u2TJktTUVIlEYmFhMWrUqMWLFyclJfF4vNTUVE9PT2tra09Pz5iYGHd39z/84Q9eXl6RkZFXr14tLS1NTk62traOiYmJjo728fGxsrKKjIxcsmQJn893d3fPzs4+cuSIm5ubj49PR0fH4sWLr1y5olAoWltb/fz8VqxYIRAIEhIStm7deuLEiZCQkNra2qtXr5qbm5eVlQEl2Wx2UFDQtWvXvvrqK5jX1Wo1+NbLy8vZ2VmhUHR3d589e3bGjBl1dXVz5sxBmvmECRPOnz+/ZcsWHo93/fr1MWPG+Pn5bd68ubu7m6Ko5ORkJycn+N+dnZ3v3r0Lv9mFCxd8fHwsLS0vXLiQnp6elZUFbz6GTyQSYeKQuCKAFcTbyspKW1tbxMn8K1ByaGjo4cOHXl5eM2bMOHbsWG1tLez6CLIndrQhRgonQU/wInEfV1RUODg4xMfHnz171tPTk8ViFRcX5+Xlbd26taKi4vbt20lJSTRN29vbh4aGSiQSrIRFRUU9PT15eXmrV6++fv16bm7uiBEjRo4cOXny5Ozs7JSUlMmTJ48cOTIqKsrGxsbR0dHFxcXd3f2vf/1reXn5jh07fHx8pkyZMnPmzI0bN06ePHn58uXm5uYODg5oHkzv5ubmY8aMmTVr1scff1xYWIjoh9u3b+/bt08ul9va2qamplIUdevWrZSUlObmZjs7u88//9zV1fXjjz82MzOzs7ObOnWqp6cnM4UABHMY6S7amHpEGXN1iEo7MDBw69atqqqqJ0+eeHl5ffPNN05OTkuXLnV1dd20aZO7u/uGDRu2bt26efPmTZs2bdy40cfHx9/f38PDY8OGDdBo8C/8dXd3d3Nzc3Z2dnR0dHd337x5s7e39/bt293c3Nzc3Dw8PDw8PFxdXTds2LBhwwYUevHw8HB3d4dhbvXq1evWrdu6daubm5uTk5OTk5OjkfDT1dUVxWOcnZ1dXFxQvWbNmjWrV69evXq1vb09SuMsW7YMluJly5ZZWlouWrRo4cKFS5YssbGxWb58Oc5bWFhYWVlZW1svXrx40aJFqNCzYsUK3GtlZQVhasmSJebm5suWLUOJHRzb2dktWLBgzpw5s2bNsre3X7hw4cSJE//4xz++884777///rZt2/h8PtzcAoGgvb1dLBZDU4MDRyAQFBQUJCYmxsXFxcbGXr9+vbS0lM/nr1u3jgQ5BQQEZGdnW1pa/ulPf1qyZImZmdlHH31UWFjY1dWVmZn52WefOTs7t7e3jxs3ztHRccGCBSwWi8/nFxUVOTo6ZmVl2dra/vu//zvW6YqKCoQuBQYGQnRqa2ubN2/ew4cPExMTYaCXSqUrVqwIDAzMyMiYMWPGxo0b09LS7O3tT548qdPpeDxeTk7O3r17YdRbsGDBs2fPeDwen8/v6OhoaGhwcHDw9/eHrrp///60tLSZM2cKhUIWi9Xd3W0wGJqamjw9PSMjIx0dHWEj2rx5s5mZ2cKFC+VyeWZmppWVVUFBQURERH19/YEDB9asWdPe3j59+vQrV650dXV5e3u3tbU5OjpOnjy5qqpKLpfLZLKlS5eGhIS4uLgUFRV1dnZGRUW5u7u3tLQsWLCguLj49OnTVlZWJ06csLGxqampyc/P37Vrl0AgSElJEYlEpaWlmzZtcnZ2joyMfPLkyerVq+/du+fv779w4cIpU6Z8+umnv/3tb//yl7989dVXCxYsQNkRNpstEAiGZejRRhMQzNBNTU1z5sz5l0aVKxQKlUrFZrN9fHxsbGy2bNmyf//+o0eP8vl8oVAI5ZHIRLge8x+tJCdjY2PNzc0nTpz4X//1X//2b//2/vvvf/nll7/73e/Gjx/v6+vb1dWVm5ubkZExe/bsjz766ODBg+vWrYPDurCw0MXF5Z133jEzM0tOTnZxcQkNDTUzM7tx44ZKpXr69KmXl5eVldXKlSt///vfv/POOyNHjhw7dmxgYCCPx7t79+7UqVNDQ0Obm5snTpw4c+bMiRMnXr58GdXSTp06ZWZmJhQKb9y4ERISMn/+fFisKIo6d+6chYWFRqMxNzePiIigaTo5OXnJkiVisfjUqVPr168/ceLEokWL7O3t09PTN2/e7OfnRzMCpEgMBKRLEmHLdOzQNN3b29vZ2Xnu3Lno6OjFixd//vnn06ZNS0xM5PF4kMqHOXDp55MiKGPeJGUsRDj0QiEPEkJIPR/nT1ZgEqxKURTyQJCPQRtdT+RRBmPpwGFZZcTAQr9QYXNY+DfzX9TznhnieiaNJxcMewjGiMPhqFQqnU6nUqnu3r3r6+s7efJkMzOzxMTES5cuRUREJCQkwNuG4hSIB2QuYGw2u6Ojo7OzMycnJy0tDWGtfn5+kyZNQji9Wq22t7ePjY3dvn37t99+O2rUqBEjRowePbqqqoqm6YKCAicnJ5StCg0NFQgEHR0d06dPt7e337x5s6WlJfYXycrKGjt27KefflpUVFRVVSUUCktLS3k8nkwm27lz54wZM5qamu7fv3/p0qXm5mY+nz9z5swFCxZMnTo1MjLSwcGhoaEhIyPDwcEhOzu7tLQ0JCQkMTHx4sWLW7du/fbbb2tqauRyeWdn58aNGz/99NORI0c6ODhs374d0awzZ860srIqKysLDAx89uwZxjQyMtLDw+Py5cseHh7ffffdpUuXOjo6/Pz8Lly4EBgYGB4eLhAItm3bNmHCBB8fn5aWFi6Xa21tXVhY2NzcHB8fT9P0/fv3nZ2dp0+fPnv27ClTptjZ2T19+vTChQvW1tbr1q3bsmVLZWWlTCbz9PRsbW3Ny8uztLS8e/fut99+e/jwYalUevDgQWdn55iYmJKSEgcHh0ePHkkkkgMHDrBYrG3btl29evXRo0dcLrempiYyMnL58uXXr1+/detWTExMS0sLAlQVCgVJ6qOMqTiIT5LJZBRF1dbWmpmZkeKKLx0liR0KyI2I2ezs7LVr1y5evHjLli3p6en19fW0sYYuCRfHjb29vSRqFDOhs7NzwYIFWVlZO3bsWLp06a1bt548eYI5lpeXl52d7eDg8Oc//9ne3j45Ofn06dNSqTQnJ+fTTz+dOnUqYoZWrlw5c+bMPXv2dHR0IO9706ZN4eHhtbW1lpaW69evNzc3b2xsRKBAbGzs3Llzly5d6uTkBNnw8ePHpDLblStXzM3Nm5qaZDJZcnLy/v37B401Ci9evDhu3Ljy8nJslSOTyQoLC21tbZVKpVAotLa2Tk5ORhCGpaXle++95+Hh0dXVxYx7JxNSKpVSFAXtj8PhYPHo7u6uqalJSEhYuHDhzJkz/f39L1682NHRwcwYI4EaZCAAH0z7BkFGg+G5Cqk0I52cNoaFGoyFcGhGOBfFsP3pjJVfCUIRPgM+vvgKEHkF0XApY70WAyPxWW8kROHhliFjHh65jOT/kpgwQDaJI6EoSqFQ1NfXs1gsBweHVatWbd++/fLlywg3oWn6xo0b+/fvR5/39/e3t7cjogWmcxAA99mzZzdv3rx+/TpN021tbefOncvJyXn69OnAwIBUKk1JSXny5ElZWdnhw4fj4+PDw8P37NlTWloqlUqrq6svX768fv360NDQhw8f4i0RERHHjh3bv3+/l5cXwh56e3tramouXLiwatWq0NBQxDwiyTouLg6OeAR1Y74cP34chovi4uLExMSuri6pVFpeXl5XV1dSUnLp0qX8/PwHDx5kZGTcvXtXJBKBkbKysvz9/fPz8zkcTmlp6ePHj8+dOxcVFXX+/PmGhoZr1661tLSQKMXq6mqaph89elRSUoIuffjwYUNDQ01NTWNjo1QqbW9vT0lJqaurY7PZfX19Z86cqaurQ9wonGaw5+bm5sbGxiKehMvlFhQUXLlyBWtYY2Mj+Pn69etHjx5VqVRXr14tKyuTSqVcLvfu3btIGaqsrGSz2RKJRKlUlpSUiMXiI0cA53psAAAgAElEQVSOrFmzZsOGDbAFf/3113PmzFm0aNHnn3+enJw8NDSElHPCgSQWXSwWy2QyDoej0+nu3buHSKB/kcZNMwLliGRE0zSXy338+HFWVtacOXNWrlwZHx9/+fJlkrRH6j4QcETdxiNHjlhYWCQmJkql0qGhofDw8D/+8Y+2trYlJSVcLjcnJyc6OjowMPC3v/1tfHx8RkZGQEDA6tWr6+vrMzMzFyxYAAelTqdLT093cXHp6uoSCoVr165duHChm5vb6tWrIyIiRCJRQkJCUFBQZWWlt7e3m5vb48ePb9++vX79ejc3Nwzt5cuXYaVKTk4eMWKEjY2NjY3Nl19+OWvWLB6Ph4Dz/Pz8OXPmfP/995MmTfr6669nzpw5ffr0CRMmdHd3Dw4OWlpa7ty58/e///2f/vSnCRMmQEHGzFepVEqlEkVWSHLI4OAgIF4ikYD7586dO3r0aMR/oBQbQogQ5KV7vtqKgZHSzhwXJmy9aKhm4hqJ3aFfCMYkMV60MXeFPFNvLFo1TJYkb2Q6pv4eohiy5LCDYVIz8ytwhnDU06dPExISnJ2dd+zYER0d/fTpUxJvTHovOzv7zJkzqPEDgR152SSXAZDBZrOfPXsGVVcoFMK/39nZKZfLtVpta2sromsVCoVIJFKr1RKJpKamprW19enTpz09PdiBrrq6uqOjo6urS6VSQbvv7u7GakqCDRHHV1tbK5PJRCIRcF+pVJL8Qo1G09raqtfruVwuPpkUqiCTqKqqCgk5MplMoVB0dXU9fPgQqeJarZbD4chkMi6X29HR0dbWJhaLKYqSSCRgdQQG4F2wPEilUqxYAoEA0hlN0zweDyk3EHcQ7SCVSpVKJYfDwcPhMiUZw0g8RyNFIhGSzUUiUXV1dWVlJUQ8xKJLpVIej4eLScZaX19fbW0tDI48Hk8oFN65c6ehoeH+/fsdHR1isfju3btdXV3Nzc0Adz6fr1QqCSuSLkLEoVgsHhoaun///ty5c5GN+r+CO0L/O5QkWX1katGM/BOU3GhtbY2Li5sxY8bSpUv37t374MEDxO4jsA6VQmiahhvuzp07+Kr+/n5U71i7du3x48fr6+s3btzo4eGBmszOzs4WFhawxPH5fA6Hw2KxyFSRSCQnTpxA7bKOjg5vb++AgICgoCB0PY/HQ7TBsmXLKisr8TqZTJaSkrJo0SI7Ozt/f3+EhZeWlgYFBSED4fTp0ydOnCClEAYGBpRKZWtrK4/Ha21tlUgkFRUVhw4dwtp75swZHo8XGxtbVlbW0tJy+vTptLQ0mH7IJEduFni0qalJqVSmp6dDgra1tT158iQTIwiRFAX6+aIAP4gvzNuH/RxGL/6XekE8JIPOvODHnvbiowyMjdUoRhwYfr7I0zggJ/WMWgbD2kz4jaZpiUSSlJTk6elZWFhIGcVVEm5Bbrx69WpKSgqyrRHERlKtcI1cLkcUt0KhaGtrA5xh0IGqEO4QQtTd3Q1/LgCFNuaZSCQS4BGwVSgUtra2AgUQ8sXn8w0GA0pYarVaVFpCA0g4i0wmQ3gsovQHBweR7i2Xy/l8PjgHGQrQf7E/KElnJKnoer1eKBRCORMIBKiy0dDQoDcW8qGNRhWBQICgGUSAs9lsAtw4QzhwYGBALBbDS4MCH4gbQekNTH+ZTGYwGBobG/XGHUFqa2sVCgVUh5qaGlJ3jsvlEvWCNqYnYJ1A0TMEMj958kQkEsHohJGCrwajzOVyuVyu3rhH9Is8Q9N0e3v7lClT/nVR5SQZaMiYWUwbI0IQi08+eHBwUC6Xl5aWpqamxsTEwDF66tSpgoKChw8fQrzCYo6Yc4qikJtoMJbVxEqOGEN48UlHQISkjKUAFQoFlDtEFGOmoUnQ1CDHIVCRhP6Rna0gMZFUKiIxUcbqW0xXNTEOkkRGlPzEw0mOMNpD2iASiR4/fpyXl+fn5xcTEwOPM/QmGMsoigK74Dk6RnFWwqbMaGrmwY8N1jCwI8RUrimGNedFpCP/Yv6kfmh3cvp5VKVeQDfmNeRG8mRiamRyOfWT4EuMqqTnye3EEEzWmPz8/NTUVHSg3lhGl8QSQQ0H84hEor6+Ph6P193dDQMRhCyDwYBaFfD/IDgUKsLg4CDYGHWAhEJhT08PWAKBzTA9AUnB7RhogBqJCYH/EyEQCKGFjsXhcChjEB70cT6fPzg42NTU1N7ejmuQxqNUKsViMQr44xVPnz4VCAQNDQ0QZknlCCRrg71xDIWUHPf09CBs22CsFgzYGjTWVcMzYQ7C23XGQif4XkhznZ2dnZ2dgLne3l6BQCCRSJDpiEgsdBQSAbD1Ajqcpmm1Wo26vFi9ANkSiQRZlTSjxgeTN5j2dzhRampqpk+f/q9Dyb+fhgkL4Im0tLSQkJBNmzb96U9/2rhxIyoL4AJ8dmdnJ/Kah4zRMxSjgBJTxwcZXnKRrmHYQVZ+8BlpeX9/PylPQEJEwcfnz5+3s7P74osvli9fnpaWBl6hXxASTfR/TrSxmEh/f39ubm5QUJBEIkF4it5YH5esebAOYbmlaRpwgyh0KOPEEEwb6zkxLcJQVBHfJhaLIS3SL9QEMxgMIpGIrLIEGYcxA/HIYc5LJBIIChRFyeVyoVCIcus9PT1yuZzUlAFIIcONrB9sNhsmyPb2dmYdI1QA0j1fupEszNBh8TpAJHEwDhlrC5C6cOSxRFrq6+vD8oDySKjNjjOwXdDGshfocIOxMJrBYIA+TkQWylg0BzKETCYDYhAD97C6NuRgcHAQcdAtLS3Nzc0LFy4knth/gF5ifcmhF/ybCBXi8XjFxcWenp6jR4+eP3/+gQMH4PAhMo5Go0FEKNPVQB5FauKSW15G4+kXdEwYB4VCIYaQVFWhaVqlUpGyLgMDA42Njampqfv3758/f/7GjRtPnDhRW1sLKyop1UU652U03kQgouscP348MjKSoijUSYFWC3kNixbOQGvu7+/v6uqC+V+hUGD3QaY2B7MdHgX5USqV4kaKoqDNQDiFBISiD5B0SHo+9fwabDAWTETEMVPeHzTW8QSgQMQj84I5ccCKOmOVcti1BQIBZSxdTlLvMcsoIyLjjSS1AfteIFEYQiV6A6WGYFIUCASQ2kilKDIl+/r6hEIhWg77BkyEWDwggEOQHDaRaUY5YdIY2OiJeASJkmmeRssHBgbIZhJQUoVCIewkjY2NZmZmOP7HGOlloSRBGeoFiQyie0tLS2lp6dWrV7ds2WJra+vo6BgaGtrQ0FBbW4tYUGJAYS7apDQOzYhleRntJ8OANRa9T76FNAx7A1AUBY0mJycnPj7e2dnZ1dU1ISGhvb2dNpbDYsbeM/vkH7Yom+hniXTy0aNHkYtN07RSqUS9KDLZRCIRm82G7QzXYMS1Wi1Sv0nkFkS/np4eVAwzMGqMkwADIgfh1UwDK2Us76Yz1nDTGvezGzKWYiGCJC4gSU2UMbChr68PEVrkYi1jd1yoqDARAkZJWOiQMSMWLURdLjQS4irkDxSwAAhC3oTurNFoYPGUyWRCoZBU6mLaecl8QTei5SqVSqVSoWixRqOBaAktmxiUBox7YKjVatgldcYNc/BYtA0lhwG7OmMZQ8RRYNHChwMlcYFEIpHL5XPmzMGZf4yRXiJKEqAkWMkMA0JtZ/BifX19aWmpv7//lClTPvvss927d6OmHmFl8ATW4aGhIWAWE3ReRvupF0oowztPvgUHYrE4Nzd3wYIFU6ZMmTt3bmZm5rVr16CSDxn3RaEZQgH1fNjgTxgWTfTPENGRdTrdzZs3Q0NDhUIhIm/wL/iUtVptd3c3YlxoYxbmgHFHeLFYTMRJlPyC5IWkb2KwhkpINmOgjUFvw/LQdMZS3gReicLINDpTRhMtop0QBEqM1MQgS750wLi7CXPSEaaFjZtZbB9E5LVBxhb2zAsoY/gtU84lBlnauPn4gHEbMiwhQFt0CLEeEj84upHYOoh7g7ya2Q/kYyFR4hqJREKWLgMjfdZg3BmN9DYMI1KpFHZJVGj8x3jp5aIk6W50Is2oUUxGmmZUiOPxeFVVVQiSmjBhQkhICGpNkspxekYQNZSal4eSeB0Ge1giDZ/Pf/jw4b1795KTk5cuXerg4FBYWNjT00PMrMxhJsNGGX1KxFBggsiXR6Tn4aSeMmVKfX09apfo9XqJRAKRRCaTdXV1dXR0ED0Xjh3cCwsgqVoCrVyv10ulUnhswBtAQyAjMIvD4TAHF+ISAjkg0FEUhZI2hLGJcEQC+2ljmUUYBMD82JDHYIz0BELBuEkxVncgGplZpGE4j10VB4175sA+iObpjYXHAaxE1MXriM8TN8K+SSYLMSBqGXs+k1EwMLZOpIx77WFG4EbiXEUIHZkyxCGB72Jq1vTzwQwUQyyDZZmmaWxRy4zV/d/Sy0LJH3TJkzBgrKJYQ8AHzHhAjMTVq1d37949a9as6dOnh4SEPHr0iHAeqf5LvzRZ7AdtBQhDO3Xq1ObNm1etWrV+/fqDBw8WFBSQSQUbjd6Yo0lYFvxHP18jlnjiTPSSiEyh3t7effv2RUVF3bhxo6Ghobq6ura2trq6GmF3t27dunPnDgqPi8ViBPHBg9zc3MzhcEiIcmdnZ3t7O6yNUDzhsYE4JhKJ4Onu6+tDvgDCIQUCAWxkMOfBDw4/DIfDQZADTKIikQhFFaGW4i/CboBHEokEgTuIfETCG6RFosxinxw4i/E6GNCHhoZQxhzGQURTEm848IuiKMiD8C8TXVtv3O0OEYiAKlRixgKAuyCfDgwMyGQy5A7C/YV0D3QOgquAfXgmTJn4l0KhIFCAaE20QS6XIxiTeP8HBwdh7xIIBGgAkTpJJjSbzb5z505kZCQ8H68HStJGKwYTegaN28sRMROLGDqRoqjGxkYUU5k9e3ZERATqJxOohR70f05DjP2CaZpWq9WPHz9OSEiYOHGinZ3d7du32Ww2h8MhFqshRloeoWH+TaJxkzMv20f/NhNZt8AqarU6KSlpzZo1s2bNmjt37vTp06dNmzZ79uzRo0ePHz9+0qRJZmZmZmZm06ZNmzFjxowZM8aMGTNu3Lhvv/3222+/nTVr1rRp06ZOnTpx4sRRo0ZNmjTp+++/Hzt27OjRo//7v/979OjRY8eOHTVq1BdffDFu3LhJkyaZm5tPmzbtm2++GTt27Pjx47/77rvZs2cvWrTIyspq+fLlK1euXLFiBZIXcMbBwcHGxsbCwmLx4sVLlixZunQp8tbnzp1rbW29cuVKa2tr1MXBX9CyZcuWL19uZWXl6uqKVHqUOre2tra3t8fFFhYWy5YtW7RoERLtly9fbmtrO2/evMWLFy9cuHDhwoXz5s2ztbVFjjxy6pFfb25ujjIu8+bNW7hw4apVqywtLW1sbObPn798+XLk3a9YscLBwcHBwQFfgVahGDB2bbG1tUX1gG3btqFEgK2tLfph7dq1q1evxjWrVq1ycnJat27d2rVr165du2nTpp07d/r4+GzduhUHmzdvdnJy8vLyCggI8PDw2L59O8qwOzs7u7u7u7u7+/j4oJTB3r17/fz88NPJyQnlNSsrK4mF9x/jpX/FHorM2DpiQIUYhfODxv0h9c+nHjNvV6vVXV1dJSUlERER4eHhMTExJ0+ePH36dHFxMYfDIdsrQ5dhpqYYjOlx5O+wNpC+w70Gg0EqlVZWVl66dOnkyZMZGRmol5OamlpaWgpfDS4jBlPihYcrkzxKx8jwY7YHn8bsFhP9nxPxSg8ay5viPBkjiB7kX9D4EIRAdElsvgrbDgQlKLyUkXmwSA8x8pGgJCHJB3/VDIKaT47xF7KbSqWC7wU3Qv5CM1D3G9VS4CkG9fb2YncQuHQgOUqlUujUCPBE+LpEIhEKhUiDSUhIQH1CnU7H4/EgKUPmRVoRrkfsDnLeISkLhUKRSIR4clxDTpKfuADHEHtRjQLZk52dnW1tbR0dHdh/AraO9vZ2COxSqRRPEAgEXV1dbW1tyCzC3j4QThFOgDyopqamtra2rq6urq6uzs5ONpvN5/N5PB6bze7s7GxtbUWM+j/stCH0r96P+58kmqZJuSStVpuSkmJra2tmZjZ//vyrV6/SNI2sL5pR/ZDQAKOOLGVUhJnSLvK9Dh06ZGZm5ujoeOLECcKXEIGJp9tEJnpNSa/Xnzx5srKyErODbHFqop+g1wwliRuH6Ko0Tbe1td25c2fNmjXjxo1buHBhXFzcyZMnB40VyCnjVkG0MbqCZviLsEQXFBR4e3tbW1s7ODjExMQ8fvwYgbUwbDFj3ExkoteaaJo+d+4cyggwRQQT/QS9Zig5bGihAdE0jVBbqVSanZ29ffv2hQsXWlpapqend3Z2crlcoCSbzZbL5e3t7TqdDnvDovrsnDlz1q5dy2Kxnj59CrULC+ywwAIEqb3qDjCRif4pomn66NGjjY2NRLUyuRB/ll4zlITpZ9C4HzmGGa5zEsBoMBjKy8tjY2N37dq1Zs0aBweH2NjY1tZWSJENDQ2FhYVBQUGzZs1atGhRbGwsj8cjMXE0YyMXpg96WISaiUz0+tLhw4ebmppIAI0JJX+WXjOUpF8I9h4WmYV/weDN5XJra2uvX79ua2vr5OTk5+fn6el58OBBFouVmJj48OFDwCvzacjep54P+Saq/T9vBjaRiV4t0TR95MiRtrY2ptX+VTfql06vGUqSDaqYOQwGYz1X2hhFRDNSxCiKQjE+Ozu777//HpWlaWNiGfyJxLdDfNNIdSL4+/LC101kon8lDQ0NHT58uK6ujtT7McmSP0uvGUoyNWL6+Tx/pkhILibpXH19fdHR0SEhISSRZlhuAFDVwNjskGZsEkt+vtrPN5GJ/kmiaTonJ6exsZFipL296kb90uk1Q8n/FdHPZ+akp6eHh4cbGCV5TGSit42GhoYyMzNRjpeoZa+6Ub90MqGkiUz0dtHRo0dbWlpIza1X3ZzXgEwoaSITvV2UmZnZ1NRkMBYkfNXNeQ3IhJImMtFbRDRNp6Sk1NfXk58mjftnyYSSJjLRW0Q0TSckJNTW1hKfpMnH/bNkQkkTmegtIpqmk5KSsEEjqR35qhv1SycTSprIRG8R0TSdlpbW3NxMMQoVv+pG/dLpNUNJmqZJeUqshMjRRtQ3Ka1MoimZN2ZkZKSlpTFjKk3qhoneNgJKdnZ20oztm151o37p9JqhJGq75+fnX79+vaKi4urVq9euXTt79uz58+cTEhJQ3JiZkU1uhNE6ISGBFBI3qRsmegsJGjfZt86Ekn8PvWYouXnz5rVr1xYVFZ06dSonJ2fChAnvvvvuunXrgoODi4qKZDIZCi+3trYyERDCY3x8fEpKyjBZ0oSSJnqriKbp2NjY9vb2l70nyptErxlKLl68+MmTJ6jPHBIS4unpOXny5MmTJ69bt+7ixYv9/f1CofDQoUP5+flMawuOo6OjTShporecaJqOiYnp7Ow05Sb+/fSaoeSSJUuUSmVjY+P+/fvj4uL4fL6jo2N5eTmXy123bl1RUdHQ0ND+/furqqqYdwENWSzWixr3q/oQE5nolRBkSR6PN6yatYl+gl4zlLSwsODxeDt27Ni6datQKNTr9SEhIS0tLXFxcRUVFffu3aNp2sfHp6ysbFjRM4PBEB4enpiYCCsMqXZhkiVN9FYRTE8ikQiuG1OS4t9DrxlKrly5UiQSURR18eLF2bNnf//99ytWrFi+fPkXX3xx5swZbD65Zs2a27dvv4iSoaGhJh+3id5yomk6MTERG3zTxh1MX3Wjfun0y0XJH4zksra25nA4NE2zWCwPD4/Gxsb6+vqSkpK//OUv5eXlNE339/f7+fnduHGDPIFYqePi4s6ePUt+4oEmWdJEbxUNDQ1lZ2eTHfQooyRhop+g1wwlly9fLpFIhoaGwsLCWCwW4iUNBsPSpUvLy8uxyaevr+/9+/epF1AyNjbWhJImMlFaWppAIHjVrXid6DVDyUWLFkmlUr1ev2vXrvfff9/MzAw7u7/77rvYFk6n023atOnq1avUCygZHR1tQkkTmSg5OZnD4cBAbzLN/z30mqHk4sWLb968OTg42Nzc/PTpU5FIpNFoRCLR8ePHeTxeZ2dnTk7O6tWr7969SxlVCeLLPnTokAklTfSW09DQUHp6ulAopEzM/3fTa4aS1dXV169f1+v12BJWq9XCMwMjNJ/Pv3DhwunTp5VK5bB4yaGhoYiICBNKmugtJ9gl5XI5bdw8ymSX/Fl6zVBSo9Ho9XrkbtPGLb2YMQ308/uCEfu0wWAICwszoaSJ3nLC7mBisZgyMf/fTa8ZSiJ2B0gHNMRIY4dY3IL9Y00oaSIT/SAlJydzuVxil3zVzXkN6JeLkv8kAQqhU0DM9PDwyMvLI8HkIFOqv4neVCI7bkPloo21slJTUyUSCYxUmAWvuqW/dHqTUZLo4CB/f/+8vDwcYzNuk4PPRG82Mfmf7HKTmJgolUqZWyi/6mb+0umNRUnKWGSU1JoMDg7Ozc2lKEqj0dDGzbVNuTcmelPJYDAQtdpgMBAjfnR0NJ/PhwuUpunBwcFX3dJfOr2xKEmWSqJuhIWFXbx4kTZmZUGWNC2kJnpTCbEfzLrU4PyUlBSpVEqmgEmd+ll6Y1ESRCyPOp1u3759Z8+exU+9Xo+dNk0LqYneVIKeRKRFzAWDwZCQkNDd3U0zQuhedUt/6fTGoiSRIgsLC2ma1mq1Pj4+BQUFUMO1Wq1OpzMVRDHRG0xAQEiLAoHg4cOH+JmZmQlZkqZpwOWrbukvnd5klAQIbtmyBQzh5eV1/vx5LKGnT59+9uwZbaoJZKI3l5hVfx4/fpyamgoFPDMzUyAQDA0NaTSaBw8eIA/HRD9BbyxKkjAIb29vNputVquDgoLg4+ZyufPmzePxeCa7pIneYGLW2aVpGvxvMBjOnj0LEbKoqCg5OdkUDPez9MaiJE3TQqGQpung4OD+/n6Kojw8PPLz89VqdUlJiZ2dXV9fH0VRAwMDr7qlJjLRyyKiUen1+vj4+OjoaMRLajQapVKZm5sbERFhQsmfpTcZJWGROXz4MBTtwMDAc+fO0TTt5uZ26tQpBJy/6maayEQvi5jebYqiioqKfHx8pFJpXFwcTdPt7e0sFuvJkycmdepn6Y1Fyd7eXnhvqqqqXFxcaJretGnTkSNHaJqeMWNGdXU1UclfdUtNZKKXQpADiMbN4/E2btzY0dERHh7e29tbUVFhY2Oj1WpN6tTP0huLkjRNazSawcHBhoaGlStX3rlzJyAgIDs7+969e1u2bLl69SoYCLHlJjLRm0ck9AfxHv39/Z6enmVlZaGhoVKp9MaNG3v27DEJCn8PvbEoSQLBdDqdo6NjVFSUnZ1dcnKyt7c3i8WCj88ULGmiN5iYgiQO7t69a2lpuWfPnqamJnt7+2fPnun1epOg8LP0hqMkCghVVlZu37596tSprq6u3333nVgsJnsomiKBTPSmEokqR8EXUFRU1JIlS6ysrNLS0tRqtWkK/D30oyhJ03RfXx98ZFhwSG784OAgkeSHVZQglcqI2Rgh3OQk6uYy/0szNl0g2YRarRaJAaRQKG4kzUPmzIsZ+8zCoiReTCKRzJ8/39zc3NbW1snJCY8itYKYhUhJw0jAObO1FKP+Od5OGZNkyaJNmkQ+kGQ4kPNMjKYZBYrINXgaeSn5FnKNRqN5O+unkm5BF5EcO9IbhN/I6BC7G1KtyEjhRuLhZXIRcyyGcRf5OYwxmNNhGF8NayfOg4GHPZY8/Acb8IMXMLuFyXKkbSgwCJ7X6XQhISGTJ08eN27cnTt3KGNNg594EZ5GPV84Y9g1w/77IlGMifODF1PGuCXyl/QY8+3MAxSsIV2HzyfdwuxSsuc4+ckskjRs6qGAN/38zPoplKQZIEhRFMEpZtcwv59JzIHEpzIr5tKMASA9Qj/PfMN6nwAKuZLcBdZnNgndR/qCpumwsLDx48d/+umnV69epWlaoVCQvv6JniVZjHgU8wLm55PRwlBRxmWcVB4CabVa4lUn1zPhlSz+eDKwFS0k0EAAt7+/v7e3921z05O+IvwJgYh6AUDJxf39/cNg6MWldBj7kWso43pMfpKhwaATYMIDiQZDP7/VNbH/MF9E5idpA/MVBiOREn/EG/ODwEE/PzvoF9Za/CsvL+/TTz+1sLBAnBxhLeqHpjB4j9ldpAHMhpF7yUkiRjD7lol9hIi4w0RJ5owYtmC8uH4wzw/rFubKAfNaX18f8xXkRoAbKU0rl8uZXPdTKInC4GTsmSNKMeb5Dzb6xW9gshEhMgC0EQ6Y/8XDgVBMlmK6p8kDqRfWZLK86/X6s2fPvvPOOyNGjCBrBal5TkYOAuwQw5pDP8+FTO4ngiqzzT8oAjCHiikA/thdpAFkLlGMJWeYXE+e9pYQ1gmVSjWMWwiT0IxFi+Tso5fIUgeWYM4rTEhy8idEHtq4VlHPSwnESULeyxxE5pCR6gE4YMoy+MYX3/tjBHYlAgSxs5POIbxNGVfu5ubmv/71r3v27NHr9b29vUxZktmfBLMoIwLSP45QP9ZRNKNjqecZfhiAkoejnPYwlKCNmt/AwABzuWIiNZHfySczbx8WYE8bBSDaOBxAyYGBgcHBwRfdFT8jS+JlUL3xjt7eXup5gZ+IcmQ7GjJI5PUEX6jnMZ60dcio/9I0rdFoIIWhs8gODcwvZPaCwWDQarUYiYGBAYB7X18fuWZgYODSpUvvvvvutGnTNBpNT08PMJF+HuaYea+YMMQ+wFwSMBOY/c6ch+iK3t5edAVlREkmmuO4t7eXzGdy2bDvIiyFdoKnARPoz7ctjIPZP729vRhoiqLAJEw1jWYs4bhx2OoybC5RL2iaZDbq9fr+/n7k/jNnKU3TiKR58cloLc2AG/p5dKCeRw3C0kMMvQEPIcLjkNFKQ9YAjUZDkOJFE9aw7sIbZTLZN998wwXO0GUAACAASURBVGKxXlTgXuQ98l34iZk1ZBSxmUVaX/xwbPtMPS9kECmEen4xIE3FDCIi+YuyJOkiw/OGLOZ6QD5KrVajW/r6+giSajQaAg7MYYJSYjAYIFEyue5HURIPRTvKy8tjYmIOHDgQERHh7e0dGBiIYxaLFRERERUVlZSUlJ6enpSUFBMTEx8fn5CQEB4eHhkZiStZLFZwcHBUVJSfnx+LxYqLi9u1a1dAQEBwcPCBAweCgoJYLFZkZGRMTExmZmZCQsK+fft2797t6enp7e0dHBzs7+8fHBwcFhYWGhrq4+MTGBgYEBCwbdu27du37969OyQkJCgoaPfu3fHx8UePHo2KigoNDY2JiUlISEhISNizZ4+7u3tgYKCbm9uECRMWLlzo7+/v4OCQlJQUFRUVFBQUEhISHBzMYrHCwsJCQkKio6Ojo6NDQkKSkpKio6PDwsKSk5NTU1NZLFZMTExSUlJycnJ0dHRqampcXFxKSkpcXFxycnJWVtbJkyePHz+enp5++PDhjIwMfEtiYuLx48cvXbp07dq1w4cPJyQk5ObmpqamJiQkHDt2DH0YGhoaEhISGBh48ODBqKioqKiosLAwfG9wcPChQ4fQz8HBweHh4QcPHgwKCgoPDz99+jSHw2HOpbeEaJru7+/XaDS9vb2YHkql8syZM0eOHDl16tTRo0fPnDlz+vTp3Nzc06dPnzx58ty5c2fPnk1NTc3NzS0sLMzNzT179uy5c+cuXLhw4cIFHJ87dy43NzcvL+/ixYtXrly5fPlybm5ueXn57du379y5U1FRUVZWdv369evXr9+5c+fevXvFxcWlpaXl5eV37ty5dOlSXl5efn7+zZs37969e+/evdu3bxcUFOTn55eXl5eUlNy6dQsH9+/fv3PnTn5+fklJSXFxcWFhYWlp6T0jXb9+vbCw8MGDB0VFRZcuXSoqKrp//35FRQXefv/+/crKyvLy8rKyMjTg/v37ZWVlpaWlT548efjwYXFxcXFx8dOnT+vq6kpLS4uLixsaGgoKCu7evXvz5s0nT54UFRWVlpbevXv38ePHq1evjo6OLikpaWpqwi3V1dUNDQ0NDQ11dXUNDQ2NjY319fV8Ph8nHz169Pjx466uro6Ojvr6enJlTU1NXV1dY2Pj48ePa2trm5ubm5qa6urq6urqWltb29vbGxsba2trnz179uzZs+rq6traWvKK5ubmtra21tbWpqYmPLOxsZHH47W2trLZbDabLZVK5XK5RCIRCoUCgUAkEkkkEplMJpfLRSKRWCxWKpUSiWRgYGBgYECr1cpkMpFIJBQKJRKJVCpF/nF3d7dEIqFpWqVSyWQynU6n1WqVSmVPTw9Qtb+/n8fj1dTUUMbiScPgHvRTsqRWq+XxeEFBQRs3bkxPT79x48aZM2ciIiIOHz4cFxeXaKSEhISsrKxjx45lZmampKRkZGSkp6dnZGSkpqYmJyenp6dnZ2cnJiYmJSUFBgZmZGQcO3aMxWLFxsZmZWVlZGQAKYKCgoBugLmQkJD4+PjU1NS8vLwzZ85cvHgxLy/v0qVLWVlZ6enpcXFxCQkJGRkZeEJCQkJISEhMTExqamp4eHh4eHhKSkpoaOjx48dxwenTpwMDA5OSksLCwq5du4ZUrczMzEOHDrFYrKysrKysrOTk5KSkJMB0REQEMC4iIgLfGBYWBpSMjo4+dOjQoUOHYmJiwsPDw8LCAF7R0dGxsbEsFisqKiouLo7FYqWlpYWGhkZERABJsR7ExMTs27dv//79KSkpHh4eu3fv9vHx2bdv365du/bu3RseHh4aGhoYGBgYGBgZGRkeHh4fHx8bG5uYmBgbG5uQkHD48GE8c9euXStXrty1axe2eXrbCHys1Wpzc3M3bNjg7u7u4eHh7++/e/fu/fv3b9++3dfXNzQ0dMeOHdu2bfP399++fbu/v7+Pj8+OHTvc3d3d3Nx27NgRFBR04MABf3//nTt3+vv779mz58CBAwcOHNi3b19AQMDGjRvXr1/v4uLi4+ODJ3h6enp6em7atGnTpk1btmzx8vLatm2bi4uLk5PTpk2b8HB/f39PT8+tW7c6OjpibduzZ094eDjW4/379zs5Ofn6+np7e6Nh3t7eO3bs2L9/P94SGhq6a9eurVu3+vv7e3l57dy508fHB6/29fX18fHx9fXFSW9vb09PTy8vLx8fHw8PDzc3N3zUzp07nZyc1q1b5+Pjs3r1aldXV1tb282bN69YscLBwcHW1tbFxWX16tXr1q1bsmSJnZ2dpaWlk5OThYWFjY2Nra2ttbX1ihUrbG1tly9fPmPGjLlz57q6um7ZsmXVqlUrV66cNWuWtbW1tbW1lZWVpaXlkiVLLC0tly5dam9v7+Tk5O7uvnHjRldXV9zi7++/bds2V1dXtMfBwcHFxWXDhg3Ozs5ubm4bNmxwc3NzdnZet26dvb09af/WrVs9PT23bdvm5+eHHibPdHNz27hxo729/erVq11cXLy8vDZs2LBjxw6IU66urg4ODvb29mvXrl2zZs2yZctcXV2dnZ1dXV3xc/369TY2Nni7s7PzmjVr7O3t169fv3DhwsDAwEuXLg0ODvb09BCpn8lvPyVLUhR1+vTpEydO9PT0SCQSKKoAabVarVQq1Wq1VquFOQ/eEkjCvb29arW6u7tbIBAolUqpVCqRSID0KpVKpVKJxWKYACD6qtXqvr6+/v5+uVyuUCigwvT19XV3d8tkMqlUqlQqZTIZRVE9PT1YFmQyWW9vb19fH5ohl8vFYjFWG7QKopZKpRKJRHK5vKuri6Kozs7Ovr6+5uZmhULR09OjUChgLlCr1UKhED/RQqw8Go0GYotKperv71cqlUKhsLe3VyqV6vV6kUikUChEIpFare7v7x8cHFSr1SqVirjm8RP3SqVSWAY0Go1EItFoNB0dHVAx+vr6enp6enp68BVqtRpaCToWih407sHBwd7eXpFIpFKpWltbo6KiysvLXy4g/cII7AvLw82bN11cXM6fP9/S0gIpAzo4l8vt7+/X6XQikUggEECZAnf19fXJ5XKZTNbf36/X68FpGCAYpKCODQwMqFQqmO3IxnN4jkajgfaN4VAqlXK5vKenp6+vTywW9/b2KpVKrVarUCgoitLr9Ri+np4eMLxarVar1QKBoK+vD9EXfX19Go0G+ilYjvAbxr23txfGGXgR0Q8QoHQ6nUKhUKvVg0aCCUKtVkNugvEdfNjX16dSqYRCIZluOp1OKBQKhUKmnRRKJK6HEX9gYEAikWBKIjpdpVIpFAqlUqlUKtEAvKWvrw8cjn5Ah2PI+vv7MXnRpVqtlrA9RgfyHfBEoVD09/djIsOIDGABtigUCvgtlUolYEen0/UySK1WQ9hEXwFV9Ho9xp28HUOg1+urq6tzc3PXrFkDriB2Z0I/Y5eMjY1FW8GXxE+NASamENhHiE8Z1eukUimHwxkYGCBwwOPxYFCD9QGAAiiEuItvA4Thdg6HA8DV6XRKpbK9vV0gEHC53N7eXjab3dvby+fze3t7Ozo6xGIxgW+RSMTlcmma5nA4FEUJhUK5XA4jI+aJWCwmLcHSAZdfb28v8XOx2WxcgBu5XK5Wqy0vLyfrBC4DM7W1tRFxnTiIINvjIUB/Yp81GNN+1Go1n8+HcU0kEtHPx5EMDQ1JpVI8GVNXLBZjQlIU1dTUlJ6eTgxMmPZkUFQqFY6Jckq//q4e2mhup2naxcUlMzMTo4OZAKBhGqpIBAwpAYVhlcvlpMAoAUFiw8LgEmOfSCTCNRhZ8DP9vOEPiEkeMjAwIBaLUWZFpVKhGVh0ybvAgVAJ0RKY6fV6Pdkvm2aU1se7iPkMjyL2VhKCQl6BdZpmGN/ZbDZxfhIjI+EW2uj4QhcRrgPKA1BwI03T+DT6eYL+i4eQj6UZEX7EoUwZTclDQ0N4xTBnA+F/CA00w4dMzJpMRy4+n+jRFMOXqzcGnFA/smcqrikoKDhw4AAx+zIv+FGURAtCQ0M5HA5WQjJUWLEhGFIUJZVKMRhYZ8j39Pf3i8XiwcFBSHByuby/v5/P50ulUhLDBQQUCoVtbW3oXB6P19PT09nZCXkNcCkQCLRabXd3N5/Px7KDBVwikYjFYoAL1jGAXVdXFxoACRQzBLMInatUKgl24Cf2S+JyuSqVymAwEIcV+FUul3M4HCz7CoViaGgIKzOeDzmRpmmZTAZua29vB++qVCqpVCoUCgGXeAsxt2u1WjabrVAo5HI5n8/HJCQzTaPRiMVimUxGvHhYCTUajUwm02g0fD4/JSVFoVAMi3pj2vLROfTzIVyvLzGxac2aNVFRUTweTyKRcDgcsjgNDQ1BFsPKTcQiokwZjME96DfIXMQPi+cDcAnD43xPTw/6s6enB5e1trbK5XI41ng8HtZmvAiyFViuvb2dOUBMnw/EHAhNWOSYDhya4Tcnt4M5cRmJuMAxXge1D7hAEIqs62Q51+v1ZCGHkoQOoYzwx+PxwPN4XU9PD1lXKKOk3NPT09/fj9mHu5hNJaIJPo18C3HJEu0TD0RPEjma2WkERgk4wquGqYG6DXpjTA5xMQG16ReiazDEUBDhbS4rK0MdENq4WhCu+xlZMi0tDWiF1ygUCiIA8/l89C9sqHg0MAJDi9XSYDCIRKLe3l6tViuVSltbW8ViMUFrCEqQ+bu7u9lsNr6cpmnonl1dXTKZDBq3QqEQCoXAKb0xYhYw1NfXB1Zms9lofEtLi0ql4nK5PB4PKj+Hw+FyuSTfAI3v7OzEu9BsXNDV1SUUCiH583g8Pp/f2Nio0WiAmBCuYcXo7u6G6o3zGAlMUfA9dCUySGikVqslXNLb24uLeTxef38/FEMSXodpBolSIBAQqQHLg1AojIyMJDEGTCYY5l7EnH85wPWvJiJxODg4xMXFwXwBeY0yBoiQpU6n08nlcmjZMplMr9czJWvipYV8Ci0PXUfCVKVSKSQp6DrQk4g0gPdiUslkMoiZgF3UcITEiuUN6jAUZ7KMEeGXDBlBImbMGWV008M6hGei8WBLCIA0Q3Ug+EjEF4lEAnTAvyiKQiP1ej2MY+R2mAUItBEFCxYJIhoTOYZgFm10KA8NDUFMJlomrB9kLqCTSeQyRVEARyYbAzEhGdBG1YpmJKcQVY+iKGjuRGIgKsIwOZ3pB0c34vpHjx4lJiaSVzNZ7kdREu9IS0uDzjs4OCgQCLq7uzEhmcyEhRFSLgmcFolEgBXYCIh6Dq5Sq9Xod51OJ5VKwUmDg4PQm2iGdN3d3a1Wq2Uy2bNnzyQSiVKpxNiga6RSKZfLJU59SIVNTU1cLre9vV2r1cIyIhaLW1tbBwYG5HJ5Z2cnXg37EdogFouB6ZBVsfRJjUQkUNJIuVwuEAg0Gg0wVy6XNzQ0kKEaHBwEbgLZJRJJY2Oj3hgcB2YVCARkRSFqXW9vr0AgEIvFGo2mq6sLIwoTEuw1JEgTbj4OhxMREUHGVc+IwSJ4QYKx6DfCIT7EiDR2cHBITU0lX0cbLTmUMdYKVjDApVgs5vP5mLpE1ybiJOkfxI4ww7w7OjogueOBmNiUMeYMl8HOpdVqYYamabq/v5/L5QI6AT2Y8DiACDYwMMCEbLgOMOLM0aSe3wQRtjOiuvJ4PBjgwLRYC/l8PsWIS2tpaaGNlgQwOSxR0AUJ2vb29tbW1tIMk5FAIKCNoiufz6eNFWQIRMLwhdt7enpwPfwN6AcOh0MEusHBQUA5Go9vVyqVra2teKNarZZKpRqNhnohI4PYE2njEsXj8Ujv4TMhXhBBm8jOWMZohgg/LLoII1JQULB37161Wo0wPqZu/lOypMFgYLFYNTU1QqEQEAOrMHRe5guABbRRZiE9C06CnkIZI5gMBgMUSfQR5jyU4qGhIYFAAGzCKwAZg4ODQD1YIWmj9AevP0KcIItpNBoOh6NSqaCSwz4tEAjkcnl9fX1jYyPhWplMhk5/9uyZUqnkcrkikUipVDY2NnI4HOi/ra2tVVVV3d3dPB6vsrISgNjT0yMUCru6utRqdXt7u0KhANBTFKVQKGQyWWtrK4ynXV1dEHLFYjFEY9qoD/b09KABTJsREUKhTWPsAbUEqXEAsaizszM1NXVYoBzRhnAGAyGTyV6MAnsdiTYKBTqdztramsViyWQyYmtnhhxSFNXX1wfzyNDQEIR09AmXy8V4YVkFeKG3MfkxEBC7WlpaiOkc3A7/AEzh8OCBIWFc5nA4xFEAPMIbgTJisRguC5itkOOB5ZbD4UgkEugWZD2D+APPDwGjO3fu3L59G/sxAP1hGmppaYFIePv27eLiYpVKVVdXR3gjJyenubm5s7Pz+vXrEomktraWz+cLBILm5mY+n9/R0VFZWSmVSnNycsrKyqA10jRdV1dXXFwM1hWLxRcvXmxrawN3yeXynJyctra2jo6OK1euwKoAlCeAKBKJ+vr6jh8/LhKJOBwONFF8O6BTr9fD4k8/nxbM5XI5HA7Ow9OAB2JOQUujjW4GWLSkUill5Hx4AgCI5C8Ohp5PH6KMKldxcTFT5mBy3c9o3AkJCVwul6yZRCAizl/aqPYSEw/ESea8hfxF0zSfz4chvLq6urm5WSKRADThh4HriqZpoVAoEokePnwIB9zDhw+xwtfW1qKP6uvr4UTD0sFms8ViMZQdDofD4/G6u7ufPXum0+kkEgngu6en58mTJwqForGxEaoZdO26ujqMLpSp3t5eNEyhUDQ3N7e2tmJxI6ZSiUTS2tpaUlLy4MGDjo6Ox48fy2QygH5NTQ06XSKRtLe3K5VKPp9fV1f35MmTZ8+eCQQCuPCwnkPOhXQAvQYBYpB9iJOHNpopoSvRRjUKC3VTUxMq8jPHlfQ8THI0Ix//zUBJymhut7S0PHjwIJ/PR1a7wRhfTVYUTDDgoEajwSzCaFJGYVAkEkFVhONOoVBAeFcqlXAoQ2/g8/k4AFMplUo2m11bW6tSqdra2rRabXV1NTFAdXZ2isVizAWsqXw+v6WlhcPh3Lhx4/79++fPny8qKuru7kbhFYqiEAWBqECKoogsA80GrnDaaGxxd3ffuXNnUVGRlZXVmTNnEO9x6NChadOmzZs3z8zMbNSoUe+//76VlZWjo2Nzc7NcLmez2QEBAQcPHtRqtXv37r127ZqLi0tBQYFMJuNyua2trUeOHNm7d29VVdWMGTOioqIaGhrgDS8tLd28efOTJ08EAkFFRcXMmTPb29ubm5vZbDaHw5k7d25KSkpbW5uFhcX+/fsRvCmTyaCkQ7yorq6eO3cum80+ePAgpFr0kk6nQw1gLD9CoZDD4Uil0pKSEoVC0dDQoFAoIE9g7Nra2nQ6XXt7u1gs5nK5xLlEGxVzSEVMqIWMD64QCATEXwRTps6YgoUzKCWHlBay0IJ+FCWhQSclJcHrgngIAyN+HWojbbTT4WshSxI7Dhixr68PoplKpQLGBwcHnz59uqurS6fT1dfXYyHl8/noFy6XGxcXl5eXV11d/fTpU3R3SUkJj8drampqa2vbsWMHm82GBaCpqWnfvn1NTU2Q4BobG5ubm8+fP5+ZmSmRSLq7u+vq6u7fv19bW9vY2CgSifz9/QMDAwcGBq5evVpSUiISiTo6OpKSkm7duhUcHJyamtrW1kZRFJvN3rZtW3FxcXNzc319fVtb2+XLl6Oiotrb2xEfW19fL5fLVSpVY2NjXl4eZNvGxsY9e/b09fV1dnY+e/YMg3327Nl169bBCQYDGXzuEolk0LhtPPoQ0jrEGZhryahDeKSNpmssG01NTSwWi6xGxP+g1+vJwtbc3Ozr69vU1DSsXMhrSjQjsQSyJFFrwJ+wLZLLsFZ1d3e3tLR0dXVpNBpMP4SmyWQy8LBWqxWLxZAZEWXCzKgh8cwdHR06na6xsbG/v7+zs7OpqQkLc0dHx/Xr16HWyGSyuro6oPPAwACk+KamJolEEhUV9dVXX61du9bc3NzNza24uBjSA7GO9fX1oT1SqRRhGOAxDocDpYrH4x0+fPiTTz4ZM2bM9OnTf/e73x0/fhxiUVtb25YtW/bu3RsQEPDNN998/fXXq1atunDhAofDKSwsrKys3Lx5s5+f340bNyZNmjR79uz/9//+n7+/v16vr6io2LBhw6RJk3DXqFGjRo4c6eLikpubm5mZOXny5NGjR69Zs2bv3r3z58//4IMPvvnmG3t7+/b29tzc3JkzZ1pZWVVUVJibm0+ZMsXc3DwjIwOGo9ra2suXL+/evTsmJmb06NGHDx9evXq1s7Mzn8/PyclZuXLloUOHjhw5Qgxc0JGfPn3q4uICwUWn07W1tbFYrJs3by5btszJycnW1tbZ2XncuHGXL19uaGjo6OiA25M2Gk/glYXKSxvdU9AMED/HFCSHyZJ37949cOAAlsa/V5akKEqv10dFRbW0tIhEIkCYwZgUpVQqh4aGEO8uEongukUkFPFmYNIiDEogEMhksqKioosXL548eXLMmDGurq65ubkBAQFlZWVlZWV79+7dtGmTn59faWnphg0b/vznPy9atCgkJKS1tTU7O9vW1nbr1q2fffbZqVOngoODx44dm5WVZTAYnj17Vltbu3Xr1uDg4MTExMDAwC+//NLMzGzfvn07d+4sLi5WKBTm5uaffPJJenr68uXL7ezsxo4dO23atKampjNnzqxfv/7Ro0fZ2dn/8z//s3Pnzm+//XbZsmWnTp26fPmyl5eXo6PjuXPn0tPTsQhv3rz50KFD+fn5dnZ23t7eU6ZMCQkJ6ejo8Pb2trGx6ezsRJ5AcHCwr6/vgwcPEhISfHx8Zs2atX///r179xYVFRH3DsRtTO+hoSEICHAvgDmAifBKQWeBwxQQSWLT+Hx+SEgIeh7j3dDQUFlZef78eaQqZWdnHz16tLGxEa9mmlqIbj7MnUcxks/I9cO4ijyBYux4Th5CnjzsXeQk88Zh5/WMBDhyDfO9BA0NBoOVlVV8fDxxnhAXCtFRkGihVqtzcnJ27dp19uxZDofT1NSE7AAWi9XS0nLnzh0kiUVGRqakpJw/f/7KlSsSiaSuri4zM/Phw4d1dXWJiYmXL1/u7u7Oz89PSUmJjY19+PChr69vRkbGoUOHLl68qNfrjx07JhKJrly5Eh4e7u/vX1BQIBAIysvLw8PDo6OjT548WVtb6+vr6+/vL5FIeDyeQqHQarUVFRXx8fEnTpxA+lZBQcG1a9caGxuzsrIiIyPz8/PhI83MzMzKyiooKNi/f7+dnd2MGTMiIiJWrlzp5ubm5OTU1dVlMBhycnLmzZu3du3a7777bsSIESNGjJg2bdrOnTuRWWRnZzdr1qwtW7ZERUVt2bLFx8cnLCwMVni5XM7lcg8fPrx48eIdO3Z8/PHH2dnZYrFYLpdLpdK1a9fOmzfv7t27x44d27x58xdffIGMjLNnzxYWFk6cOBHB54sWLVqxYsU333zj6+tbWlra0dFhYWFhb28fEBAQGBj44YcfxsbG5uTkREdHFxQUzJo1y8XFhc1mX716ta6uTqvV3r17986dOxqNpqamZvz48UjXOXLkCATkkpKSadOmtbW1qVSq7u5uBI2cPn26sLDw0qVL5eXlVVVV+fn5T548aWhoOHr0aH5+fktLy+DgYEdHR25u7okTJ7AgEfGQsBDkCZgISktLMZtohpf8Z1ASMJeamsrj8WAx4XA4kM8h3Pb09GC1hCURCyDxvQA1IATJZLLq6uquri4bGxsbGxtfX98xY8Z4eXnt2bNn2bJlDx484HA4xcXFy5YtCw8P37hx43/8x3988MEH77333m9/+9sJEyY8fvx43Lhx58+f/+ijj8LCwvz9/cPDw8eMGZOYmJiXl5ebm3vr1q329naIty4uLgkJCTU1NWKxuKWl5fLly6NGjXrnnXcyMjJmzpz5+eefv/fee35+fhwO58qVK6WlpTweLzU19cMPP/Tw8Pj888+nT5/u7++/bNkypNZMmjQpLy8vPj7+2LFj0dHRO3fuLCkpGT9+/P79+7/77jvkG1hbW3t7e3t4eLDZ7I6Ojps3b3Z3dyMks6ysbMmSJQiHgrCpUqng6QMiIIgE/SkSiaCpIfCYpmmYchBVSlEU1iq4+YRCYUdHR2Nj4969exsaGk6cOLFixYpZs2aNHz8+MTHxxIkTJOmYoqj+/n6MC4aGRC8zowWJF46pv8NLxrR70kaPkM6Ykk/TdG9vL6JYyI1Qe/XP1zigGZUmyJU40L9QwoM0bJiYTBndFEql0tbWNjU1dcBIeC+CfmA/6e7uVqlUOTk5+/btq6ys9PDwOHDgwK5du7Zv397Q0FBRUeHs7JyamvrRRx9lZWWVlJR8/PHHXl5ec+bMefr0KbJ0srKyrKys7ty5s3TpUg8Pj/Xr16emptbV1e3Zs8fZ2fn+/fslJSVbt249ffr07t27WSzW/Pnzz549m5KSYmlpmZmZefTo0SVLlty5c8fMzCw9PX3btm1jxozx9fXdsGFDREREW1tbVlbWl19+efHixe7u7jFjxqxfv/7hw4fu7u4XLlyorKxMTU1dv369XC7/z//8zyNHjpSWlt6+fTs3N9fR0fHWrVtffPEFl8t1dnaGjHn//v1jx45ZWVlZWVlNnTp15syZ3t7eyKTEtMX84nK5y5cvb2homDlzJpTQ1tbWmpqawsJCCwsLW1vbX/3qV9XV1bC6XrhwYfLkye+//76FhcWDBw/+/Oc/s1isI0eO/H/2vjsqqmtv2/uuu9b9bktubrJSbpLXmMTEGE0x9i6KiqCCDUVFsSsWJBYUCyqiIl2k9ypNigoqSlFpgvRepvcKDG2GmXO+P541e00wmvuuldybpef3h2scZs6cs88+z/6159mdnZ2NjY1yuXz8+PHm5uafffaZi4vLmTNnJk+eDFpda2urhYXFhAkTPvroI1tb2yVLlqSmpjY2Nl68eFGpplcySQAAIABJREFUVG7YsOHYsWNVVVUWFhbPnj1LSEjw8vLavn372bNn2Wz2999/n5CQMGvWrOTk5FOnTk2fPv3Ro0cTJ0709PT09/ePjo4OCgrq6uqaMGHCuXPn7ty5s2fPnvHjx2dmZpaWll65cqW4uNjb23vq1Kl1dXVJSUkzZ84MCgpCmzMWTjLBUBWgaRpue2Zmpqurq+n0+3dREp1AAoFAq9XC00E6vLe3t6mpqa2tjdAt0SeEOB3xNUqByPXAIXJ0dDx79mxnZ+eSJUu2bdvW1tZ27NgxFKDt7e3HjBmzcuXKHTt2fPLJJ3/84x8/+uij9evXl5eX5+fnjx49+smTJ++8846VldW8efNsbGwWLFhgbm7u6elpaWn52WefHT16NCkpqby8fPny5RMmTNi5c6enp2dra2t+fv6333773Xff/eMf/5g2bdro0aP/+te/Ll++3N3dfeXKlYsWLWpubs7NzZ04cWJubu7MmTOdnJxqamoePXrk6+v74YcfOjk5LV261MzMbNq0aX/729++/fbbx48fjxs3zsfH58CBAwsXLvz000+nTJmyfv36N998c9OmTdu3b3/nnXecnZ0rKyvd3d19fX2nTp26fv36qKgohOHoLYX7g4gP6X+UaDCbCaLJ5XIUEAFMIpEICWxE0zqdrqGh4csvvxw7duzYsWOtra1nzZq1cePGuLi4iIgIcL2vX79+4cIFeCLe3t6XL1/29PS8fPkyCPg+Pj7BwcFBQUE+Pj5go0dHR0dHR0dGRoLZ6evre/HiRV9f35CQkPDw8PDw8JCQEC8vr0uXLvn5+UVFRSUkJCQnJ4MWnZiYmJCQEB4efuXKlVOnToGyee3ataCgoJCQkJCQkOvXr4MMGhMTg2+Bcw2e9bVr1xITEzMzM0H3SktLi42NvXnzJo4cExMTHx+fkpIC5iu40ubm5iEhIWivMa3vExoCStv+/v4FBQVYrSMiIr799tvU1FSKourr6w8dOnTx4kVzc3MOhyMUCidMmFBUVLRu3bqwsDDMvR07dnz77bfff//92LFjV69e7erqijRfUlISghJPT0/0xu7evdvMzOzkyZPo3Ny9e7e1tXVwcPCpU6dqamqWLl16/fr148ePW1tbx8XFxcTEpKSkdHZ2RkRE7N69m6bphoaGt956C5UTW1tb9F3m5OR8/vnnnZ2dEydOxK0fHh7Oz89fvHhxXl7e+PHj+Xz++fPnFQoF2t2Sk5M//vhjf3//ixcvbtu2bdWqVU1NTci/JyUljR492tnZ2dra+quvvrK1tX3nnXfMzc3v3LkDevXGjRsnTZq0fPnyN998MyAgIDc3t6urCymsQ4cOlZSUFBYWTp8+/YsvvrCyslq+fHlNTc2pU6fGjBnj6uq6ePHizZs3X7hwYcGCBVlZWWfPnhWJRPPnzz969CjomPv37wfL8M6dOx0dHWBMDQ8PW1hY5OXl2djYLF++fOHChR988EFcXNz3339fXFz85Zdf5ufnFxYWfvzxx9nZ2W+99db27dsPHjzo4OBw/Pjx6urqSZMm3blzZ2BgAKTktra2uro6FxcXoJ6lpaW3t/fRo0fd3NzQDtjX14emRjxQpJiD2u/Q0FBMTMzhw4fBv/p3I26s3l5eXkiXosuBNlalEVaTXhZkIshrlB3RR8nn80Ed0+l0bm5uhw8fPnTo0HvvvTdhwoSQkBAHB4eamhqhUHjr1i17e/v//d//tbCwmDVr1ltvvTV27NgzZ840NzeXlpbOnDlz9uzZf/rTn2bPnr1x48aVK1dOnDixrKwMaUdnZ+dz585duXIlKysLC5eTk9Pdu3fr6+tjY2O/+eYbrKvbtm175513xo8fj2U/IiJi2rRpK1asmDBhwt///vfPP//8zTffHD16tIODw/nz5998881//vOfDx48YLPZFRUV7e3tc+bMuX//fmVlJc7wT3/60xtvvGFtbW1jYzN79uy0tDRMx6ioKAsLC7VavW3bNi8vr6lTp544cSInJ8e0UwwdsAKBAAE1svhYV9hstkgkooyMLvjj8D0JpVIsFqNzor29/Ztvvhk1atSoUaM+++yzBQsWTJgwwdLScvHixU5OTmAfu7q6ggm7cePG7du329vbb9682d7eftOmTdu2bXN0dNy3b5+Njc3WrVudnJzAGt65c6e9vf2BAwd27NiBbzk6Oh48ePDAgQMYxs2bN+/Zswe04pMnT65ZswbH3Lt37/79+x0dHffs2ePg4LBt27YdO3bs2rVr165dO3fu3LZt2759+0DUPXLkyNGjR0FJ/vHHH0G5PXz48IkTJ8DMBSH65MmToLrjp48ePbp9+3Zra+t9+/bt3bv3r3/964ULF0hTvd4oEqNQKDo7OzE5BwYGAgIC7t69K5fLb9y4sWvXrr/85S95eXkikUgkEp07d87Z2XnWrFnNzc11dXUffPBBZWVldnb2jBkzrK2tNRrNli1bLl++LBQKMzIyIiMj3dzcCgoK2Gz2kydPioqKwsLCvv76640bN96/f//cuXPQeH78+LFGo3FwcLC3t/fz84uIiKitrbWwsIiOjvb09Dx16hRJ0NM0ff78+a1bt3Z1dcnl8unTp4eGhubn58+cORPAV15ePmPGjKqqqsmTJ1dXV4tEIrFYfPv27RUrVkRFRU2aNEkkEvn5+SHIUyqVISEhNjY2Go3mxo0bLi4uR44cQWr75s2bmzdvtrW1ha7K+fPnnzx5Mn78+MTExLq6uokTJ86aNeurr756//3333vvvX/9618TJ0785ptvYmJiioqKSkpKvvvuu6+++srLy8vNzS0qKurTTz+1t7eXy+VlZWXLli3bsWPHmDFjZs2a9Y9//GPUqFFvv/32oUOHOjs7p02bFhsbu3fv3r1798bGxo4fP3727NlVVVVPnz61srI6f/58Z2fn7NmzHz9+vGPHDgi77Nq1KyMj47333mttbX3//febm5sLCws3bNhw6tSp2bNnI7MPRONwOHPnzq2rqzMYDKGhoR4eHqiCeHp60jStVCrt7Oz8/f3Pnz+PRnG5XN7Z2UloS6b9qmBhGQyGlJSUH3/8Ee0E/y5K4hAeHh7t7e3oyQIO6nQ6UFyRkQQju7e3F608arUaxTjkwmmaRmuCUCgUi8UHDhwYPXr0l19++fDhwxMnTowaNWrJkiWNjY0cDsfPz+/u3bt2dnZLliyZOXPmm2++iVzGrVu3eDxecXHxJ5984uzs/P/+3/974403IiMjx48fX1paKpfLKysr165du3HjxtOnT4eEhCxbtuzkyZMsFqu3txfJozlz5uzcubO2thZu/KxZs/bv33/16tXQ0NB33nkH+akPP/zw3Llzs2bNWrVqVXBw8DfffFNcXPyHP/wBx2lra2tpaVm6dOnTp0/7+vry8vKWL1++YsWKL7744s033zQzM7O0tPTx8eHxeEqlEssdIg4PD481a9aoVKqOjo6qqipU8MH5RVISuRI0gYJjC6eApmniaZJaDWGpo6A/ODhYX1//448/Xr58+dq1axYWFhMnTly+fHlISEhFRQXyfSR8AEGCNlIdKKPeHW0UfCNNEqTkR2LkEVEzbaJSZUoRGTbKx6E9mzaG3qjRY+kmETdZibEA4K8kpjaYCLnTJlLNlMleLr29vRYWFjExMUKhkJAasBgjOiEtEOnp6ba2ts7OzqNHjz58+LCHh8eHH3547dq1qKioI0eORERETJkypampqa+v77PPPisqKuro6Jg6derTp0/1er2np+ff//73+/fvr127NjMz8+jRo5WVlV1dXeHh4XZ2dnfu3MnJyfn666/Ly8tdXFyKi4sXLFiABNw777wTFhaWmprq4eHR0tKybNmyo0ePXr16ddOmTTjCvXv3hEKht7f37t27u7u7q6urv/rqq9DQ0JKSkpUrV4aHhxcWFq5bt87W1ralpWX8+PHNzc0o9dy/f//o0aNOTk7z5s1btWpVTEwMevVomn769GlISEhxcfGiRYsWLly4d+9e9CFdu3aNxWKtW7fu1KlTPT09NTU1xcXFU6dOraqqMhgM7e3tXC43Ozs7MDAQqYbQ0NC2tjYOh1NcXPzNN9/Mnz8fabFjx46ZmZkdPHiwoaEBDJFvvvkmMjKSzWZbWVmtW7duz549Bw4cUCgUfn5+b7zxxvz58z/66CNnZ+fz588vX7581qxZXl5ed+7csbS0jI6O1uv1S5cuZbFY4eHh8fHxcDYzMjLeeuutlpaWSZMmdXR0XLp0ydra2sfHZ/To0YWFhY2NjS0tLRUVFc+ePRs/fnxraytN056enn5+fpjkTk5OYJ3b2to+fvzY29vb09MTfU5DQ0NIWJlm5JG5ViqVarX63r17Z8+exZT7P/C49Xq9h4eHQqFgs9kajYa4PB0dHSgskOwkOHYCgUAikaBFEe/TxpI/QPbIkSNff/11Xl5eQ0PD/fv3HRwcFi9eXFFRQdN0aGjo3LlzraysPvnkk7/+9a///Oc///GPf4wZMyY3N9fKymrx4sVvvvmmv7//G2+88f333//5z38eM2YMZKP6+vo2b968cOHCqVOnXr16dcWKFadOnVKpVJ2dnRUVFZaWloiyo6OjbW1tR48e/cYbb4wdO9bd3T00NPTDDz989OiRu7v7d999h5sH77Wzs5PH4+HXgfWtra3Tp09ns9leXl7z589H8LVgwYIZM2aMGzfu3XffPX36dENDg0qlcnV1/frrr+EfBQQEbN++vaurq76+HhwssDaxwGClkcvlQqGwp6cHPQPgsKOlFC0aRCWks7MT7idtbO4pLy8/evQoyeiJxeInT57Y2dlZW1tv3LjxypUr/f39eH70xrZhAp2kaEOYW6arI/kKQUOSTyS4iZY38pXnwZQ2qbQYftrHS/5qWmQ0/VHKpM444lvAyoGBgalTp0ZFRaF/Cw4C1hs0vuDDGL09e/YsWLDg6NGjUqm0oaHh2rVrX3755aZNm54+fZqWlubt7Y25GhUVJRKJurq64uPj+Xw+GjBiYmK2bt0KtyspKSk/P1+pVNbW1jo4OCxZsoT0zVy7dq26ujoyMtLW1nbatGk+Pj5tbW05OTkxMTEKheLChQsFBQVZWVlWVlYQ0bG2ts7IyMjMzDx+/Djiwa1btwYGBgqFwjt37hw7dmzGjBlr165FyeLgwYNdXV03b94MDg7euXPnwoULd+/enZ2dHRYWNmnSpFOnTmm12tzc3ODg4NWrV8+ZM6e4uLi6unrWrFlJSUlPnz6laVoul69du/bAgQMikai9vd3CwmLy5MkoxAsEAnd39yVLlqSkpFRUVGRlZS1atOjAgQO3b9+Wy+V1dXUEbXk83qlTp+bPnx8cHKxUKiMjI+fPnx8QEDB9+nRbW1s2m11YWGhvb5+dnb1x40ZXV9eEhIQrV65Mnz59zZo1HA7n0qVL33zzTXh4+MmTJ3Nzc9VqNbxOmUx2/PhxGxsbNJDY2dmJxWJ3d3dzc3MrK6u1a9fCn7WwsFixYsXChQtnzZoVERFhY2ODxwqZIi6XKxaLExISFixYYGVldefOHaFQaG9vjxIrmqaRLYRaDfgmRJhDoVDcv3//xIkTmIFoff23Iu7h4eGLFy8qFAoul4tuMsx19EOR4rrWaKCC0jTN4XBANkJbD/SEpFKpo6Pjjz/+KJfL29rapFJpVVWVvb09n89Hf7WVldX//M//+Pr6urm5LV261NXV1d/fv7Ozs76+/smTJ3l5eZGRkVOmTJk9e/aKFSucnZ15PJ5arW5sbAwICBg1apS9vX1sbKy5ufnhw4crKioeP36MU7WxsUHicu7cuVu2bBk7dqyjo6NIJNqwYcNHH300bdq0hQsXIklkb2/v5eUFHmRNTc3bb78tFAoVCkVra2t2dva3336rUCgKCwuDgoISEhICAwOnTJmydu1ac3PzadOm1dfXy+VyNpvt6uo6YcKEs2fPmpubX758efv27dXV1bm5uSqVCg3A3d3d6OblcDgYW5CF2tvb2Ww2AnD4mxwOp7OzEzUcVCQkEgmhwFMUVVtbe/78ecABspmIPVUqVXFxsaen5/Lly7///nvwgogTRxCKrIWmKGYwEdk3RSVS5Hke74jrh5lD2sVeZKbnYOrzGowNwJSJ0PcIlCRN+BRFff311+jNUqlUWF3Qgtbf3489MpFyUigUYArAoSgrK2toaBgeHkYbY0tLCwgnWLRArEJgVF1dDbKWRqMRi8VwApDkamxsNBgMaC1CS1BHR0dTU5NUKq2vr6+qqpLJZP39/S0tLWjbNqVvIRUgEAhwx2tqakCHbWpqQkwNOgOC5ZqaGriQeAquX7/u5eVVVVWF4LG7u7uwsPDp06etra15eXlnzpwJCQlBzKdUKrOzswMCAnQ6nUAg6OjoyMvLu3//PqgTFy9erKyspCgKnXBOTk4lJSWYcgQvMG0GBgYePHhQWlqKFkUU3MPDw6VSaUdHR0BAgLe3N4oe1dXVNE0/evQoJCQkPj5eIBCw2exnz55t2LChrKwMzT2XLl3CxyiKUqlUdXV1WO8hg4SoGdQXdMXgGW9ubm5vb6+urm5vby8pKYHvguAM3T9ITAF56uvrUSZByFVXV4ceO9JxDAYKyG+I4RBOZWZmHjp0CB3vup/SeV/WCUTTtLu7e2trK4/Hw41EaxJau/G0UxSFdiRInLFYLFBlcN7gXDc3N6Pk7eLicu7cuY6ODhaL1dnZeenSpU2bNiHcOHbs2Lhx47Zv3/7ll1+uXr16zJgx6JDasmULRVHPnj1btmyZmZnZV199tXLlyo8//vj999+HhJ9QKExJSdm9e/ekSZPGjRv35z//efLkybNnzx43bhxa5L7++utRo0bduHFj8uTJ06dP//TTTzdv3tzQ0ODp6Xn79m0LC4uPP/7Y2traysrK3Nx88uTJwPGioqJPPvkEMzg9PX3mzJm2trZdXV23bt1qaWlZuHDhu+++O2HChFWrVs2bN+/LL79Eg0VTU1NsbKyTk9PmzZt/+OGHuXPnfv755zY2NuPGjbt//z4KCGi/QHc9HgB0lXK5XDabDQCF1wZlkMHBQdLYTyjwaMlqbW0NDw8fMG68gQmHF6gyt7S0xMTEZGdnm5JbiSdo6q+Z3vQREGbq7o0AU8rYJET/1PckXT7ksAajvrQp8+z53x1xAiOwlZw53pkyZUpQUFBfXx9GFU4lfgi9aHw+H74kesVpmgZRirCeQPcmx4drjHYiNPbyeDw4+ywWC+07yKv09fXx+Xy8QxnlVAglDrQIrJpoRweZCqdEG9nHQ0NDcBeGh4fhrKGZTCaT8Xg8QpsBmYfD4YC8r1KpuFwu2nS6urpAowBlC4w18CkpowgLSGVoz3769ClGg8fjoRMDPwFFFUJYQEs5kjxsNpto92ElZrPZLS0tcMdAEwKBGsUJLHVQ/8LFohWfoiik42QyGQggiJbA+DQYeZm0Ccsbt4kk+oiSCBQ60H4Pfw6OP23sFEZ7OaYBUn/I++HxwbWg4R9kJ6zNiYmJR44cMc0j/TJKYo5eunTp2bNnHR0dgGcE9uhWkUqlzc3NtHEDGZQUMRAqlYrD4aCSq1KpkClXKpWJiYm3bt2CKLFYLEbCkabpsrKy6Oho9H5Ds9bd3f3MmTPW1tbR0dH19fVSqbSysjI8PNzb2/vHH3+EsumlS5cyMjKw+NfX1584ccLR0fHChQvQqQ0ODq6vr+/v709LSzt79mx5efm9e/cqKyvv3r374MEDrVaLZbykpAStIY6OjqgbeHt7Dw8P19XVnThxora2FjrJXl5eaWlpLS0tGPe0tDQPD49Tp06dOXPGwcFhz549hw4diouL43K5KpWqpqbm8uXLDg4OR44c2bdvHz6ZnZ2N5INcLseCiQdDIBCAwtHa2opZjmgRDwybzRYIBIgHgUd4aBE1tLW1+fj4vGSde/WMNtnSYOrUqcjWI1nR29uLJkSESxqNBpVDxDEDAwMCgQDtFmTNQHaYkEGBX+joNhgMWNUATyhFoiEBKlZE4kGv10OmBHdTp9OhuRgHhKgiPokWLkwhQFh9fT34NqgnIOqiaRpvEocaDx14ykQSBUcAAsJAhxUKhXw+HxxKQDOpHMCfwhniEgBDWM9MNQP1ej2I0ijVmjprRI6LcN7JSiOXy9G5TZp/sTKBbw6hWLT9UkYpM3wGCwwiUeQE9cY9JJDywqlCfhA4Q2jduKcymUwoFII/SsRrALhY6oCGgCZ8AA8UHq7+/v6MjAwXFxdCljeddS9DSb1ejwIfOAAos7JYLGA8Lru3t5eiKGjAISWERRi9mkQ+B1jT2tqK+lRTUxOiGyxiqOeC6tfW1gZqBKY4XqD/saenp7a2tqurC3lDjUbDYrEaGhrAp+7q6gLvgsvlslgsDofT3d1dX1/P5/PBIMT6xuFwAD2oeSFEwmlD/x2hMRKIyLeCOIGcLJvNRkSm1WpR1IIAPZwLXKBCoUDUDHYQ+B6tra1dXV3oqURwB6I3eJDoryR6w4grIV4Pr5D0TqMzETKaYA39Zoj0ezRSw9HpdAsXLrx+/TqAQyKRsNlsPKJ4luAcQZQPJEVkPHg8HvpAMZggO1EUhYcTfj0ePHiaBoOBSCnj1pC5ikQTRVGkowvMXQT+4LZiliINDf0qmUyGGHBgYAD5KGCETqdDmGkwGFC7A/BRFAUNPfyETCZD+RShIlQ2QNZCBAp/TSAQcLlcsOawbwG8VDTEALlA+kKvMW3cvhhFMIAU0QADZRMXhSAdOIjyI1HZIBoxkKYGNRmETuSIoJI7bFRIA72CdOcQAUaws9G0gHQTKC0IgLAsgZWI4iqJnTEBgN1wrgmmAw3xu2A9otUEKwFFUZmZmc7OzpgJhN0Ae1n1RqVSeXp6CgQCwDmSZVgMMWPAbwUPD91CqJwiykBoA0VxiUSC1QkLAgjdqH0PDg52dXWB8okbyWaz2Ww2ZgMcq/r6epR30WYEDWqDwdDY2Pj48WNw/uCHY8uL4eFh/AqA5unTp/B2WSwWm81GGkuhUIC+At9WqVSC9k/CCgwiGKatra1AWySMmpubUZNB7Rh5E5CC+/v729raxGIxqFdwH1paWjgcTkdHB9xbXDv04hAMIiMBvwPSG+ClsVgsMHxxj7XGLffAweru7r548eJvB0m/Q6NN9BZHjx7t4+NjMBhQG8QChhC1tbUVDwkeeHh2wCC48FDW6e/v53K5kAjDweGOQZoP/apILun1eoIvoDALhUKgLfjyOCzRbYHnAiBADywkMABtpKW/tbWVSGno9XpwSwjBHNx/RMRCoZBwVeEVwvMCfAOewEog9Vk4FnrjPl8ajQbjgy8SHw0BEKYTkQcHAYx4ZETDGFwmRMHgcWCVIolssGwHjVve47eQbyViPzgUyYbDGyVt15TRwQRqw5eijWYw7lcoEomIJhDkZnBbcQSifoRGH6A84gZ0YpH0CJwnvV4fExOzefNm09Mjs+4Xdpo9d+4cnF6DwSAWi6FZj8mH+im8dDabjRPFWSJ9DjACnAPFwJHA4oCzxMQFXuCGIVOOqAQZOg6Hw+PxmpubxWIxXpMCOpvN7ujoQJ4I9wYABJ0h+OHd3d3I3WDdRuIP/BYCl0jMgxcoFotJvAAFFw6HgwmB1IZIJOLz+SCSYzGQSCTg7cPHQXCE4AsdzkiKYxmAGj6RqsS3kM9Vq9UsFgtjAtI3nFwMJtZSZLKQBZbL5ZcvX/4NMel3aSRz9O2334aEhAiFQkTEEEVGuNfW1oaHEMQwgCOazDs6Osgjh9gF/hqGF8iCd+BRYuZDNh8yqTweD81hcKaI+j1cfpwMlnNEVxBn0ev1wG5k+QErWHFpo8Y4wJE8qKRLBDlr2igEKZFICNMJqAR6FXKOwCy4NZBKoChqaGgI0wYICDcW0xU9+QBxhMy4LnyGMpbjkGPFkYlUj6m2MZxH7LKAYhriX4qiuFwurguuHBZ7jADp38IDiy8CtpBsBeMeYI3vYv0jkiKo0ZGAAMQwsLnh8cB5QrMHePGIF3HabDbbYDDIZLLk5GR7e3vauPOC6ZR7IUoipD99+jTWK+wlIJfLiXoK3unt7UU6FmEOWLSAQuR3AN5qtZrL5UJQHinLYaOM7uDgIIrjyPsgniWq4JC5pShqeHi4tbUV8IGUPJIyQFgU02mj9hyoPhqNBuEMXDYgNaY4gBgtAsjxQ9gRAk1wkxHsw6tFrhcTCOOLsIvNZvN4PKlUWltbS3JDWMSInhXKnShuKhQKpEKQwSAartiKB6eBeYalCA8DXHKdToet6eCWwsX29fX97fDod2gk5qJpes6cOZ6enkhfQIuXlCMANHK5vKGhAY8Zh8ORSCTd3d0dHR1w8bD8KJVKxEB4NsgWCDqdDtUJEgubispg1SSqvQaDAYJDtJFtiQ4biGhgHcXqbjAq6QKU4UPgEUPpCYEznA9gK7ruiJPRbbJxAEVRgGNCNjUYDNCdAm6KRCI0nyBKww+RBCuAA6K54M4CZwFYNE2TbyGIhE9AG5vDMD+JIAtt1LuESiwRWwJQ6IwC0kgRkB5YtAPrjfu7IBBG7h7jjEcVnV6wXuOmW3B+8dgiw4AsB55BeMe0UUAL/orBKDdB9G3hoGg0mvz8/L1799LGdpF/y5fEVV27dq2yshJYg04LeHnoxsQkQ4KSZGRxC9lsNsS0kTJHSaexsRH4BekqSDbA6UXAgvwLiI9Ir2iNe08DAfGLcPHgtQkEAh6PhzAcgQlGEG6sVCplsVi4wSiGIlyCPwvmPFkMAe4YPiAggIw2lqE1Gg1+i4QbEEAluhXIToBrhEeawDRCAIQqGBmiNaBQKJCyQIM05jFgGn4xkgM6na68vJzD4YjF4traWp1Ohwbm3xaWfn9GwrQDBw7s3bu322RHAWTJiWg5kXeED4j0DnL5KCPAWUMqCf4R+RcFE9xf2tgcimosHBb4m8iQwEmBZ4QcH4J0LpcbY6WRAAAgAElEQVSLsAaISSYAIV8QUJZIJCQxio/BF8MjTRsVCGljLwFFUQCp/v7+1tZWOF+m4SqyAXC0MRtNh45cIGVM8qJaiJUeaTE440B/YCWCHmQnSA0Nzh1pz0KkNWzULcfl6I1igLhTJAmAWBvqASR8Jg8dbaxoE2+XoiiM8LBxzwyANbkunVGxDE1FAE2tUdIb/jh+iHDhUMjS6XR+fn7Xr1/XGSVcTZuBXhZxa7Xamzdvuru719fXUxSFgKWxsbGmpgYDjfIr4m40N+FeYrDAqEOES9SP4QS1t7fjdFGPg6F/SCKRtLe3NzU1EfnF4eHhhoYG0xADAub4aQhBAiJZLBZFUSjsIPRGuhPTDqW99vZ28BqxemMoUemD+6A1ylwTXUIMLjZ7AAGGdIMTXw8hA+qSWAZVKhU6uRCwYLJCtl0ikeAC8aPIWmLpRn4AwRGkfJG9BTeRy+U+fvwYQdytW7dmz5794MGDXx2Gfs9GGj5omi4pKbGzs7t37x5ZdUi7D22sb2L9RpMKYhqkL3RG1Xe9yYZ5w8PDgDOUOHGzIEGNJxPvE7lJOFlYjAcGBnATIVFOURRWU+hvkxzooHETK5JsQYCFc0YiiKIovV4PYEJFCOE8AWtTf7nbuBUPLhb1pcHBQUQteF60xo29gFz4LdR/SHoO+EUbW27hPGL5x2cQ86E8QlEUlm3aJFFIGdWekHsFFECaBOeGABEXSBtFIQF/cLpxL+AW6I1ay1rjngikJo5fHDDq+dM0jbWQOIAYK1Rc4U4BZ8ko6Y2yF9ASxY2eNWtWXV0dZRSmNJ11L0NJ+H3btm2ztrb29PQ8duwY6LcnT568cOGCm5vb6dOnz5w54+HhcfnyZX9//8DAQG9v75CQkLCwMH9/f09PTw8Pj6tXrwYFBYWFhV27di0gIMDX19fLaFeuXDl79mxQUNDFixevXr169erV69evnzt3ztPTk+xAHRISAl0GHCc+Pt7b2xu/7uPj4+rqeubMmcDAQAgrhIaGRkdHY4/v06dPQ8fB39/f3d39+PHjISEh7u7u+/btA30YuySfPXsWm2hj2+vr168HBwcHBwdDE8jLyys0NDQsLCwgICA4ODg6OhofgGpDcHBwYGBgUFBQZmZmYmJidHR0REREVFRUXFxcYmJiWFhYbGxsenp6ZmbmzZs309PTU1JSgoODIyMjU1NTU1JS4uLi4uPjU1NTY2Njb9y4AVmH0NDQ4ODgkJAQbA6OXcsDAgLCwsLCwsICAwPd3NwiIyMdHR0XLlzo6OiIOff6GG1iCoUiOjp65cqVXl5ewcHBycnJubm5d+7cSUtLS0hIePToUXFx8cOHD+/du5eTkwP5qLq6urt372ZkZNy/f7+kpKSgoKCgoODp06d5eXnNzc34SkNDQ35+fl1dXVVVVWVlZX19fUdHR0dHR21tbXV1dXV19ZMnT0pKSqqrq5uamuA0FBUVlZaWlpaWVlRU1NbW1tfX19TUlJWVlZeXP336tLq6Gm82NDQ0NjY+ePDg0aNHVVVVFRUVkFYpLCwsKyurra3FARsbG5uamiorK9vb21taWpqamh48eFBSUtLQ0NDS0lJXV1dbW9vc3NzY2Pjs2TOcBjmTioqK0tLS8vLyyspKyLPW19fX19e3tLS0tbVB2KK+vr6urq6zsxNdGSUlJejBYLPZ0IyA2wGBfYgKo+zZ0NCACiefz29oaGhra+PxeE1NTQ0NDfX19bdv30YRUiKR4FSRbejs7ARbD4LEUISElAYJ+Lq6utBAgro82BzIbvX395PSPFxjpGJra2sRO0IrSygUIgGIogXIbLgEwqUm7ajo5x8eHm5vbxcKhcHBwc7OzrGxsWQ3CPrf1ATSGgVi4fqFh4efP38eyAhwPH78OEAT71y8eBG4c/nyZWjPoOfx7NmzFy5cwPbtly9fhu6hu7s7Xpw6derixYsnTpzAbvEQRjt9+vT58+ddXFxOnjzp5ubm7Ozs4uJy7NixM2fOXL58+eTJky4uLi4uLtCeOXfu3OHDhw8cOODs7Az4vnDhwvHjx/ft2+fi4kI2kt++ffuJEydWr179+eefb9u2bffu3T/++CM2sN+6dSukGbCZ+u7du/fs2QPlPvRC7tq1y97e3sHBwcHBwc7ODnulHz9+/Pjx48eOHXNxcXFzc8Nv7d+/H0IMe/fudXBw2L1796FDhw4fPoxOTAhJ7Nq1a8+ePbt37965cyfISAcPHnR2dgY519HRcf/+/fjW8ePHDx06hCO7uLgcPXo0KCgIf3V1dYVkP5LWr4/pjPvVEH+Kw+Hs3r17x44dEJjARvU7duxYu3bt2rVrV69evWrVqpUrVy5fvtzKymrjxo2gDyxfvnz16tUrVqywtrZetWqVubn5xo0b8Zn169cvWbLEwsIC9DjMAQcHh5UrV86bN2/27NkzZ86cO3euubn5smXLrKysLC0tZ8yYMWfOnDlz5sydO3fhwoWLFi2CZtWSJUusrKzWrFmzYcOGTZs22dvbr1+/ftGiRZaWljirNWvWLFu2zNLS0sbGxtbWdsOGDTjnNWvWrF+/nkxCGxsbyI5s27Zt06ZNmzZtcnBw2Lp1q52d3caNG0H3trW1xRUtX7585cqVuHBra+s1a9asXr163bp169evh5iWmZnZ3LlzFy1atGzZMnNz8xkzZkyfPn3GjBnz5s2bOXPmDz/8MGPGjMWLF8+fP3/BggWLFi2aPXv2/PnzzczMpk+f/sMPP8yfPx80QVzyd999Z2ZmtnDhwq+++mrp0qWWlpYWFhZz5swBU9DKymr+/Pnz5s1buXKlra0thN2WLl26aNGilStXrl+/3tbWdt26dRCjtLCwsLCwwAtcyLJly6ytrTEg69atwzvLli2zsbGZMmWKpaXlkiVLIG2J+7hu3bpVq1bZ2NisWrUKR1tqYrin1tbWZmZmixYtArN52bJlV69ezcvL0xp3fh02btBIZt3LuDdDxt02KBOJedO0K14YTOT/9EbhA8pE6pI0+hl+yn6jjMn4YeNO4fDSTb9lWgsj2QcSdxAvGp8hjU6ke560zuCwjx8/XrduHVFkQWhMTtX0ivRG6giOpjXuO6o3Cseamumb5My1JgKLGE+DcUcahA+mfyVNXnoTLVtyFcNGlXKdcU9hJG60P9UKfX3MtMnOdPzJHfzZ2wSjjIRLfAwHJMfRmxCKyFTXG5s0CT+SNlYwiJnOH9NbTGYUDM8h3iHZg2ETPqjpcSjjA0LuO2WSEKSNPe2mxzc9GhkZMq+IFg4iWTIalEkjKgnP9cb+RJ2RloqLMh3GYeP2NbTJRuGklo3Po/172ChrgoQA6VfHX5GsRO4eVRfEwiiZoqKFFCT6IgcGBpCsx2dQ0YahfEJ67Mmf0JLY29uLVCl6s/ABcq9xPgQNyHz7BU2gYaPMgekkIyNrMAq0EEQg/yVHoIyUcNPZaXpTSTZab+T/UiabW40wgh0E/igTdDb8VDrBYMRi8iaHw1m4cCFtbNlBa5jpccjcImU7MrnJ5RhMtvEztRGjN+KpHvGgkq+QHzI9T4OJKA45gWEjw4/84uvmSFI/ZSjSJqIYhufWuZ+9L9RPKeS0CZMHRQnK2F4+/HNMduqnIf/LzfR5MT0Z0wlPGRNt5PRe9Cvkop7/64ivkyOYAjo5yEtOmDKZt6ZfNJiwWke8/5LjELjEm4BLkso0PRRlfN6fv3bKWCAZcWTqucf837QRlwYjRCliphBJvQQlSZkJRmBoxK+aOo+0yUCbfmYE0Iww0xE3bWgwRQoyiORf00kDvKOMfi5tvNOmHiUmUHNzs7m5+YjxGgF55JEznXYjvmJ6+SSbTv90hpm+M+I4I16/aGSIv0wWBtroiZDPjLidr7yRu2AwGLD91osW1BF+Jfn6CHv+RpAJRv3crSSBxQgMHTYR+3jJPX3+mC/6JIGS55fMEbD4kiOMeEEbHxzKBCzIAJI3yViZngB5YXojyAvT5xRD9LMXSFx18qNkzTD9PLkuvZGnOGLQTM+EPK3EfTEYvTfygRGuCV6Q2jf+iyqf3ihK8H/wJU2dF9IOShnXQ9oE3UecATmtEQcccankT6a1S9PamSlAjBhuAtCm98/02p7/oZKSklWrVhmMexkPDw+jHkf/nI1Ylg0/9XxNL+Tlz+HzNmJyG34aNZte44hRNTXSI/KiO/hKmmnMS2zQZMNeckdeNPiGn0bopksvfoL+6TQmaDviDo64laa/Tj0HhYafKsiRz4zAYrxPFlHTyfZy5KVMJrnpz1HGh4s8/C86CP1T5xemM1EdpX+K0bTJk0WbeEsjxoRkHkacv+kHRgwpQRiC4DoT7dERL160Rj4/PuS/xK0B+JKon3zmec/jhShJJDro555q0+EeMUV+9jY8//XnzRQZiSgIecc0zHwep0wv7Hm/z3Q6QsycdGP87KmS12RFev4SiH/3IiPD+LOXaWrPu7EjrtT0rMgsNF3/XyujjSu3adxqOmKGn4tYqZ/68qb38fm78Px/TY/zs+/TP51vL/nYv3MoYpgtpGD1s1950XGon85k6rlomrhLv3iS5FvUc4BO/qs1bnv38ksbcdeo5/yt5z9PmXhR5CZSxieFNEiRKx3x4nkjKImzHfEgm0IZmXUvq968elZUVLRmzRo0wVI/XX5H2Ii5Qv3c1oCMMcbY62CvF0o+fvzYzs7OtLj5IhsBkYwxxthra68dSm7ZsoV+sQbti4xBTMYYe23t9ULJhw8fAiVJHv1FNWLT+JrxKxlj7HW21wslCwsLN2/eTJuUlf/NThoGJRlj7LW11wslKyoq7O3tKWOfwb9TvfnPnRxjjDH2u7TXCyXr6+sdHBxMO+ZehINMjZsxxhiDvV4oWVdXt3XrVsqkA0v30y0lGWOMMcZG2OuFkpWVlZs3b9YbRUBfUr1hjDHGGIO9Xij5+PHjjRs3mnJO/9tnxBhjjP3e7fVCyYcPH27atGkEp/W/fVKMMcbY79peL5TMzc3dunUrIWwy7iRjjDH2i/Z6oeTNmzcdHByIC/kaauowxhhj/1d7vVAyJSUF3Bv09BAJE8YYY4yxF9nrhZIZGRnbt28nwulEoo0xxhhj7EX2eqFkZmbmrl27KKPOBdlAgjHGGGPsRfZ6oWRGRsbOnTtHSHX+t0+KMcYY+13b64WSN27c2LZtG9mgjvq/iKcxxhhjr6e9XiiZmpoKX5JsJ8SgJGOMMfZye71QMjs7e//+/aQTaMROaYwxxhhjz9vrhZIZGRn79u2jTbaL+8WtHRhjjLHX3F5ZlKSf2wVXr9ffuXPH2dlZrVbTJlvU/rfPlDHGGPtd26uMkjRNK5VK0x01U1JSPD098SedTocNef/bZ8oYY4z9ru1VRklTnV2apgcHB/38/FxcXCiKUqvVw8PDTL8kY4wx9ov2KqMkqDUKhQIvBgYGcnJy3Nzc4EsODw+DfvPfPlPGGGPsd22vMkrSNN3f319ZWZmVlQVhCx8fn507d6rVaoPB8OzZM0Y5jTHGGPtFe2VREsWZgYGBhoYGc3NzkUhE07S/v/+lS5eQlIyIiBgaGmI6gRhjjLGX2yuLkoODgwBKuVz+3XfflZSUDA0Nubm5HThwoL+/v6ioKCIigvElGWOMsV+0VxYl0Qip1+u7u7sDAgK8vb31en1oaOjevXt7e3u9vb0rKirgbP63z5Qxxhj7Xdsri5KmehZtbW07d+589OhRQEDAkSNHamtr161bJxaLmd3BGGOMsV+0Vxkl0TFO03RfX9+uXbt8fX19fX2dnZ2vXbu2cOFCiuFxM8YYY/+GvbIoiWZywrGJjo52dXU9d+6cvb39unXrjh49igo4g5KMMcbYy+2VRUmCj2gd5/P527dv37dv37Rp05YsWfLkyROtVqvVahmGImOMMfZye5VREj2SJO62sLBYunTpW2+9tW/fvoGBAfxVp9P9t8+UMcYY+13bq4yS2PwLapIGg2HLli0ff/zx//zP/wQGBlLGhkqmesMYY4y93F5llIQaEEo0er3++vXro0aN+uMf/5iSkgKdC8aRZIwxxn7RXoiSer1ep9MNDQ3JZLK8vLyAgICEhITExMTr1697enpGRkbGxMRER0cnJiaGhYX5+/uHhoamp6fHxMSEhYUlJSUlJibGx8dHRUUlJyeHhITExMT4+fldunQpIiLCw8Pj2rVrPj4+ycnJwcHBoaGhERERsbGxUVFRvr6+V65c8ff39/Pz8/HxiYuL8/Pz8/f3x0/ExcWFhIRcu3YtLCzs+vXr+JOnp+fVq1eDgoK8vLxCQkICAwNDQkI8PT0vXrwYHR3t6emJz1y6dMnR0fHdd98dPXq0q6urj48PzjkoKCggICAgICA6Ojo+Pj48PDwqKiohISE+Pt7LyysoKCgiIgKnh9chISHh4eEBAQFBQUHXrl3z8/NLTEwMDw8PDQ0NDAyMjo5OSkqKi4sLCwuLjIyMj49PTU1NSkoKCwsLDw9PSEgIDw+PjY2Nj49PSUmJjIzEuYWHh2Pc4uLioqKi4uLiIiIi4uLiUlJSoqOjcTJkrAICAiIjIwMCAm7cuFFfXz80NERRFDjpJLfAOMiMMfYr2gtREv2GT58+tbe3v3DhQk5OTmNjY11dXWFhYWFhYUFBQW5ubmFhYVFRUWlpaX5+fmpq6r179x49evT48eOqqqrS0tKCgoIHDx48ffoUr6urqzMzM9PT0+/cuXPr1q3y8vKioqK7d+9WVlZWVFTk5OSUl5fn5eV1dHRUVFQ8evSorKysoKDg3r17hYWFpaWlJSUlVVVVz549e/jwYUVFRWVlZUFBQUFBQVNTU01NTV1dXXl5eVVVVXl5eWFhYVVVVXJycn5+fkZGRm5ubk5OTkFBwcOHD3Nzc5OTk4OCgtLS0m7duhUdHV1eXp6cnJydnX3r1q1bt249fPjw3r17iYmJgKeAgABAXkZGRlpaWkxMTHx8fG5u7r1795KSkmJiYhISEvLz8xMTE7Ozs+/du5eRkZGYmBgTE5ORkZGenh4fH5+enp6cnJySkpKUlBQUFIT/xsbGZmZm5uTkAD2Dg4OTkpJwhEePHt27d6+8vDwrKys2NvbOnTspKSk3b96Mi4vLycm5ceNGbm7ukydP8vLyQkND7ezsQkJCaKMhh8BU7Rlj7Ne1F6IkHjkPD4+MjAyapmUyGZgqPT09pDRMnk+DwSAQCDgcDr6l1WrVanVTU5NMJlMoFN3d3UqlcmBgQKlUikSigYEBhULR19cnEAgUCgWLxRKJRO3t7b29vdXV1SKRSCAQwIctLS2VSqWDg4MikUgsFkul0u7u7paWFjabrVKp1Gq1RCKhKEoul2s0Gqj78Pl8iUSi0+nw021tbd3d3Wq1WiQSdXV1tbe3q1SqlpaW5uZmhUKhVqt1Op1YLEa9u6+vb3h4WKPR9Pb2isVilUrF4XDUanVXV9fg4KBMJhOLxSwWS6FQGAwG/JfNZovFYrVazeVyJRKJVqsdGhpSqVRCoVChUOCc2Wy2Uqns6+vr6OiQSqU4iEgkkkqlra2tra2tYrFYLBb39vb29vZCExMiRkqlEjWo4eFhjH93d7dYLBYIBEql0mAwlJWVHT58GN9itoRkjLHfyF6IknhQT548yeVylUqlRCIB20+j0XR3d/f39w8NDQ0MDAwPD3M4HJqmJRIJCsf9/f0QA5dIJFKpVKFQ9Pb29vT0sFgsoVDI4/EUCgX+JBAIpFKpSqUaHBzs6+sbGBjgcrmAKiieAUwBE11dXRRFAey4XK5CoRgaGsK/+GlkIXt7e3HmFEUNDQ2JRCKFQsHn89lstlAopGlaKBQ2NTUpFAoejycQCPr7+zUaTU9Pj1AoFAgEvb293d3dUFRTKpUqlUqj0bS3tw8ODnI4HGC3TCbTarUAR6FQKJfLRSLR4OCgRCLp7e1VKBQ6nc5gMIhEopaWlt7eXrlcDrgEwgJ229vb29vbuVwum81Wq9XNzc2dnZ04Q41Go1Kp+vr6DAYDflStVuMXBQJBT0+PTqdTq9W4EW5ublVVVRgi0/7Q/9wMYoyxV91eFnF3d3cHBgZ2dXXBVWlra9NoNBRFYadWPM8ajQalZNOIj0CVXC7v6ekRiURKpbKzs1Oj0QwMDPT39w8ODuInenp61Go1XKSOjg6BQIAnHIAil8vhG/b09HC5XKlU2tnZCeQSi8WDg4NyuRyuolar7e7uHhgY0Ol03d3dg4ODGo1GLpdzOBypVAqcUqvVer1eqVTCd+vu7qZpmsvl0jStUqnYbLZcLkdlXCaT9fX1dXV1SaVSqVTa0tKCExgeHlar1VgD1Go1RVE9PT0GgwHOMhxbjINcLodDqtFo+vv7kTRUqVS4FhaL1dbWxmazIckBV1Qmk6lUKuKeo80T7iRxLQ0Gg1wux4APDQ319PScP38+Pz8ffjR8SUZamDHGfl17GUrqdLorV64IhUK9Xt/e3s7hcOrq6oAmeG6Hh4dBX8HjzeVye3p6BgYGJBKJXC43GAyDg4NKpVIgEAiFQgSbAwMDvb29CE6Hh4eFQiGLxZJIJN3d3fC28BqQIRKJ+Hy+VCrl8/lKpZLNZiMApygKUXlPT09vb29/f39fXx/Udnt7exFri0Si1tbWhoYGqVQ6PDwMB1an07HZ7Pr6epVKpVQq+/v7RSIRgt/+/n6dTgdnUC6XAzfh6opEIuCgWq1GoI3sAfxl+HQommNVkEqlWq22trZWLpezWKzGxkb44zKZrLGxUSwWK5XKnp4ejUbT19fX19eHJWd4eHhgYACe9dDQkFarxajCYReLxTKZbGBgAL+l0WgA5f7+/kVFRaYRN1CS6ZZnjLFfy34BJV1cXCQSCXaP0el0CEIRIJPdtQwGg1QqxYOqVCqBj/C2gCN6vR7ow2KxhoaG9Ho9l8slsTmiXYlEAsK1SqVSqVQURfH5fDibiDTb29sNBoNSqRQKhUqlEkgnl8sRuXd2duIcWCyWTCYDzHG53I6ODmRCZTIZzsRgMADoieMGSJVKpYimEW7DSPTa29vb19eHDKBEIlEoFPg5oVCoUqlkMhk8bjabPTAwgDMHLvf09GAk5XI5LhNJUnwR+AtE4/P5xBmHd0z8Sr1ej3HAoTC8cELPnz9fUFBAQJaJuBlj7Fe3l6GkVqt1dXWVyWQ6nY48nPBuED/iscSji7hyeHgYzp3BYMCbNE3zeLyhoaGmpiaJRAIP6O7du6jqACwEAkFzc/PAwAAQRC6Xy2QyELHlcjm8Njz8qP8MDQ0h6kToLRQKAdykIgSgVCqVPB6Pz+ejAq7RaIBfAoEA8IT0qFqt5vF48IiBYgjJgdGDg4MKhQJQKJPJ2Gw2Qmm8QFkJaUcOh9Pc3Nze3i6TyUQiEUVRbDabx+P19/fjAoVCIcSAu7u7RSIR/G6kXzG2QMahoSG5XE6AmCxI8DFxOzDsfD4/PDwcviQcUnLv/kPThzHGXgN7WY2boqirV6+iPK3RaPR6PYoGeK3VanU6HYl58XlSQzAYDMjZ4Z2qqqr9+/dfvnxZKpU+efLEzMyspKSkp6cH+T4/P7/169c/ePAgPj7+woULTk5OGzZsOHXqlEajEQqFvb29wC+BQMBisZBtBDbl5ORwOJxHjx6JxWISZd+/f18sFnO53MHBwZaWFrlcLpFInj171t/fz2Kx+vr65HJ5f39/Y2NjSUlJb28vEKqvr6+trS09PZ3FYiEoFolEbW1t8AoBcK2trbdu3YqJiWlvbycle4FA0NDQsHTpUjc3t6amppaWloKCgtbW1tra2uPHj2s0mtbW1ri4uEmTJqWlpWVmZjY2NiLeBwqLRCLTwgs8Wbi0BoMB4fbg4CAyjxqNBp/EEqVSqUJDQxmUZIyx39R+oV/Sx8cHnsvg4CBeaLVaOEEAl/7+/oGBAXTAkDcHBwdRQunp6WGz2Xw+f+XKlX/605/GjBmTnp5+6dKlpUuXuri47Ny5My4u7ty5c1u2bPH09Ny+fTvSdtXV1Ww2+/79+wKBAHlJoBVFUVVVVZ2dnXDWmpubFy9e/OzZs+joaBSRWCxWUVHRjBkzEI9zudynT59WVlb6+PgEBwfzeDypVMrj8VQqFZ/Pr6qqmjdvXlJSEurgUVFRK1eujIiIQL1Io9EolUoUlGQyWWdnJ5fLjYiIMDMzW716tZ2dXUNDQ3R09IIFC1auXGlmZva3v/3tvffeW7Ro0SeffPLBBx8cPHgwPT09MTHx5s2bFhYWb7/99t///vcpU6a89dZbBw8exJkYDIbe3l4UrAB/UA6Gt47RRow/MDAAjxIYSvaG7Ovri4yMZFCSMcZ+U/sFlPT29kZYjadUq9UKhUKxWKzX68H6IBlJ1GrwrGq1Wo1Gg4ccwWxjY+OqVatcXFwiIyM/+uijUaNGTZ8+fdSoUZcvX3Z3d7958+ayZctGjx69cePGxYsXr1q16sCBA+PGjXN3d8/JyYFPx2azr1y58uTJk4MHD548ebK5ubm8vHzKlCmFhYVlZWVtbW2xsbHW1tZXrlxZtmyZQqFISUk5cuSIpaWlt7f3pEmT/va3v4WHh5eVldXW1rq7u1+9elUqlSYmJr733ntxcXHx8fF2dnanT59OTU3Nysrq6enJyck5dOhQdnY2l8sViUQPHz68e/funj17Hj9+LJPJLCwsjh07JhQKW1pacnNzY2JizMzMCgsLHR0dd+/eXVlZWVJSsmLFCl9fXz8/v/Lycl9f3zFjxmRkZOTk5BQXF6PCo1AoNBoNauXI9hKnUqvVIoUKDx3JB4wtEBN/VSgUISEhDEoyxthvai9jKNI07efnh7IyYkCKolBdId4laYHGO729vSTiRqekVCotKirq6upavnz5N998k5aWtn79+smTJ9+6dWvJkiV37twpKyvbt2/fqFGj3NzcLly4sH79+osXL3700UcODg6HDh2ytLRsamrq7Ow8c+bMF198MXbsWBsbm0zy8LIAACAASURBVBkzZjg6OnZ0dKxevTolJWXSpEkhISHr16/fuXPnmDFjli9fXlxcvGLFii1btlhbW69evXrOnDkTJkwoKyvLy8v79ttv165du3bt2qysLLlcnpWVNX369M8//zw4OHhgYCAzM3PXrl2lpaXz58+fPHny4sWL8/LyCgoK5s+ff/To0cOHD6ORKD09/ZNPPsnPz4e/XFxc/Je//OXTTz99//3333rrLW9vb4lEUllZOW/ePEdHx7S0tNOnT3/yySd5eXknTpzYt29fTU0NRVEoPaFyrVarUddG4yeyrrgF/f398B9JbWdoaIiUuRiUZIyx39p+ASV9fX1FIlF/f79YLCayESSaRs0ELiRFUUNDQ93d3VAkw3OOFpyKigpHR8e3334bvuSHH3743nvvpaam/utf/0pOTt6yZcuqVavGjRtXUFCgUqk6OjpaW1unTp365MkTgUCwfPnyhIQEiUQyffr0kJCQ1NTULVu2WFlZff755wkJCR988EFGRsaiRYtyc3MPHTpUV1cXGho6b968urq64uLiTZs22djYzJ07d/v27U5OTiUlJdu2bXv33XdPnDixYMECJycnmqYbGhosLS1/+OEHFovV0NBQV1fn5OS0aNGiAwcOlJaWxsbGTp48GT+dn5+/d+/e7u5urVZ7+/btBQsWVFRUyOXy5ubm06dPu7m5+fj47N69e/Lkyffv35fL5QKBYNasWVOmTLG0tPzwww//8Ic/zJ07d86cOVOnTgW8yuVyLpeLRk5sv6PT6ZCCJI1WBoMBIwxHnsgGg900MDDAVG8YY+y3tl+IuD09PdFrLZfLh4eHgYAkF0mbsOIQEg4PD+t0OoCmwWDg8/lyuXxoaOjChQszZ84MCgqSSqVbt27917/+tXXr1k8//TQ1NfXixYsPHjwwMzNLSUmRSCQikaikpGTWrFnl5eV1dXWHDx+eP3++p6fnmjVrdDpdWFjYmjVrVq1aNX78+Nu3b0+ZMiU7O3vJkiWRkZFr1qxpamoqKSlZtGgRPMQFCxZYW1t///33Tk5OdnZ2LS0tzs7O48aNW7NmzerVq8PDw9VqdURExFdffbVgwYIff/yxtbW1qakpKSlp27ZtLS0tfX199fX1dnZ2y5Yt6+7u5vP5+/btQ8dPY2Pj2LFjHz16VF9fL5FI9u3bV1dXV1lZ6e7ufuzYMZqmq6ur7ezsDh8+LJVKGxsbt27deuTIkRs3bjQ2Nt67dw/1fYKDcrmcyBeZSqwjrMZI4n300hN1YQwIg5KMMfab2stQcnBw0MvLC1lIUjEArQUPLUATeTQwoCkTyTI81agXd3d3Hzx48NixY/fv31+zZo2Hh0daWtrYsWP379/P4XCePHkyf/78hoYGhJNFRUXz5s17+PChQqGorq5etmzZokWLXF1dJRLJjh07bt++nZ+fv3Tp0oKCgnHjxsXExEyePNnDw2PTpk1sNvvSpUs//PBDRkaGpaXlgwcPEhMT169fb29vD33y06dPT548+d69e8HBwefPn79w4cKqVatKS0uzsrIcHR137drV3t6+a9euzZs3X716tbOzMzw83NLS0sLCYsuWLffu3fPy8kLZvaGhYc6cOSUlJWq1urq6+ujRo3CxT58+7eTkJJfL29raoIdUUFDg4OBw5MiR5ubmtWvXenh4CIVC9Ehi4ZHL5UjdoopN8hWmbmNfXx9tVPpBooOiKDRaJSYmPnr0iPQGEeIN01XOGGO/lr0QJeG/eHt7Ey1bpVIJvQnwsvFYEuoIDFUdrVbL4XDQUYhqT3Jy8syZM21sbObMmRMSEtLW1lZWVrZ27dpZs2YZDIaMjIx58+aVlZU9e/bs5s2bgYGBM2fObGtra2xslMlkt27dsrKyEovFfD7/3Llz06dPNzMz++KLL7Zs2WJmZubn52dvbx8ZGWlubm5ubj5z5sw5c+Y8fvx49erVM2fORLx84cKFWbNmnT17tqamZsOGDStWrNi+fbuLi8u2bduKioqUSqVSqWxsbDxx4oS1tfWpU6eqqqqOHTu2cOHCzZs35+TkNDc329nZ2dvbb926Fa7xkSNHlixZUl9fn52dbWtrGxoampmZCUcyIiLi6dOncrm8qqrq8uXLy5Yt+8tf/rJ+/fo1a9Z8/fXXH3744aVLl+BIolMdCwxq2YSvjTFH5wA+iRdDQ0NSqRQNm+glCgsLe/LkCUFJ0lLOoCRjjP1a9gsR96lTp/h8PhQcQDck/zUN8YaGhsRiMTqEhoaG8NDCAwIxMTIyctq0abNnzw4KCuLxeM+ePVMqlQ8ePHBycuro6Ghra3N0dMzLyxseHk5ISFi9evW2bdvQAd7V1SUSiR49eoTAv6GhAWqVUVFRd+7cSUtLa29vz87Obm1tzcnJuXTpElQdeTzegwcPPD09XV1dExMTa2trb926VVRUNDg42Nraevny5ZCQkNu3bzc2NoKGyOVydTrds2fP/P39Gxsboczm4+NTXFzc0dFB03RRUVF8fPyOHTuKi4srKysdHByuXLnC4/EOHz68f/9+sVgcGho6c+ZMDw8PMGoUCkVCQsLVq1dtbGwmTpzo6urq5uYWGRm5aNGi06dPK5VKjDCBP+KMi8Xivr4+UM6RA4X/jiykWq1Gqhc8cewwXlZWRgo7DEoyxtivbi/TBKIoytPTk8/ni8XitrY2pM/Qv0LIywqFArlICH9BwQyN0N3d3dA3g95PdXV1U1MTEATEGPQtQmqstbVVJBJptVrUNFpbW0FV5nK5KpVKLBajsCuTybq7u0FlEYlE9fX1YrEYqjwsFksgEIBCDlaPUCiE6A7ORKfT9fX1QR2ju7ubx+PV19fz+fze3l6IBnV3d6NPHowgLper1WrBR+zr6xMKhaWlpevWrVu7du25c+dqampkMll1dTVkfiACJJPJoDAE4TW5XN7R0VFaWgoW9uDgIM4HHxgaGoKsUW9vr1KphA8OPx0jTFEU5JfgwPb39yPR0dfXB89ao9FERUVVVVWRRkuGnsgYY7+6vcyX1Ov17u7uePKrqqpYLBaQS6VS9fT0IFqE3CScx/7+fpVK1d3d3dPTg1wklBaBIJCDBKsPBEHgEU3TkHTkcrlQioRbBOa1TCbr7+9H5g5oiB5DAAocN6FQCBTTarUCgUCtViuVSi6Xy+fzOzo6IN2IzMDQ0BCyq52dnUqlsqGhAUqR4M80NjZCggz0ysHBQeRk2Ww2SSC0tLRwOBxkJwUCQV9fH4fDAa7RNE3E08CuUalUCoWioaEBjEY0yUOsCNpo0MFUqVRIZYA+xGaz2Ww2XHUsQhDmgP5FR0cHOJTgNfr6+tbX15NbxkhMMsbYr24vREm0pJw/fx540d7e3tHR0d3djS5r9JATzTQkMUlbH77b19cHojR8QDhlQqGws7NzcHAQGrcgMgJoIOcDrotAIIC3Bb0foVAIQIG2Y3t7OxqzcXAOh4POcwCxRCJBgWVoaEggEGg0mpqaGiA48AtIKhaL4dii8VCj0bDZbHh2Mpmsp6cHGpQ0Tff09PB4PFDLaZru6OiAwwsUIzJxWq0W50BUOOHYoupC0zSfz0dSAjJLNE3jk3AAwVyC2q5IJIJjThKUaJAkJHfoCalUKi8vr6amJoKP5N//4BRijLFX3F5WvaFp+ujRo4gc8SRDKRK+JCEy83g89E4iFwnpB4lEglARsKLRaKB6C51tHo+HYyK/aTAY1Go1h8OBvjfpPQKUiEQiwI1YLNbpdOitQcoSnUMImaHvq1ar5XL5wMBAQ0MDXDCgHkJU9IQLhUJ4u3V1dRRFocsHOAulSwA9qUfBpUU8i9HQarUQZFOr1Xw+H2sD1CRxcCQT4UTjomQymVKpxCXjAoGbyE6yWCz41BgNqVQKWXhcLxxV0lOp1+uFQmFzczOPx/P3929paWFQkjHGfjt7WcStVqsvXboEaUi9Xg//Dg4Unkb8F0kx0kaOEgRlVBWiaVogEEA+Eq9RAurs7Gxubu7t7UVTOmRyILwGd1Kj0eh0OoVCwWaz8SekGoFBCOGFQiFgEZV06DaSD5DOJKQp8TGZTIYObT6fX19fjyMjbBcIBFBBR08iXFrE/sBuwCUqJ6RgAl04ZGahyoERg6YGi8VCXlUqlUI3pLW1FReLcSNLApvNRq84EpdAT4VCQToH0IyFao9IJKqrq5NIJCEhIXV1dTgZ0pgFgP5PTSHGGHvF7Rdq3G5ubhwOh3AQe3p6ZDIZn88XCATIIZIWaPQAIgxHQx/ydP39/bW1tUAZbJMAOXEE40BVtVoNvR8InUFBEqq3SF+CugdE43K5QEbgEY/Hw+fVajXKLNhkBrKYUqkUyKhUKgE6QNuenh6QfOCfgkANb5QoTeCsiB+Kwg7ZfgcZTHSP4uvkrKRSaU9PD0TFUc7G+9iPAZLvgFqcnkQiQY4SaV+yQoDxiUoO/oqlCBlMsVjM4XB8fX2bmppGoCSzgy5jjP2K9gv73ri6uiLvJpFIOBzO4OAggkE8k1CchaIaXEVErGiT1Ol0fD6/r68PlR8QTsRiMbaaQaWboqjh4eGenh5Uw8l+L0BkVIGxWQJQBqUMBKFcLre/v7+/v7+lpQXwBxVxVE4AeUgvSqXSrq6u6upqiUQCNSCpVNrU1NTe3k6qz1AXR/IUQTeq6nK5HC4t8glkJx+cG6SDTDtGMXRESEkoFA4NDQmFQlSooBQ3YDRoZfJ4PNTEUZUiasdwSHk8HvbVATiiyq9QKJqamnp7e728vFgsFhEZIe7tf24GMcbYq24vREn4Ix4eHq2trcAFFHyxuRUIJAhUsc0AJDCwswIgAM2SGo0GPiA2WuBwOBKJBIUIwC5cMBSmEUGTPSFIMI4oGJEp0crFvlroAULxR6FQQCoCvdkIkGUyGXGyIPqNbCCQHcLpIKS3t7fjNCBCAXlHCKejdg+3jmxYptPpkD3Ea/wuilGtra1QaROJRDqdDjujYdMenBgcXh6PR1EUchcCgQAMboywXq+Hv4miExqztFptfX29RqORSCRIzp44cUImk1EmbUBMjZsxxn5dexlK0jSdnZ3t7OyMDaPv3r2bkZGRmZkZFRWVlJSUkZGRkJCQlZWVkpKSmZmZkpKSkZGRkpKSnZ2dnZ1dUFCQnp4eHR0dGBh448aN1NTU4ODghISEnJyc7OzsxMTE0NDQ+Pj46Ojo+Pj41NTU1NTU8PDwwMDA5OTktLS069evY7frjIyM1NRUvAnDryQnJ9++fTsjIyM4ODg2NjYpKSkzMzM7OzsnJyclJQV7bUdGRt64cePmzZtZWVnY3jolJSUiIiIlJeXu3btpaWmRkZGFhYU3b968e/duQkJCeno6jn/v3r309PTHjx+npqamp6dnZGTcvHkzKSkpKysLG3OTN/GV3NzcjIyMjIyM/Pz8goKCW7dupaenp6SkxMTEJCUl5ebmJiUl4Rqzs7Pz8vKSk5MzMjLu3r2Ld8hoZGVlYfPutLS0rKys9PT027dvp6Wlpaam3r59Oysr6+bNm7m5ubdv305KSvL09Dx9+vTVq1efB0dkMP8j84cxxl59e1leEjreWq2Wx+NlZ2fn5ubGxsYmJCTcuXMnLy8vKSkpPj4+IiIiOjqa4EtSUlJcXFxgYOD169evXbuWnZ2dmpoKKExISLh27VpaWlpcXFxwcLC3t3dUVJSnp+f169ejoqLCwsICAgLCw8OTkpKSk5OTkpICAwPT0tJu3rwZFxcXExOTnp5+69attLS0hISE8PDwK1euBAcHQ+bWw8Pj4sWL/v7+4eHh4eHhvr6+YWH/n703j4riWteHz7r3nnXvysm652adnJPkJDGJMSZRExVxQhAFRZDBARQEQUFxQMWIOKNEHMB5BARUkCCIICgoDkwCCg44IKAgQ3fT8zzPXVXfH+/X+1d0I4ITaOr5g9VU76p6a/feT73TfndyTEzM7t27k5KS0tPTT506FR4ePnDgwM2bN+/YsWP//v0nTpw4fvx4UlLS+fPn8/LysrKykpKSMjMzU1NT09PT8/Lyjhw5curUqcOHDyckJJw+fTo+Pv7IkSPx8fGJiYmJiYknTpw4ceJEUlISfEhISEhKSkpMTExJSYmPj9+9e/e2bdu2b9++bdu2rVu37tixY8eOHVu2bImNjd2yZcvOnTu3bdsWFxe3Z8+evXv3bt++/ffff9+1a9f27dujoqKioqLWrl0bHh7++++/79mzZ//+/fv27Ttw4EBycvLhw4ePHDny22+/eXl5rVq1ateuXY8fP0ZlMlCmJMrNeoejiAKFDxnd7ehAmOtWQNwAFtWgfVNRXQaULQhZk8j0g7XJ4KzEzY5OwrxyEZ1FLoGDQrRowoPZi/YFhIQYRASIHWDzMhS7QA3Qv7W1taGhoSwWCy5IFoAgVWJHShm6FAiDCj6S9/8hzGsBUZEek8mEivrAt+hfyOZBG3uhaxoMBvJGYDiOI/8ASkiCRHfCXHsJvoWsVeg0CEARJFAsSYHCm8ILWfJ9B5lncRxvbW2dP38+LCVExikVC6ZA4f0C0RW6bNDz01+KD5YlLYzQlpaWefPmQRUJ1IPUqmcKFN4vvJQlX+F0iiX/f7P36dOn3t7eMpkMOfKIzpVrKVCg0P/RPZ3h5on/Io8TxZJdAAjRYDA0NDTMmjVLLpcDM5K5sq9lpECBQk+B2ND6IGGOVUB44A3e9INlSYLkl8QwrKWlxd/fX6lUwkuGYkkKFN5HWLAkMhmRImkyA+sKr3bTD5YlcXPBDhzHCYKg0WgLFiyA6DZOiuD3tYwUKFDoBSwsa2tCpFiy1yDMuUr19fUzZsxAOTeIJamMGQoU3iN0qTZ2z4yvjw+WJZFBDejo6Fi8eHFfC0WBwp8FLw2J9PxSr68MviY+ZJZEIWyCIFgsVnBwcF8LRYHCnwVviiJxiiXfHpBZDX95PF5QUFBfC0WBwp8FPaTInnAfxZJvC4R5bSL8FYlEFEtSoNCv0EPuo1jyLYK8FF0gEFAWNwUK/QQW4ZGeN3434lngg2VJtPkqxHDodHpISEhfC0WBAoVOrNeTDHCKJd8W0BobKORTW1u7cOHCvhaKAoU/C16eX0NK5en5pd6N8Bb4YFmSnDSOYVhDQ8PatWv7ViQKFD5IvFrk+j3Cn4IlcRxvaGiIiIjoQ3koUPhQQabIvlL33io+ZJaE4rXwuaGhYc2aNX0tFAUKHyDI62H60C5+e/hgWRLHcQuWDA8P72uJKFD4AEFWJCmWfM8ALAkx7vr6+rCwsL6WiAKFDxDWLPmBEeWHzJJo9TtBEE+ePFm6dGlfS0SBwgcLrHM9nr4W503ig2VJwrzjDbDk48ePFy1a1NdCUaDwwYJiyfcPYAXA5oJQOW3lypUWtsCHZxpQoPDOQDaurXMh3+pN8c71JS3k6S1eetMPmSVRtQsMw4RC4YoVKyyyuj7sJC8KFN4q+sQFSWZJtLGzBet1k6ne85ZkfMgsKZFIoNoFjuPPnj3z8fGxSFmgWJIChVdG37IkTiLK3mqIFkT50pt+yCyp1WoxcyZQaWnp0qVLX03fpkCBgjX6A0tiVls49Oo6PTzlQ2ZJcidev359w4YN0JVoQVUP3yQUKFCwRp+zpIUY6Kue24h/dpaEjcDA4tbr9WVlZVBf8nVqJlOgQAGhb1nypfO352WAX3rTD5YlQWeUSCQQw7l58+b8+fOJzvsK4aSEWAoUKPQK/YElu6G/bliyt7P+g2VJ4MHTp083NDRgGFZQUBAREUEQhMlk0ul0arVao9GgjXEoUKDQW/RbloQ23bNkryb+B8uSoEgmJSUdPHiQIIhr165t3boVDubn52/atEmhUBAEYTQa+1pSChTeG7yyOtY9uiTcLiKtneM26N9uGBDrvCGt9SP8qS1uMLRFItHmzZuVSmVFRcX8+fMNBgOHwwkICCgoKMAwDHyXfS0pBQrvDaw56I3okr1VS7thSeuWFEt2B71eLxaLd+7cqVarS0tLweJOSUmJjIzkcDigk1MxbgoUXg1v0OJ+UyzZTcsXUeqfmiWVSiWQ4OHDh4VCYUlJSWhoKIfDOXbs2IYNGwjzrmGULkmBwivAmn3eyNVerX2XhrZ1S2hAseT/g16vJwgCw7ADBw6kpKQUFBSsXLmyra0tODg4KysLsSSlS1Kg0Fsg6unhCr+eX5B80NrbSPSgkGU3HkyKJS0BCzwJgqiqqlq4cGFqampYWNitW7dmzZolFApxc6qQXq/va0kpUHhvQFYhe7i3V68uSz74CixpreGSKZJiyS6AYZjRaKTRaNOnTz969Kifn9++fftOnjypVqsJ8w60b8ReoEDhTwKKJTsBrmI0Gg0GA0EQOp0OMQscAUXM+hlgZ1eis+MPPR4cgeAyuYvR1cjXhJuCSgjASGlQFqKi5Edoj0iQIAh/f/+wsLB58+Y5ODjcu3fPYDCgpYpISPJlyc8Ii8FfdPcufkYz0BWsz7W4HboOtMFJ24gTBKFWqy3OhewlwrwE86W/MQUKbwqEeV0vmm5vz2fVDXXindnNYik3gNwSHeny+oRV1N7ivi9kScR0GIYBW6lUKsRuMFGB0aCGI5mw4a6I76CxwWAwGAxwKa1WS3SmP8LMj+jxTCYT3A7dBar74FbcBNdHfAdX0Ol0iGTDwsJcXV1Hjx5tZ2d39+5dCxYzGo1Go5HcxV1Sm0UyAU5KMkCNUSknRGTQ3mQy6fV6+KvX6+F2Op3O4grwdHq9HrRgWFup0WhADKPRqFarIc2TML9pCCr6ROEdAo1zRCL9nyV7df3esaRer9fpdGhKq1Qq3OzLA06EDxYpSOQnIb9w0FORnwFldMMRoE6yuLjZasY7kyB6BvQt6iw4DlIBMWEYVlJS8tVXX/3P//zPyZMn5XI5MC+00el0OIn1yPLA08EdgbPIPwmSwUIkcm8gIXGSNo0uq9Vqyd+iK1iotzAogfHVajV6NNTJ3YwDChTeOCxYEntr1kxvWbKb9kRXpW1Q+xedi9CdxY2ZtUgWiwWkiZtnu0aj0el0Wq1Wq9WClkdmTCQcTGbcbAUjgJYEDeAW6DOy8a1PgTaY2ZTGrOxfpHZhJGtaq9XSaLRhw4b9+9//LioqEovF6CvMrHWC9ke+OMgMf5VKJdKskVaIqBMza+ymziCLAR2CdFvsxdY3aoBhmF6vNxgMkNJEPgsnOS56MtooUHhTIPNIN7Typu7VQ5bshuPeOkuC/nj37t0dO3Zs3bp1wYIFISEhwcHBwcHBv/322+bNmxcvXuzu7r548eLg4OCFCxcGBwcvXrx44cKFAQEB8+bNCwgImDVrVmBgoI+Pj7e3t7+//8yZM/38/GbOnDl9+nRnZ+dZs2ZNnTrVxsbG2dl50qRJkyZNcnBwcHV1dXNz8/b2HjdunIeHh6Ojo7Ozs5OT09ixYx0cHNzc3Dw8PDw8PFxdXV1cXKZOnTp16lRPT08XF5fp06dPnjzZw8Nj7ty57u7ucCQ0NHT69OmzZ8/+4osvvvnmG1dX14CAAH9/f19f36VLl86bN2/WrFmLFy8ODQ1dtGhRUFAQPKO/v39kZGRgYGBwcHB4eHhoaOiCBQuWLl26ePHigICAwMDAxYsXL1myZOHChf7+/v7+/gsXLgwKCgoMDAwKClq4cOGiRYuWLFmyaNGigICAxYsXBwUFhYaGrlixIjg4OCQkxM/Pb/bs2XPnzp09e7a7u7ubm9uUKVM8PDxmzpw5f/78BQsWzJ0718fHZ+bMmQsWLAgPDw8ODp4/f/6MGTMCAwNdXV3nzp0bEhICYuTm5hKUxU3hHYJsGJne8v42vWVJ6zZkFcT6UlhX6FKSF7KkUqnU6/VpaWmTJk1av359WlpaVlZWUlJSUlJSWlrajRs36urqKioqMjMzr169eunSpdzc3Ly8vIsXL2ZmZp48efLKlSs3btzIz88vKSnJz8/Pzc29du3aqVOn0tPTU1JS/vjjjzNnzhQUFOTk5Bw9ejQ9Pf3kyZOnT59OSUnJycnJzs6+dOlSZmZmUVER3Dc7OzsjIyM/P//ChQvnz5/PycnJzc09f/58RkbG6dOnMzMzU1NTMzMzk5OTMzIyLly4cOrUqdTU1Nzc3Ozs7NjY2Li4uGPHjiUmJsbGxiYmJqampiYmJiYlJYEM58+fz83NzcrKSk1NTU1NTUtLO378+Pnz5w8ePHj8+HF4nISEhJSUlOTk5ISEhMTExLS0NLh1cnLyyZMnU1JSEhMT4+PjExISkpOTU1NT09PTU1NTjx49evLkyfj4+NTU1JycnLS0tPz8/Ozs7D/++OP06dPp6enHjx9PTk4+ffr02bNns7Ozi4qKiouLCwsLCwoKjh49evr06fz8/PT09MOHD+/YsSMtLS0zM3Pp0qVbtmw5evTosmXLbG1t8/LyXmkEUqDwKiDbiygE+pbu1XOWtG5gYWX2/PpdMmZ3mUAEQURGRj558gSsaYFAgNxhLBaLwWAolUq0t4xWq4XPGo1GKBQiPxpBEAqFQiKRYGb/mlAohDYymYzD4UBjgUDA5/PpdLpEImGxWDweTy6Xa7XaZ8+e0Wg0Ho8nEokIghAKhRwORywWg9mrUqmEQqFer1cqlSaTSSgUArmzWCwajUYQhEAgkEqlYrFYqVQymUw2m83hcAQCgUgkgugQMpnBvQCPAGLLZDJwlaLqQXK5XCKRCAQCmUymVqvVajVEwPV6vVQq5fP5bDabzWbzeDyBQADSisViBoMBzygUCoVCoUQikUgkQqHQaDSKxWL0QgYvMJjYYGULhUK4lFqtZrPZkDzAYrF0Oh00uHLlSkJCwssGGwUKbwzkOMT7wpLoOhaidnm8dywJZLF7926tVtvW1qZSqTgcDtojASiGw+FAY+BEcriWMIfChUIh+C7hX5VKxWaz6XQ6WPTQXqVS8Xg8JpMJPIKbo8N6vV6r1SqVSpVKpdPpVCoVQRB6vV4mk0kkEpPJxGKxpFIpyqL1pAAAIABJREFUQRAMBoMwO/5kMplKpdJqtUCsPB5PIpFwOBwejyeTyeh0ukgkotFoCoUCuU2RbxS8kPCMLBYL3JEdHR3wrU6ng710wIMpkUiYTCZBEGw2WyQSAcUDsxMEIRKJlEol0KXBYFCr1XK5nMvlSiQSLpcLBMrj8YAHuVyuSCRSqVTgfzQYDFqtFmgRhITRyWQyORwOQRBarVav1/N4vK1bt5JTjt62EUSBwjuDqfPOAmTdECNla4IOZz3ye6JOWrR80b26Y0mTyXTw4EGY4UTnBEDQvAQCAWJGlFYJjAMpLyaTCSK5hDn+IBKJYLkLQRAKhcJgMAgEAtCMEEeA1mYwGGQyGdwO6bAcDgdYjE6nGwwGjUbD4/EQjxiNRnLyENCoXq+n0WhqtdpoNMLpCoUC6kvCo0G5SYjmw2+jVqtBQhAMNFm5XK5Wq/l8PkEQfD6fyWQKBAKxWCwWi4E6mUymwWAABuRyuUDHEBQCydva2qRSqUAgADWZzWY/f/4c6gSrVCrQMS2yLEH7hhcGKOx0Oh1+Dvj9YmNj5XI5WkFEdhtRoPBeAyl6XTIXZrXjDVkBtD7ldcToLl8Sx/HDhw+jvDwAmKig5gCX6XQ6lAgJTEd0DiLDk4D1KhQKYZJrtVqpVCoSiQQCwdOnT7lcLkSogXpEIpFGo5HJZCwWSyAQ4DgOZMFms8EmValUGIaxWCyxWAwSAuUJhUJ0d7VaDaocWN9Go1Emk0mlUjabbTQapVIpZl6kCI9GDnMDY4J6C+qqVCoFyZuamghzuqLBYABd9cmTJxiGqdXq1tZWkUjE4XCAChHVAj/S6XS5XK5UKqVSKbgd4DNY2dCfwImIJVHIGzeX8FCpVPBBLBZv2rRJKpUiHR+ND0qjpPC+w5olLb7CSAvJ0b8vItbXEaM7lsQw7PDhw6BYQRoQjuMymQypXZAMhOM4UjbBiJbJZCAueAnBDjUajfABnHrgBJTL5TQaTSaTKRQKDocDTr3nz58LBALQ4Gg0mlar5fP5DAYDDF6RSCSVShUKhUgkam9vB18e5FqLxWKtVqtQKMBlqdFoBAIBuDXBfcnn84GXwcLV6/VAZ+DfBLsetE5wpEokElA8eTyeWq1WqVQikUgsFvP5fKlUqtfr5XK5XC4HTu/o6JBKpVwuVyqV6nQ68J9CMwaDodFoNBqNXC7X6XQKhQK4UiQS6XQ6Ho+H3LuQVoUyjeBnhr6CNxNykmo0GolEcujQIZTBDj8Q0a3XhgKF9wXIMLJQIa2Bxjyyu3vFksQLgG76Eov72LFjOI6Tk/XAuIN/NRoNuM/ADwhHQL0CJQg8kgqFQiqVQjo3ANjEZDJVV1cnJyczmcza2trNmzffvHlTrVa3tbVxOByDweDn59fW1iYUCp88eXLv3r3Y2NgVK1bU1dWBgsblctlstlgsfv78OcRS5HK5RqPhcrlMJlOj0SgUivr6eh6P197ezmQyQesEVoKH4vF4SKFjsVhCoZDP5wPhqtXq+/fvq9VqsVgMISawoJcsWVJZWcnj8ZRKJcRqmpqa9u/fD1GaxsbGXbt2qVSq6upqBoMhFotBxQZhFAoFj8fjcrngSYD+wXFcKBSCMq5UKiUSCYR0QAbQbaVSKU5SEiGSBq+l6Oho3MyMKF/99d+fFCj0B5AJq8u4CpnUMFLmI94bv2SXzEv+9iUseeTIEaMZ5LuC+wxchAqFAoiGMEeHIXMbJ61nkslkcrkcfHNgU4NHMiMjY8GCBVKplMfjjR49Ojc3F9x/Op2OTqe7ubkVFRXt2bPH3t5+yJAhkyZNGj9+/Pnz50FrA8NWJpO1tLQA5SkUimfPniUmJtbU1BQVFT158uTRo0csFquoqOjYsWN37twBryLofWKxuKWlRSgUQpBHLpfLZDKBQAAxmaysrKioqNLSUg6H09HRoVAo7ty5I5FIFi1aFBoaeu/evdzc3Pj4+Js3b3I4HA8PDx6P19raeubMmUGDBpWXl6enp+fl5dFoNGBek8kEURrwQoK6CrzJYrFAxYYUcZPJJJfLoev4fD5E85F1bzQaQVrCvMozPj4ejQyLzHMKFN5rWKh1PXE+WiiY74IlCYI4duwY6DtoMTVh9gASBAFql1ar5fF4oBxBHANi36BGoVMIghAKhaDuCYVCJpO5evXqQYMG/d///V98fHx5efmXX34ZFxc3Y8aMdevWicXitWvX5uTkREZGAtfQ6XSTyfTw4cO7d+/S6fT6+npIRaLT6aDPcrlctVpdVlY2YcKEa9eubdy4USAQsFisJ0+enDt37ueff3727JlOp6uvr29tbRUKhU1NTYcPH+7o6GCz2aBgAtELBIJdu3b9+OOPvr6+gYGBdXV1CQkJjo6Otra2EydO/Pjjjz/66CMbG5vPPvvso48+8vHxKS0tvXLlSlNTU2ho6IgRI/7617+OHDny448/DgkJefz4MZj2BEFAXB4C3KBWczgc8GZApBseBOqrg0rIZrMh4g/OF5RghGEY9DCGYVFRUWT9EY0ME7VykcJ7DmuW7FJVJKzyeyySbV5TjJez5K5du+Bf0FwI8+pjsBYJUugD9B2FQgGKJyQbAu8wmUzkO2Cz2aBAEQRx7dq1TZs2TZ48ee/evaNHj/7LX/4yYMCA//iP//j000+jo6MPHDjw22+/2djYnD179uDBg5s2bYqOjvb29t6wYUNeXh4YwgwGY9++fc+ePcvNzY2KisrLy6urq3NwcMjLyystLb13755IJIIqvIMGDWpra2MymWlpafv27Tt06NDJkyd/+OGHhoYGoVDIYDAgJ1wqlXZ0dAwaNCgmJubZs2eOjo5r1qzJzs7Ozs5OSEj4/fffv/322/Xr12/dunXLli0hISHp6el79uxJSkq6efPmrVu3oqOj//GPf2zZsmX//v3Z2dngBgWDGsx8IGihUNje3k5+3YHaCI4LUCqhe02kkh+42aYG3yXQ6N69e19zEFCg0FtYK1xv8JpkVRG32riGsAK6Qjd6Zfe37vIUrOdZ5YcOHQLlBWWooA8wyWFWgxIEzjXIEEIZiARBQAwHvoXgcktLi1Kp5HA4586d+/LLL0+fPn3x4sXx48eHhoZOmDBh06ZN9fX1ly9f/vrrryMiIqZMmTJhwgRfX9+//OUvn3/++axZs3755ZempiYOh3P58mV3d/clS5Z8//33v/zyS2BgYHV19ddff52SkmJraxsdHZ2YmGhnZzdgwICRI0eWlZUtWLBgxIgR33//vb29vZub20cffRQfH0+n01etWuXp6TlixIjVq1dnZGSsW7euvr5eIBDs2bNn8ODBYHfX1dXl5eV99NFHAwcOnDRp0ieffHLu3Dk+n//48ePBgwcnJyc3NTUVFRX9+uuvpaWlWVlZcXFxIpFIoVBwuVylUsnj8cRiMZvNbm9vh2g++BYgsM7lciGvnryWnDBnAiiVSnD4SqVSmUwGuUdarZbD4fz++++9H5AUKLwW3jFLkonyRRSJ9wlLQoz7xIkT8JmcwEkmTWBDUCH5fD5oQLCyBe4NgWOFQqFUKvl8PjQTCARCofDhw4fOzs5Tp079448/vvnmm7/85S8HDx785ZdfDh8+XF5e7ufn9/XXX586dQoaCwQCGxublJQUFosVGBi4ZcuW9vb2adOmrVq16tixY+np6UlJSYMHD66srPz555+vXLkyePDgrKwsV1fX3NzcmJgYGxuboqIiWAR58eLFiRMnrlmzZuLEibW1tfHx8V9//XVZWdnGjRs///zz33//PTk5mcvl0mg0Go3m5OSUk5PDYrFaW1sTEhKOHj0aHR3t5eX1448/Xr9+HRIw7ezshg4d6uDg8OOPP3788ccjRowYMGDAf//3f1dUVNTW1rJYLAzDIHNerVbTaDRQsVksFuiJMpkMDHPIc8LNwTEUAUOvHHgJqVQqhUKh0WiUSmVUVFQvRyMFCq+Ld8+SCC+iSLxPWBKoMDk5GUw8HMchAQgUHLlcbjJXTgRtEegP/JVyuRz4FAIsQJGQ8CgQCNra2giCaG9vj4mJmTFjxuLFiysrKzdu3Dh27NiVK1fOmDFj69atxcXFBw4csLe3Ly0tJQjiwYMHjY2Nw4cPT09PF4lEqampLi4uGRkZw4cPz8jIOHPmjL29vaen58CBA2traz///POdO3cOGTIkLS3N29s7Ozv79u3bn332WXV1ta+vr6urq5OT0xdffLFu3bopU6Zwudzo6Ogvv/zSw8Nj2rRp8+fP37p1a0JCAixkbGhosLW1vXTpkkQiaW5uDgsLO3bsmEwmi4uLGz58OER+kpKSfHx8rly5kpOTM3v2bBcXl9u3b+/fvz8vL+/58+dsNluj0YCfAbkmIPGIyWRCvEWtVkPykEKhwDDMaDRCQhKkiyPnBljiaOiAr2P79u29GIkUKLwJ9AeWtL5CH7AkGNdHjhxBHlOL5YloBTQoOJi52hhkfcMVuFyuVqtVqVSge0IOo0gkamtrk8lkIpHo7NmzsF3XjBkzDh8+fPny5aCgIAcHh+XLl3O53KlTp2ZlZfH5/OfPnz98+NDe3r6wsJDP5/N4vIiIiFGjRh06dOju3btz5szx8vK6ePHiqFGjMjIyRowYAeGa3NzcuXPnpqSkhIeHf//995WVlePHj9+9e3dxcfHcuXNXrFgxefLkp0+fFhUVTZs2rbCw8NixY5GRkSdPnjx27BgsGC8vL3dwcMjMzKTT6cXFxcuWLQPTe9myZQEBAY8ePWpubj537lxUVNTNmzdDQkKWLl2alZW1c+dOf3//+/fvQ/gF0kKVSiUkqEMCJjyFQqGArCAU4EaF4zCrfElYqgTdjuM4UCrFkhTePd4NS+Ivpq0uxegDlgQVcteuXRCNQZUdUFRBIpGAekiQKpPDxMbNYVloDLnZYCpC2jnkdT969GjatGkjR44MDAwsKyuDkE5NTY29vX1QUFBHR8eIESOKi4vlcvmTJ0+cnZ0nTpzY1tYmkUhaW1tramoOHjwIuT51dXUBAQFLlizZvn17UlLSqlWrsrOz4+Lizp079+DBg5UrV65bt27Tpk137tz5448/fH19Z82atWrVqoMHD2ZmZpaWlspksoaGhsDAwG3btnV0dBQXF3/xxRepqalMJnP58uUrVqwoLy/PyMhwcHC4detWcnKyi4vL/PnzGxsbQT0sLy/fuHHjhg0b/vWvf7m6utrY2IwYMeLXX391cHCg0WhPnz4FXZtOp2MYJpVKm5ubIbWIw+FASU3INscwTKVSkRV26EDoOnB6wKsLPkDn79ixo4ejkAKFN4U+YcmXtu8DloS5umfPHsJcdheuIpPJQFuk0+ngjgQDHDXQ6XQikQg3ZwIZjUY2m83n86Fwg0QiAbFYLFZzc3NZWVlsbCyPx4O6FZBWLZFIzp07x2QyT5482dHRAZlGd+/ezc7OZjKZUC6ovr4els1wOJyWlhY2mw1rHAmCEIvFXC4XaknAwmdU9sJkMjU0NPD5/IaGhtbW1vr6elj9QhBEfX09l8vl8XgdHR0LFixwdnaOiIiYO3dudXW1Uqm8dOlSdnZ2e3t7U1NTfHx8Y2MjrJ6k0WgSiaSyspLNZp8/f95gMEgkkqamJjqdnpOTo1arQYWEOh0oMA0JPdBLsMARPBXI/4ioEA7i5rVPBoMB4uYYhkGch4pxU3j3ePcsCf+SDe1+wZJw8q5duzAMI8yLkdvb25HmyOFwpFIpeccbHMch2I2oEFZSi8ViSF0EsxHMbZlMBt46Ho8Hl4IjfD4f8roh7NvW1gYVJcilfWDdC4vFamxshNMJgoBbmEgV3iAREnJxBAIBm80GdlYqlRAwgUXf0FgsFnd0dMA6oqamJjc3t5CQkFOnTkml0qamJljeA3dvaWlRqVTQXq1WM5lMiEdJpVImk4ky3mEFOqT4wHpwk8kEae3wUgEeRNq3Xq+HMkUYhpnMe4WD8xfMcJN52zV4GWAYxmQyIyMjXz4AKVB4Q3gFDnodvIgKX0RnuBVX9gQvPeUl+ZL79++HDzCZIR0a0lCANVB5RzgF3I5sNpvBYECaCxSRBO2JIG3M0NzczGAwoOQE8AiLxYL10VBiEgx8YEY6nc5gMCBGzGazoTYEjuNQm4fL5ULMF3x8LS0tsIKbw+FAHSBYZw0sg8o7cjgcDocDZR9FIhGfz2exWHK5nM1md3R0cDice/fuQaanWCzGMAz4jiAICEZBSQ6CIPh8PqzaFolEaA/b9vZ23FzoDEiTx+OBGgjFhFC5TFgJjvbGQD+YybyVGEbyWMNCTNB/VSqVQCDYvXt3z0cDBQqvif7Pkt2jS0J8Kat2x5IajSYuLg6KjOGkHQEhNwUICFaPoHkLm/wh5xooj8j4JVe7YTAYcrkc1acQiUQymQzivxAxhxA5RH65XC7QECiAUHYMivtCbUfCvBBIIpFAVUpUvBKWZsN9IUUJx3GgSzabDQk6XC7XYDAA8UGRNFjyCBoun88H2gXdGZ4IavxA6TZYfA3ZkZAPwGAwmEwmVJ+EYBewIYgHxTGBE4F8IQMfhITuBSGh+hw0hsxK9GgymYzH461fv77nQ4QChddEf2BJ6+Nd2tovkt+68UvF6I4ljUbj3r17QVskqzOEuX4aqv8I9AE0hyKzkECuUChw84SHqf78+XOkRkFOjEKhgEpohLnILo7jqJwtrPiGdXtoGQ+dTocliVBhCGxY4FZYJUmWATPXIWcwGGjrMXBBQm42GOOgRapUKhaLVV9fL5FIUCmgjo4OWOitUqlgTTqGYVBF3GQygeUOMS6hUIhhGCib4I5sa2uDukewghP8p7Cgm8VigXeS6LxjGt65wAmk7kPJJVQfHvph3759PRxwFCi8PvqcJS2OI6kQ8cHxF63QtWDJLuW3Vi1fsofinj17gEpgooLug5l3YUX1tCGWjXbcBh3QZN6ZGk1pEKu1tRVojkajgXYJ2iIog+BYBKUP2EcikUAEBsMwSKwBNRaqMXI4HC6XC9QDehzEjmFFEGR94zgOuUpAeYS57BiwPKwCMhgMEBrSaDTNzc0tLS1QxQPV9YDIEih0YrEYyrCDlg3hF9D7wCHA5/NBc4RgDpPJBJ0U7HogU51O19HRAXEtEAltd06YqyvBD4Z2y4BilJAqAJ7i48eP927cUaDwGvhgWPJFl8J7xZKgLcbGxsK0h/xwnU4HvjmtVguZQBip8iVaQkSu9AU8qFarQZEEzZEgCCi/qFarMQyDtBhQzWBJCVwZwzCVSgXrUqBuEJSKgHAQpGFCRAU0UCj4CFnZkEAjEokgBA9Gt8lkgiAShmFQqxG4BoQB7oOl3FAxFypaAmFB/AdUaYFAAJqjTqeDLYDYbDbY0VBnVygUQoVgeCIQFVgSlG6kOcIToRXcKEoDtAu/FqxQJEjrQVHtjC1btvR25FGg8MroDyz5IookemBxd3MXi6uRG3QX49br9Rs2bIB6YmDuwSSHUuGoti5uDnkDqZlMJuBEmNUQOQGDFCLIkD6JAhdAf2CfwongdJNKpfABrFdI04FQCaxUQQUgwMI1mUxogy3wHuI4jrRg4B2pVAqZQFB+QiQSQVAIeRVxHIdq6hDGAa0Ztv2CUkYQqgbzH54RxeghyANVLcCHIJVKQfltb28HlRY8uQqFAlZzwrODgxXkJ+/ZDW8dDMPAHQm8DBo6OEAVCgW1jpvCu0Sfs6TFEWtG6x5oTuEkQuyy1BD5rO5WKBqNxpiYmLq6OpjtsHsfjuMSiQSIA+Yq2tkGFEwIZRDmhYygLcI1IXOwvr4e0mikUinoaGD/ggYHIRooxQi0C9XFQZEkCAJyJIEvgBPBlwf/Qt4PlJOAqHdHRwc4TCHy097eDloeaHwQngayg0uBXgmvBI1GAzF0HMdRBXIOh0Oj0SByrVAoYItE2I8BeJYgCFi7LZVK29vb4T0B+i+DwQA/gFAohEQl6Ex4UuhPcJICoMMh+AN7Nz579gzq1JlMJhqNtmfPHngrWPz2PR83FCj0HF2SSF+B6Ay8q/qSXba3OIh1hvWVu8sqVyqVJ0+eDAgIWLNmzZUrV27dulVeXl5VVXX9+vXy8vL8/PzCwsKSkpKCgoJr166VlJRcv369uLj49u3bd+/eLS4uvnHjRlFRUWFh4bVr18rLy+HbmpqaCxcuFBcXnz9/vry8/NatW3l5eVevXr18+XJeXl5hYeENEmpqam7evAk1JeGmBQUFubm5OTk5RUVFly9fPn/+fGZm5vXr169du1ZWVlZcXFxQUHDp0qWioqLS0tKLFy+WlJRcuXKluLi4srIyPT09JyfnxIkTe/bsuXjxYkVFxfXr16urq4uKiqqqqkpKSkpKSioqKjIyMrKzs0tLS69du3bnzh2QraysLDMzs7y8vLS09OrVqwUFBTdu3Lh48SLsRX758uWioqJr167B3W/cuJGbm5ubm1tTU5ORkfHs2bOrV6+Wl5ffuXOnvLz84cOHt2/fLi8vr6uru3PnzrVr12pray9fvlxRUVFWVvbgwYOmpqYnT540NjY+fvy4qqrq/v37T548aW5ubmxsLC8vf/78eXFxcUVFxZEjR5YuXXrp0iVj5z3k+s8gpvDhod+yJBzpXs18NZbEu4/ewK4yGRkZ48aNs7Oz8/b29vDwcHNzs7e3nzp1qq2trb29vbu7u7u7OxyfNGmSnZ2do6Ojk5OTl5fXnDlzfHx83N3dPT09fX19PT09PTw8/Pz83NzcPDw8bG1tZ8yYMX36dEdHR0dHx0mTJtnb248fP97R0dHZ2dne3h4qk//6668eHh4eHh5Qz8LZ2dnV1dXd3X327Nmenp5wFtx0ypQpTk5Ojo6OEydOdHBwmDp16siRI6dNmzZx4kQ7OztnZ+fPPvvs008/tbW1/eabb1xdXZ2dnceOHTtu3Lgffvjhhx9+cHBwGD9+PLT38PAYNmzY8OHDXVxcJk+e7Ozs7OXl5eDg4OLiMm7cuAkTJkyePNnJyenXX3/95ZdfhgwZ4uTkBN/a2dn98ssvEyZMcHR0HDBgwJQpUwYOHOjv7z9ixAhHR0dPT8/Jkyfb29tPnjzZzs7O19d31KhRw4YNmzZt2rfffmtjY2NjYzN16lQ/Pz9nZ2d3d3cnJycbGxsHBwfoN29vbxsbG29vbycnp++++87Pz+/hw4ewmtvC8Okng5jCh4f+yZL4y9Z0d38Qf3Fi5ktYEjkT0bI5tJkibJQIrkAy6YLvDwLN5MV2KMEFvgLdp6OjA+3qZTJvuKhQKCBuLpPJwNsI1ihhTmuHmAbaSFaj0UA4Gz0t3BQaQzgb4toGg6G1tXXkyJGgnMLCQcK8LwLY2ibzBuKwNAhkQyVvwVcIdXpQh0DQGTcv6ITwNwgM5rNYLMZJO9JAuAnEJggC1uRAAiY4AUBscM5qtVpwksJz6fV6lPcOAkC46c2MOAoUeoD+yZLda4LW7S0OwoduPK0vWXsDIWDCvOoGEQeO4yg9G/nFgGVwK6ueMGcCkT8gFibM3jc4iI6YrDYqAAcobt4FFzfXYUSkSd4zFjOH3ckHf/jhB9gjAT0axKnhdibS7rgI4HiFRyNIjl5ymWHMXHAT7XUBF4HXCXq7oBQfzJwXBettgKlxc8UQ2NgWAEegPXlljkajAcktpH210UaBQg/Rr0YaeQL2DUtaz0DCqlA5YaY5srhkhkLN0IkovoH0SqLzhi0WBEGQqBOVbgMuBj0XnYuRSo1hpDrBZO4bO3YsWpNjQT3oXBAb3gEWIpGPgKKKro+THByEuW4FZq4CSZi1elQVDT0gUCTqMSQJWYNGskE6EWFmWHIvWchJgcLbQL8aY2RhXsfiJl5GlC9Ze0OQsp1BS4KZCTk3iF/INWws5EDsDn/JKhjiBTIH4eZUTSR0lxoTaomTWBIjpQsg8gI9FwqUjRo1CiXxoMR4MmfBiYiV0MUNZiAZkD4IT4SYF5nesEwTNUN9RZA0aHRf6Fvyqm1og1RU8uODFU901pQt0KvRRoFCD9GvBpj1gLfWKLts/6KDmBWgTXf5krjVIkeyKmetl+Kk/Ez0LZARbrbQUZEb+BaVvSHLhI6gb3FzXiS5QfdyIuZCjU0m04ABA8B1YCFnl49JlpP8FcrTJB8ky2lxEYtboHcA8htYCIAev8u/XTajQKEPYU0ub29YdnkLa6J80doba3RJsr1jyfcXXb43fvrpJzhoTWoUKFB4NbxLljSZQb6XhVL5UgHIQnbDkqj9n4slBw0aBAdRR/T8nUOBAoUu0Ve6JGJMvCvDuZvTyTyLv2YV3vcaXbLkN998g/yVb++HpEDhT4V3yZLkO5JZErfSCl90ookEpIp2+SDorD8XS3711Vcoyox1tYaJAgUK/R8WLIkY7aUzmmLJTniRLonSHvEe9CkFChT6Fbq0uMm2c/eTmrK4O6HL/vrhhx9wc5ITTq3ko0DhfUOX0RtrlnypRmlxisXxPzVLDhkyBA4ilqRi3BQovEew1h/hYK9YEsGi8Z+OJbvEsGHDkBsCPmBUDIcChddDr4jpbYPoGbo5C7eKklMsSbEkBQqvhT5nSQtS6xVFdqmEUixJsSQFCm8S/YQlX2Euv8ihSbEkxZIUKLxJ9B+W7Pl07j7sQ7EkxZIUKLxJ9DlLWkS9X9qeTJHW1b9wiiUplqRA4c2in7CkRXpQly0totjWCxwplqRYkgKFN4/+yZI9AcWSXSyAd3BwQORIkAroUqBA4Y2DzEQWSwn7FUxWO+tRLEmxJAUK7wgUS/Z3UCxJgUJfgXjZgpb+A2vBKJakWJIChbeOLlmyb0V6ESiWpFiSAoU+gMXU67cUidANm1MsSbEkBQpvHuSod/+nSJxiSZxiSQoU3i36PD2ot/gzsqSJtIcthmGwebePjw8cEYvFhHmv176WlAKFDxDvHUt2gw+WJeEX0ul0aAsHgiDGjRunUCjgK61WS5A2U6RAgcIbBMWS7wEIgpDL5bB/g1Y3RK4iAAAgAElEQVSrNRqNer1+4sSJ8MsZDAZQJFUqVV9LSoHCBwiKJd8PgCJ55swZgUBgMBiEQuGoUaOMRiOTyczPz8/NzcUwTK/X97WYFCh8gKBY8j2AyWS6f/8+n89PTk6uqqrCcZzP54Mu+ezZs7Vr1547d+6D+RUpUOhvoFjyPYDJZGpubsYwLDs7e9++fQRB1NfXu7i4aDSasrKycePGMRgMvV6v0+n6WlIKFD5AUCz5HsBkMrHZbK1Wq1QqJ0yYUFhY2NzcPHHiRCaTeeHChcmTJ4PL8r3I5KJA4b0DxZLvB9Ai9ilTplRWVjY0NDg5OTU1Ne3fvz88PFyn02k0mr6WkQKFPyn6/8pFhA+WJeElxuFwFArFiRMnfH19pVLp+PHjOzo6Bg4ceP/+fbzz8gAKFCi8S1As2feANEm9Xq/Vao8fPz5lypTHjx87ODgUFxfb2dlpNBqtVovjuFqt7mtJKVD4M4Jiyb4H6IlGoxHH8by8vGXLlsXExIwcORI+yOVyDMOASftaUgoU/oygWLLvoVarYWkNLE8MDQ3dtGnTzz//HBAQUFZWBm30ej219oYChT4BxZJ9D9AlpVKp0Wg0GAz379+3tbX9z//8zxUrVhAEIZFIYM0ipUtSoNAnoFiy7wG6JOT6mEwmuVz+3Xff/d///V9sbKxGowFjXC6X97WYFCj8SUGx5BsAOA1RoQpQ+hDrwRGTyQQLtFHhH3QKFLPQaDQGgwHHcaPRuGDBggEDBhw9etRkMhkMBmigUqlQcSCZTEa+HZApHEHVgwgS8K6qHL9VoAdEAGnBdYD6BCNt4qHVatETwQfUsQRBoNofOp0OUqMsHhD6CnUROletVsONyDdFn+GDXq9H4pH/RSvoUeU6cn+iu5CrOpHlgc9GoxE+Q2PoGXSpFwXlUAeCw5o8llQqFdxdo9HAB3QL1IcgAJyLRDIajagcH7mr4anhYcmPg17S8K9SqUQCoJ8MXYQsCbncH/o138m4e5NA/fZeAH6C/suSaDTr9XoYJeQ9IQ0Gg/WUJo8wgEwmu3Tp0qpVqwIDA3/++WdPT8+FCxdu27bt3Llzra2taM7DIhw0DchjnXwXg8FgJOHd2+zkiQEFO8j0bTKZwMNAno1wHE0taG8ymdDshR4jswzMWzgF7gjvD0RzZAZBtwDuwElMRGY0uLJOp0NMhHoekR15/sNnnU4nk8lwqxRlojNghEB7HMe7KYhHmFlVr9cjNkTDACe5s1F3wRuXzICEmRxRM5y0gYHFESQhEg+NJbVaDZ1PviniUBRaROJBN5JvSr7v+wKy8P0f7wFLknUiNH/QJCR/hWEYvIqR4vP8+fOEhAR/f38/P7+8vLyamhqJRKLVauvr69PS0mJjY318fKKiom7dunXv3j10HZgViFaQAGq1Gr3qoYHFnHlnfaLVaslvApzEa/AvpMobjUYQGOYnfNZoNEg3RB4JcEegI3jnCU8+HTEp+dkR31nISVipfmQ9Du6FxCYDNzM+WTsGSRDXwCPAewL9LgjoQbrsQKQ+w5WhsVqtFggE8Djw/oN7kfVuvV4Pr0m885hEV7Z+drLbhzCPXhzHDQYDXJ98cfRZp9Ohx0e9Tf690F3ex9ij9Wjpz+jvLGlBkXjntzRhVvRkMplCoYBBxuVyCwoKoqOjw8LCnJycwsLC8vPzaTQaQRAikQidBY07OjoOHDiwevXqbdu2bdu2LSoqqrKyElQbDMOEQiESw9r2J0uFdKh3APIkF4vFSJ3BMEytVkskEgvxjEajUqkkdyNZc4R+wM0zHNhBoVBYmKVI68TNJipSaa09AAggGJIQGd0ymYxsexoMBnIBUPILgGy5o4NSqZT8LOgroBWtVgus/aIOBIGRFgmNYWzA7SyoGRm8UqkUKMniHYnjOGiaeGf3C2qA1Gf0ngAxtFqtWq2GfF4WiwWN4cdFnYA+kA0XorPR/d4RJeq39wL9nSVxEhvCaxw3azcwvAgSY/L5/O3bt9va2kZGRiYkJFy9epXJZEJBcgQ4Ua1Wgw2Fm1WzkpKSM2fOpKamBgcHjx8/Pjk5GYgVvc+VSiViTwvD/x3/5GSzFM0roVCo0+lu3rwZHR0NkhNmlVOpVKpUKrlcDk/d1ta2b98+NF337dtXUFAALloMwzo6OuLj48kXR2YmECUyA9GcR8xCds5CL5G5FcdxjUYDP5lYLBaJRAkJCcB36PrIm0EQBI1Gu3LlyqNHj9hsdlpamsFgEAgEEokE1MaWlpZ79+5pNBq5XN7Y2Hjnzh2w99ls9qNHjx48eEC8uGwoFMrLz8+/du2awWAAGeh0+qZNm0pLS+FEMMa1Wi1yxT548CArK0uhUOAkJQ4NyBcNANSH0GlKpfLJkyegscK5zc3NZWVliApBs1YqldAnFy5cqKurI9MiufPRZ4ol3yreA5bEcdxgMKC3KLx4jUYjg8G4fv368ePH9+zZExMTs2PHjm3btt24cQOmItKe4FzYywHHcRhbMEBxkv8RPEQwzVgsVn5+flxc3MqVKyMjI9etW5eZmXnr1i2JRCKXyxE/4mYuwEmm1jsAQRANDQ3BwcFJSUkg9ooVK+zt7d3c3GxsbD777LOOjg7oBA6Hc+zYscLCQgcHh8jISFtb29ra2szMTHt7+6KiIqlUqtPp2Gz2wYMHKyoqSktLCwoKdu7cOWLEiMLCwvb2drVabTAYFArFzZs3gXGQJgUwmUw8Hg/H8YcPH6JOQK8Q1P/IptZqtZGRkRcvXmQwGLW1tePHj8dxHFTLuLi4ZcuW5eTk+Pr6zpw5c/bs2X5+ftOmTUtOTlYqlVu2bBEIBC4uLkOHDh0zZkxwcLCNjU10dPTt27ejo6Pt7Ozc3d2Lioq2bds2YsSI0aNHZ2dnozeoNUwmk16vZzKZO3fulMvl/v7+aWlpJ06cqK6uZrPZ8ICBgYFJSUnnzp3LyMg4e/ZsWlpaTEzMqFGjGhoaGAwGuGiJzq5Y1D8WnaDVamUymU6no9FohYWFnp6eFy9eFAqF3t7eS5cuBfl5PF5qauqSJUtSU1NHjx7t6uoaFBS0f//+kSNHxsTE3Lp1q6amRiqVNjY27tq1q6OjgxwQo1jybeM9YEny+1MsFj969OjatWtLly51c3OLior6448/TCYTMrdhOQ2Hw4Gz0DACq4pstcERZNHDyxyZcqilXC7Pzc3NzMxct26djY3NmDFjHj16xOFw0MsfCfnOOsRgMFRXV69YsQKFiZcuXbp+/frly5cHBAQMGzYMBbUyMjKePn1aVlb217/+9R//+MfXX3/t5+f33XffffPNN8HBwS0tLSaTKS8vj8vlisXi+Pj49PT0DRs2DB48ODk5uaGhAabiwYMHp0+fjsxzo9FYV1cnFAr1en1HR8eWLVsIgujo6AAdEBhBJpNBS7VaLZfLpVIpblYk/f39fXx8/P39S0pK/va3v8XExBgMBi6XW15evnXrVrVabWdn9/PPP//lL3/57rvvvvjii5ycHBqNBr7UcePGffLJJ3//+99/+OGHv//97zdu3JBKpcHBwWPGjLlw4YLBYDh58uTGjRvXrl1Lp9O7WXUKr8bnz5/T6XSTyTRy5EhfX9/Ro0c7OjqePHkSXqseHh55eXljxoyxt7e3t7cPDw8vKiry9vYGrRA3OxzB/4vUanh/wwf4DPbK8ePHZTLZnTt38vPzt23b5unp+fTp03HjxoWEhDx58mTlypUEQezYsWPXrl2ZmZkDBw50dHRctGiRwWAICQkpLS3FMCw+Pn7t2rVarXb58uU3b96E35dMyu9i5L05UCz5/4D6gmyLEWYbGWmIZDcQxBAIc6wAx3EgLBqNtn///nnz5s2ePdvHxyczM5NOp7NYLB6Ph/auIbuE0L1QqBTvHB3uofw4jmu1WpVKpdVqmUzm2bNn582bN2bMmKCgoKioqOfPn5OtIRRmJUhxBgt3EtnFSXTOcOohjEbj7du3Q0NDJRIJvA927drl5+c3depUV1dXf3//gwcPPn78mCCIyMhIgiCqq6ujoqJsbGzy8vJoNNqECRMmTJhQX19PEMTz58+nT58+atSo+/fvp6am3rt37+bNm15eXoQ5At7W1mZvb79kyRKwYdVqdXx8vJeX1+DBg7ds2bJ69epp06ZxudyQkBCNRqNWqxcuXDhy5EgHB4eGhobff/999OjR3t7eI0aM2LFjB0EQOTk5J06cyMrK+u2339ra2gYNGrRs2TJfX9/z58+vWrXKw8Pj+PHj06dPj4mJmTJlyoYNGyIiIjIzM318fGxtbVtaWmpra8eNG/fpp5+6urr6+vq2trYWFRV9880348eP9/T0XLJkyeDBg21sbL788ssZM2bk5eWhTkZxHuQnbW9vnzVrlqurK4PB8PLySklJKS8vd3JySk9Ph19w5MiRKSkpe/bsycjISEpK8vLyqq+vnz9/PkEQZ8+erampGTt27JgxY4YOHerq6spkMtPS0jw8PCZNmhQTE6NUKpcsWXLz5k2CIDgcTnh4uKura3Jyslqtbmpqmjhx4tmzZxkMxsCBA5cvX15fXx8aGorjeERExI8//vjbb7+NHz9+xIgRz54902g0rq6u5eXlYOLMmDGDx+OtXr36ypUraKRZTK73GhgJJjP6j0hviyXBzWQRCCY6A5I8yHYZjGORSCQUCul0el5e3qRJk7y9vbdv356YmNjW1iaRSKD7wE+PkoSsWRIn2T7Iv9Zz+cmOc3JORmVlZUxMjJubm6ur65o1axITE0tKShgMBjRGCimETeAz8oGSPfpI8l4FfwiCKCoqWrZs2aNHjyIiIvz9/d3d3Z2cnGbOnOnq6jpjxoyhQ4euXLmSz+fHxMQQBMFms8PDwwcNGrR69era2lovLy9HR8e4uDiFQsHn8wmC8Pb21mg0HA5n27Ztd+/edXBwQDx+8eLFn3/++cKFCwkJCQaD4eDBg5s2beLxeHQ6fcOGDSkpKadPn66rq/Pw8Ghubvb19QXVUigUJiQkRERE+Pr68ng8iUQyevTou3fvOjo6BgcHp6SkLFu27NmzZ05OTs3Nzf7+/omJiWvXrv3hhx8CAgJmzZo1efLkgQMHDhkyZPjw4efPn1coFOHh4Q0NDZGRkW5ubp988sns2bNHjx4NXoLw8HBHR0dHR8fVq1dPnTp18ODBY8eOLS8vx3EcUoig88nuPPjAZDL9/Pz4fP7KlSvnz5+/bt26NWvWgFOFIAgHB4czZ87k5eUJhcIbN27Mmzevo6Nj5syZPB5v3759+fn5H3/8cWFhoVarPXTo0K1bt3777TdnZ2cajRYeHt7R0fHtt9/euXNHJpO1tbXFxMTs3r2bwWAolcq5c+d+/PHHq1atevDgwaRJk0JCQnJycpYsWUKYdcni4uKVK1ceOnRowYIFkZGRQ4cOLSgogB89MTGxtrbWz8+vtLQUjYQPiSj/pCyJ1CUU9IBgHwA4iOxwBBUG8jDKy8vDwsImTpwYEhKSl5fX2toK62TIsVd07otY0iKXrbdaG5IfDCicRHNarZbP558/f37Xrl1OTk4jR46MiIhob2+H2QiGJ2JDdGuLDB6EXo0GvV5/+fLlqKgooVDY1tYWFxe3f//+HTt2jB07NioqKiws7PDhw7W1tSqVaufOnQRBlJSUDBs2bMiQIXPnzv3nP/9pZ2c3ceLE+fPnnz17FsQLCQlpbW3l8XhCobCystLZ2ZnFYoHmFR8fb2trO2TIkEWLFtHp9LVr12ZkZIDMcrmcz+enpKQ8fvzY3d394cOHw4YNg0CtWCzeuHHj/v37ExMTwUk6cuTI1atX7969e86cOdOmTautrb1x48bkyZOhP9lsdkFBQUJCAkEQK1euPHjw4OrVq+fOnXvkyJGamhomk7l69eotW7YEBQU9e/ZszZo18+fPz8vLQ3lOBQUFfn5+lZWVQUFBP/74o7Ozc0FBAUEQdDq9qqqKPEIIknEgkUg8PDwEAsGWLVsuX748bNiw2NhYNKjGjh178ODBzz//fODAgUOHDp02bVpTU9OsWbMIgsjIyKipqRk5cmRHR4fJZNq7d29eXt6BAwciIiKUSmVAQEBra2toaCjYGUwm08fH5+zZs48fP46Njd27d++gQYOmTZt27NixVatWjRkz5o8//tiwYYPJZNq+ffs333wza9as7OzsZcuWFRcXZ2dnf//994WFhWBfHzx4sLi4OCQkpLKykuica/FhsCTeFVH2H3neLksSnRPfQMEkSOmHKBlYp9NVVFQsW7bMwcHB09Nz/fr1EBxoaGiAdYTt7e0EQYD9C9MYPUyXLEleh/NqLElOPCZImefA6RKJRK/Xs9lsgUCQnJy8dOnSGTNmrFu3jk6nE2Zfp0VXIMqGd4ZOp0OmU8+lysvLW7t2LUhVW1sbERHR2tr65ZdfhoWFLVq0aNasWWw2u62tLSoqCsfx69ev29jY/Otf/xo9evSmTZvWrFkzY8aMtra206dPSyQSHo83c+ZMkUikVqsbGxujo6NDQ0MJgmhtbW1vb//kk09KSkoePHgwefLkmzdvBgUFwU5BEomEzWaXlJQcO3ZMKpWGhIQ8ffp0xIgREJDV6/W//fZbUFBQamoqQRACgSAoKEgikchksvDwcLBbq6qqbG1tkf+3rKxswoQJe/fuPXTo0MaNG7/99ls/P7/AwMDbt28TBLF69WpwEWi12lOnTrm4uIAWXFhYOHfuXG9v73//+9+rVq2aOXPmmDFjBgwYEB4efvPmzaqqqv/6r/86ceIEOTsS/Rbt7e3Tp08vLCw8cuSIj49PdHS0m5vb3bt3CYJ49uyZr68vXEEsFt+7dy8lJaW1tXXWrFlGoxHiPJMnT+bxeHq9PjU1NTs7GzRBsVi8YsWK58+fu7u7X7lyxWAw3L17Ny4u7tChQ+3t7fDiHDJkCGwuUlZWNnPmzFu3boFUZ86cCQgIEIlEFy9eDAoKqq+v12g0/v7+4OuQyWRnz54tKSlZsWIFsCRE6ns7pPs/sM7oP8K8LZYkq1FgV5JTQ9BL/sqVK3FxcX5+fhMnTly8eHFxcbFCoVAqlRCMRrlmwKTIsMU7h5i71yXRup1e2bZkckdUayItbUTHIUzR0dGRn58fFRXl5ubm4uKybt26jIwMBoMBsxSeHcMwiyUrvR3oRqPxwoULCxcu1Ol0dDo9ICAgMjLSy8vL29sbLdRTqVQajSYuLg7H8cOHD//1r38dNWrUkSNHjh07NmfOnPDw8MbGxn379t24cSMyMnLZsmWLFy+urKy8c+fO3Llzz5w5QxCEwWAICwtbtWoVXPDkyZNr1qw5d+5cSEhIbGxscnJyZGTkgwcP9uzZIxaLg4KCBALBxYsXw8LCHj58mJube/ny5a1bt547d06lUnG53OHDhxMEweFwFi9e/P33369fvz4xMXHOnDmE2QHt4uKycOHC69evFxYWFhYW+vj4gOeXTqcfOXIkMDBw1apVN2/eDAwMDA8Pb2lpwXGcw+GUl5fv2LHj119/3bx585IlS7766qvhw4cPHDgwPDy8srISaokidRLRCmivBw4c8Pf3d3Jy2rBhw7lz57RabWFh4fbt29va2hQKxeTJk58+fcrlcrlcbn19fXV19f379z08PLRa7ZkzZ548eTJkyBAg7sTExPT09C1btgwfPvz+/furV68uLS1dunRpVVUVg8HYtGmTh4fHgQMHOByOWq3W6XR2dnZlZWVyuTwyMnLjxo3V1dUXL15sbGzMysoKDAwUCATr1693cnKqqqqqq6vz8fGBF49Kpdq/f39tbe3s2bPhiT5UlgT8iVgSJxmtuHmAgvoA9cMvXLiwZs2a0NDQ6Ojo+/fv6/V6kUgEnIIyORC7gc6FssYs+OtF0RucFLTpbadjpJx2coYmQQorId6HuysUChqN1t7eXl1dffjwYVdXV29v76NHjz5//hwiv+h0JL9Op+tVxQ2CIAoKCnx8fFQqVUxMzKVLl5RKZWxs7MyZM+fMmRMdHb18+fLCwkKCIA4cOKBQKLZs2ZKZmVlXVxcWFubp6Xnjxo3MzMyQkJCffvopLS0tKSmJRqPl5uZC9DksLGzt2rVr166Nj48/fvz4xYsXoc85HA5okVeuXJk/f/6yZcvq6+vFYvG5c+fUanVaWppCoVCpVIWFhdOmTTtw4IBIJLp9+/aNGzfgGcPCwkpKSg4dOlRcXNzU1LRnz56ZM2f6+PjExsbGxMTU1dUVFRVxudxDhw5t3rz52LFjQ4cO9fDw8PHx2b59++XLlzkczunTp6dPn+7j47No0aLNmzfv2rXr8uXL0Hs7duzYsWNHR0eHTCZjsVgbN25saGiQyWRsNjsjIwMtJYBuB1KurKw8deoUl8vNycmZN29ebGws+FiXLVt2+vRplUr1008/zZw5c/ny5fPnz1+4cOGcOXM8PT3B4i4qKmKz2fHx8fBrXr9+/erVqxEREdOmTZs3b15+fr7JZLp37150dHRISMjOnTv37NnT0tJy5swZeEMHBgampqauWbPm1KlTZWVlMTExLi4u1dXVGzZsmDRpUmho6OrVq52dnSdMmGBnZzdq1KiKigqDwXDv3j17e3upVBoREVFdXU28qhOpP8PiQf4sLAk/IZiWKpWqrq7u1KlTBw8e3LBhQ1pa2r59+7KysmpqathsNqg/wHQoIgkOQdC8cFKEB0kPzKVSqWA5V5fdqlQqZTIZ0ChKk+whkAuZvCgNbgG5KQRpRTCQOMrHlEqlcrkc8vLOnz8fExNz7NixqKiouLi4xMTEK1eu8Hg88krwnkulVCovX77s4uKSlZXFZDLRG4LJZD569KiysrKmpqaxsVGj0Tx9+jQ+Pl4oFBIEIRKJHjx4AC4ClUpVUVFRW1srl8vBnwCLQCoqKsC+vnz5ckNDA6Txo0xvpKji5rgW/EaweIYw+0xwc2YMrPjGzYudeTxedXU1GnMikejJkycPHjyoqqpqa2uDR7h3796DBw/gEa5evVpZWdnW1oY6XK1W19bWVlZWgpzPnz+HRHQI6CE9XSQSwYBBi/xQoAwzrxGEb6HrGAzGjRs3qqqqSktL4bLgfAA7hjAvptRoNDQaDR4KvsJJ1sbu3bsPHTqEaoXAveBbqAkC7bVabXV1dWVlJZPJBCf1gwcPampq5HI5g8F49uyZTqcDbxKsBaiqqhIKhffu3YuJiamoqHjw4EFAQADEptBo7HMqeVPoh4z/6iyJqAEzR2DQWEFziRyDPnPmTHBwsIeHx5IlSw4cOECn05HpCt4lDMOam5tpNBqDwaDT6Tt27EhKSoLYd319PZPJ5HA4QqFQoVB0dHSAWgE2C0EQ+fn5586dEwqFkB2pMwPFNI8fP37o0CHysmV4ZoIgeDweaomMepSBhP6ioW9RLgiuhsgRjVcU5yErmxgpAaipqWn37t2BgYHTp08PCAi4dOnS7du3mUwmSoKDC8JiGJRjhIIPuFWegPWRbtB94y6v/wrXRJL36u6E1SRBvUqWDSN5mYnOivlrgvz4Fnchy9b9FWA6YJ1d4ehglz8fRkoIs/DzIEYmSCvNUePePlQ3J/aKBN4G+okYZLw6SyL3Ipq38HhoKb5Go3n+/HlWVlZcXJyXl5efn19BQUFNTQ1aqQpQKpVoCe2YMWM8PT0HDBjg5+f3t7/9bezYsfBKX7lypa2tra2t7eeff/63v/1t1qxZEydOHDhw4OnTp4Ggg4ODp02btnv37jNnzmzdunX58uVPnz4F2VQqVVtb28KFC+3s7GpqalB5NB6Pd+3atezsbBaLJZFIcBwHTUQqler1+oqKCnhA6JqKigqCIK5cuVJYWHju3LmzZ89evnwZlAsUdELqJHliwMpIEBKtrYbcINDm6urqEhMTN2zYMHfu3NGjR+/du7ejo4PJZJKduUjNtBjcuNknixRt67FOvojFvLXgFDKjWf/WSOHtcoYjGEl1vSzmHlnZsW7QPayHH1lsskhI8TeS8Dr3IjMX+SD6YHE7awm7uZH1QevfETOvCgMvs0VSXZfCWx9Hk9z6W9xcAo78Au5DdPkr9C1eS5cEIDMT1XZUqVS3b99etWpVcHDw4sWLz549y+Fw2tvb2Ww2YSYLzLw2BgD22pgxY6ZPn25jYzN16lQgQXAnYRj25MmT7du3jxo16u9//3tQUNCmTZsUCgWTydTr9aWlpZMmTRo3bpydnd3YsWOnTp06aNAgWL+l1WrlcvnWrVtHjx4dGhoaHh4ulUqbmppkMllmZqaTk9O6desKCwsfPnxIdK7lNWnSpI6ODrj1/fv3586dW15e/umnn06dOtXX13f+/Pnr16+H1cQodQksU/RQYDSBMgivAY1Go9FoUIkzOCiXyzkcjtFopNFoHA4nJCTE3d3dwcFh586d9+/fJ0hVbVC/kStZ4J31rJceJCsy1roYZq7U8KLfmgwgBQtWeukgI0/XLltac5wFd6PPhFk3R3kOXcrZqyln3Riz8oS89FVh0aXo7QJAPdblKRYPgpkLX+FWrxbUOeTORKJa9KSJlAdCFh5d00JV70P09id7B3h1loS1X6CFwUzm8/kVFRUrVqz4+eef58+fX1hYWFxcbDKZoNQCPLxCocAwDC2tgZIToGo1NzcPHTrUxsbGw8NjwYIF//znP9PS0giC0Gg0Uqk0OTnZ39//xIkT9vb2Bw4cGDNmjK+vb1VVVVFRkZeXV2pqakVFRVZWVmVlJYZhBQUFDAbj0aNHv//++y+//LJp06b09HR/f/+oqKiPPvpo4MCB2dnZvr6+np6eBEFwOBwejyeTyWpra69evYrj+K1bt9zd3Zubm2tqap4+fXr16tVp06aVlJT8+uuv169fRwUWCYKg0Wh1dXV3795tbm6Wy+V37txhs9nt7e3nz59//PgxdItYLJbL5bW1tWgaEObSMgSpziCyoVQqVX19fVhY2IwZM0aPHh0bG1tTU4OqlpGzmi9LeE0AACAASURBVPCuDCjyb9T97EXXwTpbhdaqisUk77mC9lJJegic5H17kZDkO1pQUq8GNvlS1p2DgFzP5LcFdAv5NWAyl6frBpg54QE9HWJS9BRkwXpyTQuZrTsTQL6O9fjpE1h3dZ/j1VkS/WCQXgfLhxcuXJiVlXX//n3wqSOtx2Aw8Pl8cmVmYBBwqEMbNpvt6uo6ZMiQAQMGDBgwwNHR8fDhwydPniQIYt++fVOnTm1oaKiqqpo1a5ZCoSgoKIiNjV2wYMGSJUvWrl371Vdfubu7f/vtt//7v/978eLFEydOEAQBicerVq3y8vLy9PQcPHjwqlWrcnJyTp8+3dra+tNPP3l6ej58+NDb2/vx48dHjx4dOnSoi4tLVVVVY2Ojv79/VVXVypUr586d+8svvwQEBDQ2No4ePVqlUikUiqamJoPBUFdXN3jw4MmTJy9cuDA8PPynn35avHhxUVFRRETE9OnTZ8+enZOTo1art27damdnFxwczGaz0SsBWTeghGLmEuigkEqlUoPB0NjYKBKJQkNDXVxcQkJCjhw5AktQCHNZLZhd5MiP9fQDRy1Z7yB/az0UyNfBzWRkbdETpKQrmLSmzsXEulRYiM4aa5cCWCtB6NZkzsIwDFZ/khnKgrstxuoroOfn4iS71VpPtNC1X0pzFmKTOddoVdQShgHUf0HEbfEStXjDIQ3dQqoXWQPvEuQe6Cd4dZbk8/lXr15ds2aNl5fXjh07NmzY0NLSwmKxGAwGuRiqxToT8hjCzLHFurq6iIiIRYsW2drajhgxwsHB4aeffnJ2dnZzc/vHP/5x7dq15OTkysrK/Pz83NzcEydOFBcX79q1q6mpKS0tLScnJzEx0cvLKycnJzc399dff62urj5y5IhMJmtpaRGLxbdv3968ebOnp+eCBQvCwsJ4PB5BEDqdLiIiYvPmzUqlcuXKlbt377azs0tLS/Px8XF1da2pqQFSXrlyJYfD8fX1dXBwaGpq+uKLL+bMmTNjxgw3N7dTp07du3dv7Nixy5YtM5lMGzZsGD58eHV1dVFR0c6dO4VCYWlpqbOzc2NjY1RUlLOz86NHj6wnA6jYaOYbDAYQjzC7MiF8z2AwMjIydu7cOWfOnLVr15aUlNBoNPCKisVigUAgFovB0UmmDK1Wq1AooAGfz4cqR1wu9/9j77ujqjjz/nPe95x3f7t5tyTZ7Mm+6ZusSdQkGo2xRGzY0EjvIM2GoBQBBUQRpKiooCIIqDRBigiKBVFQUZEiAtI73N77vdw2z++P797nDKjZ6KoIzucPz/Uyd+aZmWc+862fRygUQmqezWaLRCKZTCaTyUQiEZfLBf0OqVSqVCrlcrlAIODxeAKBgMxfkEaAnDhhIC8yU5OfRmBMnFkmP8xYyBYPGD/eepJbCoCfQMgC9oxbtkap4T5xZmt/M4DuyWeqNTSPkrfB43/85UG2ByGRCHm8UbSlMxRskPsm9Xo9CLXhwgBceUa+vMRvy1MRJL+bMASXyZY1iHTANdQ/Jdjy6jGhWBJatWbOnAkdAmikbCpBEFB6AqYiVuvBLKkzyA7S6XSpVNra2nr48OFNmzbV1NRMnjz5s88+c3NzW7Fixbp164RCIZfLfeedd1auXGllZfXzzz//8MMP77zzTlpaGofDAQaZNGmSn5+fq6vr/Pnzra2tDx48iBCi0WgDAwN5eXkWFhZubm7ffvvtihUrYJao1eqDBw9GRUXp9Xo7O7vdu3dPmjTJ2dnZ2dl56dKlHR0d9vb29+/f37ZtW29v7/Xr11etWlVZWTl16tT8/PyGhoaWlpbe3t7a2tqpU6cC78TGxkIfbk5ODnRuEARhZGSUmZm5YcOGHTt2QEQSLoJCoQB3Gx5vsvK5UqkE11ur1eK4BEZ+fr61tTW0961bt87Z2dna2trS0tLW1tbZ2dnNzc3Nzc3d3d3d3d3Nzc3FxcXR0dHOzs7a2trCwsLU1PSXX34xNTW1trZ2dHR0cXExMzOzsbFxcHBwcHCwsbGBbRwdHW1sbJycnBwcHCwtLaGe0dXV1cXFxdnZ2d7e3srKyszMbM2aNebm5paWllZWVubm5mvWrLGwsLCxsVm9erWJicny5cuNjY0XL168aNGiRYsWLV682NjYeNmyZcbGxgsXLjQyMlq0aNHChQsXL168ZMkSY2NjY2PjJUuWLF68eMWKFebm5mZmZqYkmJmZwdk5OTk5Ozt7eHisW7fOxcUFD8bc3Nza2tre3h42wHAywP03w8XFxd3dfd26dfB57dq1bo/B1dXV1dXVzs4OTtnBwWHt2rWurq7w1w0bNmzevHnjxo2urq729vZ2dnYgzgLjtLGxgTYhU1PTdevWOTk5wR7c3d3Xrl1rb29vaWlpaWkJXzo7O8NR7Ozs1q5d6+HhsX79+g0bNnh4eDg6Oq40wMTEBKo4bWxstm3b5u/v7+Pj4+3t7enpuX79eg8PD3d3dy8vL3d3d1dXV7h6Hh4erq6uuERE/6QM1Vjh9RkJxvOzJLxm79+/X1paevz48T179vj6+u7YsePMmTNdXV1MJhNegOAWEYbqOa1BIh93KGLvIyoqytXVNSYmZunSpWfOnCkrKysrK2tubtbr9TQazdjYuLq6msPh9Pb2VlRUWFtbs9lssC+Sk5NdXFxkMplOpxOJRHl5ecnJyZ6enlDdZmtra25uHhcXFx0d7ejoePHiRaFQqNFodu3a5eLiwmazN27cGBcX5+vre/ny5RMnTsTFxfX39y9YsKC2tjY4OLi5uXn79u2//PJLaWnpwoULW1paOjo6IA3d0dExadKkhw8fajSagIAAf39/nU535cqV+Pj43t7eS5cueXt737p1y9/ff//+/WB84QQRQRBQtom9SKinE4vFYKdIpVIWi9XU1JSdnZ2QkLBt27aIiIicnJyqqirIaBEkFw/fFHIwC+OJtxw7yKM20xtWGiBILtioDR53zR6P/T3t6HjMWlLTPdl+fKItCdMGm42EQffs8UM8vsPHL8ivAPuqeoMFSv657jGQj643WKB6Q30otjcxRl3k4eFhmUwG3TjQuCWVSiUSiVgslkgkcrlcLpfLZDJoQoMPeC02KB2FEBBsoFAoZCMhJYHH43E4HA6Hw+Vy2Ww2g8G4dOnSpUuX0Mi1fX7tmR87PPFmvcqj49v9bCxJdpzhA9zXw4cP29nZ2drauri4ZGZmIkOpIDSWIEPAGOdz9Hq9SqWKjo4+e/asQCA4fPjw7NmzbWxstm7d6uLi4uPj093dzWAwvv/+e29vb3i3r1279sMPPwQdAa1We+bMmcWLF/v5+W3cuNHT0zMmJsbW1nbNmjXgNpqYmHz99ddWVlZWVlbffPPNyZMnITwK6qpCoTAxMZHBYFRXVwcGBoIwhFAoPHr0KCgVLlmyZPfu3fv27Xv06BFEG01MTKDqk06nx8TENDU16fX66urq/Px8SOWnpqZaWFhs3LgRap7Onz9fXl6O7UHsWmKm0+v1WECIIAixWJyVleXh4bF69Wp7e/vs7Ozu7m4Oh4NLCPCTTIHCfwKtVpuamkoYZNtfQyMO43VgSTjoM/fewGVVk5Y2Jbc2l5aWOjg4WFhYWFtbFxYWPnz4sK+vD0JawFNQRkMQBIfDSU5O7urqArLg8/nR0dEBAQGenp7h4eFtbW1qtbqqqgrYFuI49+/fh5cqDKCsrCwrK2vPnj3h4eF79uzZt28fzilD9lkmk6lUqpqamubmZohqwXsekZYVxV0W8Fomq/Z3dnYiQ0MknDtelkQul8M7HGxAkUiEVyxACOE4o1AoBBsW71Or1fb29oK1Mjg4WFlZefLkSTs7O29v7507d169ehWWMCN73PqnlzRSoPCsQAilp6djU133etRLPhHjlSUhMq01lD5gmRxswOv1+q6urlu3boWGhq5atcrMzMzd3T0jIwOkYTFR6kjryWBLk9xaABWImC/w2lLYC4NbC4SFSC48lBlhboU/sVgsHCzH1hl5+T1y8hF33WE5GRwr1BoEuxBC5J8TpL49vEyrUqnkcDh6QzGmRqMBiqfT6QkJCXFxcdOmTfvmm2/s7e2rqqrgVQGFVsiwdgVcaoKULXkJk4HCmwWtVnvq1Ck82/Gj9BpizFkS45krgbSklYkAcrkcf0PmDuhWvnHjhqur65IlSw4cOABCp319ffi3QLgCgQAvWArVQkwmE/qOMa8Bg8CgR60vSn4r4m+0JDFKshwReTMdqZQEQgeI1J1NPkHIDMJ+BAIBtFciA+9jcX+9of8SVjLg8XhakjaaSCSKjo5etmzZvHnzLC0tHz16pNfrYVe6kb1Mo8zJx2ORFCg8H/R6fWpqKnlqUZGcJ+I/Ykn8CgKlCfwNQSIgsDFx7BJ0+tzd3Y2MjIyMjLZv356VlVVZWQm2JF6XRqVS4T3Amn9wIOAvLG0LvIN5GXvQOoMyBfl78mi1hnoxIGJytTaOn0okEnxSSqWSRqOBIUmQ1Mu5XC5IbJH3D9SGOzWRYVVliURSVVUVHBz8888/v/3224sWLQoPDweVQPxDvV4P2XANabkeck4Dj/NlzAYKbxQQQikpKchQa0HNq6eBbL0+G0tiNQey4YMMOhFADZg+tFotFAYhkoKDXC7PzMycMmXK3Llzt2/ffv/+fR6Ph0eDEBKJRNAHDYwGuV2ovIHkIOxQJBKBiYdISmt4lU6yoItWq4WCO8ywZHMS1hSDz3jnOBQA3Edm/97eXg6HA+Le8D2cO4hXw4BlMtng4CCNRispKTExMZk8efKSJUuys7NBsADr66CRq0vjkCukvNFjePETgcKbB4RQUlISMlStv85xydcHz2lLEqQ0Dv4SswzUQ+ANoLUZbwbBu+7ubqgENDIycnV1vXLlSnd3t1arFYvFXC4XDkfeOSZfspVK5i89qdlDp9Nh0w/78rhmGxnCfGTlDp2hVBgzFOZHvUGoDe+NyWTCn3A4En5Lp9Nv3bqVlJQEBZ4BAQE3b96E5bCxYBIA7xz+iw1YMj/i+DH+74u++xTeOEil0iNHjhCG5xcm3lgP6nXHK11pFj/58PBDMoTNZsfHxy9ZssTIyGj9+vWJiYnQsgKpDzJRqtVqOp2OORe392H6IxuJYLqixxYyfCJwfgZE27BkEWbknp4eGLxMJhseHhYIBDgaC+nyvr6+tLS0NWvW/PDDDyCFS6fT8UqKlMtM4TWBVqtNT0/H7R7E69HH/UTggelJVatjMpJXzZJopKuO8xIajYbH49XV1aWnp4eFhXl5eW3fvn3Xrl3nzp2rrq7Giz7rdDoIUGIlVEyg5LrlUfYmDvA9kSIhQIPNT62hr04sFstkMh6PB8YgOMtqtVoikfT09JSUlKSlpSUkJISFhYWFhR06dOjy5ct9fX04NAnmLbkOmUq/UBhz6PX6rKwsXKby2lIkMZIl9frnETF5UXilLEmOP2JgWoGmGmx2SaXSzMxMV1dXExMTe3t7Z2fnI0eO0Ol0yBrhNDd5b9A/qx+ps0BufnjiqBDJnQdWxf/t7+9HCMESKLW1tY2NjcHBwdBtNn/+/F27djU3NxMEgXstCIO9jDuOqRg5hdcKCKG8vDy9Qbn9dZ6Wo56aV1wJRMYrZUnAqJNHTxLFAmMQ3F6VSnXnzp3y8nJ/f/8///nPsPwTh8MhSJQEFeNoZPqIGNn5/7QJgY1H6BKDjAoYnp2dnV1dXWVlZSUlJS4uLrNnz961a9eRI0dycnLu3r0LrWOI1IlEDr/CTR1lt76K60uBwtOBECooKCCz5Gsb7359Hpkx8LjJFDbqS3B7sTugVCohS05uidm1a5epqens2bPXrFmzZ88eWKAOIQRl21gHFyfyIZX0K7k8NDJnIhQKOzo6enp68vLy4uLizM3N582bt2zZsq1bt7a0tMCxdDrdwMAAeV0HHUneCuKt5LODcMGru9AUKDwFCKHCwsJxxJKvg50xxiz5xAsBwLlpfC8BfD4/PT09ICDg0KFD7u7uCxYs2Lp169mzZ5VKJZvNhjwMlATh7A1WF3/aqIBe4SfXrl0LCwtbv349KLVs3br1+vXrsBm0JCKDpQnSA4iUatcbVKbxOWL2p0ouKLwmOHfunN6g7kGx5G/BK2VJsueL0ylkisGfyXoQBEHgPipYN0YqleKGGQaDcfPmTXd3d9Cn2rt3b2trK8gjEgY7USwWA+fqnwTYVXFx8caNG4OCgubPn+/t7d3e3q5Wq3FjJTlsjEauI4ZDkPgu4rPQPibu/SqvNgUKj0On0507dw6nNCmW/C0Yg7jkCwdcvtra2pKSktDQ0CVLlixdujQ5ORlUJxQKBZ1Oh0p1RKpwVKvVMpmsq6srNDTUzs5u+/btaWlpGRkZXC4XOg4pUJh40Ol0+fn5o5ovxnpQzwCyffPKyoMmAkvitbQQQp2dnfn5+WfOnJk/f/7s2bPDwsJSUlL6+vpkMhmscwvhy6qqqp07d27evNnY2DgpKenChQt4hXudTieXy8f6nChQeClACJ07dw6mOtaaGetBPQMolnxOIIPKv06nwwLA0Ed49erVixcvhoeHg4zznj17QkNDt2zZkp6eXllZOTg4CGvMIsOCiDrDsohjfU4UKLwU6PX6wsJCwpBmRIba8vGFUUT5sg83EViSMAQusUUJDgXuB4dt8vPzvby8YDO8pjbEK/F+XvNuBAoU/kMghM6fP09+WMZ6RM8PzJUv+0ATgSWRYcE/8qJL8AGsQi6Xq9Vq9+7dGxgYiEgyjpAdwj3ayNB4Q8UlKUxUIIQuXryIkyHjTgN/VA6HYsnfilGth3rDGjtk9R2VSnXq1ClgSWRY3PXxhR5f824EChT+QyCEiouLsSE57oJLY5LpnggsiY1H+KwbqbNLEASIFR08eHDPnj1k0XKCIFQqFS7MJP98bM+IAoWXBKVSmZeXhxVYXmet8icCP9qv8qDjjCWxH619bB13ZKjywRYiiO9i0jx+/PihQ4dgcQXYGxqfoWsKFJ4bCKGsrKxRPbVjPagXg5cXphxnLIlI3YQEQeh0OvK6jORmHrJYGVy45ORkUGkmW47jKyhDgcJ/CIRQbm4u7rmYSFYCxZL/AjIUecESicB3eMEyZCiUhQUS0Mgmn8LCwvT0dMyS5G4ZChTeEMCDQBAEVkuYMIYCxZL/AlwFWCQePuB8NFQ7QpobpNUIg94PQRAajebIkSPJycnkqlSKJSm8gSguLiYMCwFQLPlbMM5Y8onC42RtHoQQyPTi/2K18/Dw8KSkJGKkGPBE8jgoUPi3gKpyRFoaesIYChRL/gvIULIDIpIikejSpUvl5eX19fUVFRVXr14tLS11d3ePiYlBCMGCYphMo6KikpOTCYolKbzB0Ov1ubm5aCJWdFAs+S9A6qa0tNTS0jIwMDA9Pd3T0zMyMtLR0fHtt99euHDh8ePHPT09L1++fObMGT8/v6SkJHDAlUrlvn37jh8/Tl5iYcLMDwoUfiP0en12dvaoJOdYD+rFgGLJfwFqgGJjY83NzS9cuCAUCgcGBmg0WkhIyOTJk52cnJKTk2EJxo6Oji1bttjZ2eG6sKioKPA1RiXEx/qcKFB4pTh9+jS2JSfG/CcnG16GBMY4Y0ngu0OHDsXFxalUKolEUltbGxgYmJubu379+urqak9PTwsLi7S0NL1en5mZGRQUhIWhoqKiCgoKKJak8CZDo9FkZmYiUvPFWI/oBYBiyRGAOGNSUlJ2drZUKj1x4sSqVauqqqrUavWRI0d6enouXbp07969+Ph4hFBVVdWePXtwwgdYUv96K49SoPBSoVKpIC5JrjueGBhFlC9wz+OMJeEdGB4efvToUYSQXC6/efOmqampo6PjqlWr5s6d+4c//KGmpkapVCqVyqqqKrAl4bW5d+/ewsJCuHx6g6I9RZcU3igMDw8XFRURJP3/ifQIkI3KF7jbccaSsAjXkSNHEhMToROxsLBw6dKl/f39LBYrLy9v27ZtfD4fLlNlZaWvry/QolarjY6OLikpIUirkuE0DgUKbwj0en1JSQmOOI07TaB/C4olCYSQUqncv38/5Omg+Ovrr792dHR0c3P78ccf3d3dcczl4sWLQUFB8M4cHh4+cOBAWVkZdrcnWBkEBQq/BQghULuYSDlunLJ/Sfsffyyp1+t37dp16tQpgiCkUmldXV1sbCyLxWKxWCUlJUlJSbB0l06nKykpiYyMhHkgl8sjIyOvX79ODkpSLEnhDURWVhZ2tymW/C0YZywJKy6EhIR8+umnYWFhw8PDTxPIi4+P/+qrr6C8HLTRoqKibt68STYhJ1j0mgKFfwuEUG5uLjwCE4Minwb9SPwnKZ1xxpLIsOY1eVnEp2356NEjsnq5t7c3xZIU3nBAVTnwI1k3a+LhzWVJsCWxgY2Ffx7HqG1UKlVwcDDFkhTecKjV6szMTLwu2IR/BN5ElgTDUKVS/dtefZlMplKpoAxIp9NJJJIDBw5QLEnhDYdarc7KyiI/PhP+EfjPy4PGGUuq1erh4WF8zrC49hO3xLYkfmFScUkKFHQ63ZkzZwjSUqNjPaJXhDeIJTG74Wjj026zniRDCbQYFBREsSSFNxwIoZycHOINqIQb9XS/QSyJiQ+qYWGRoyduib+HQnStVuvn50exJAUKo7I3Yz2cl4Vft6KeCeOMJX87kEGdF+KSCCEfH5/u7m7CcPnwCrRjPVIKFF4KtFothKeIke5XSkoKYWjQgAdhrEf66oATFdB39xuty4nMklKpVCqV4rikn5/fvXv34Hvgx3G3zCYFCr8dOJGt1+uhnRecKlDMQiQZ/7Ee6avDKIqkWPJf0Ov1AoFApVJ5eno2NDSQJ8ebNkUovFEAFsD8COakRqPJysoaldsc65G+OoyiyDedJaFMksPhADMqlUp3d/eWlhZYeRGWD0OUhBqFiQu9Xg+rz5Oj8FqtNicnB38DHDrWI311GFVq/ht/NWFZEt6cHA4nISEB5seWLVtu3boFzFhaWkqj0SQSyRs1RSi8UcDlkGAQQKBJrVanp6dDLBKsh7Ee5hjjt3DlRGZJQGhoKNiPAQEBwJKPHj0yNzfn8XhUXJLCBIZ+5GqjUOyh0WhSU1Pxn940j/vxINsbzZLgbqhUKhC8QAht3ry5sbFRq9WmpKS4ubnBRIFluylQmHjApXIIofr6eoVCAd+cOHECngiZTPZmsiQaWUf5b381YVkSejbVanVSUlJZWRmLxbK2tr537x6Px1u3bt3Q0BBUm1NxSQoTFbi1RiQSBQYGXrlyBbI3iYmJGo2mq6urqKiIz+e/UZVAFEuOAK4Oq6ioiIiIEAqFpqamd+7cOX/+fEBAAF7m4Y2aIhTeKOAZrtFo0tLSIiIiwHk6fPgwQqioqMjCwgK9YSXDz1fZMmFZEhmKZlks1vLly69du+bh4VFeXr5p06ZTp04hQ5Ht0+QpKVAY7wBbUiwWI4Sam5u3bNnCYrF0Ol10dLRAINi0aVN5efmbVgxHseQIQF4PISQUCp2cnBISEkxMTJKTk42NjR88eIDesFZ/Cm8gcI0khCADAwPv3LkjlUqTkpJYLNayZcv0ev3w8LBEIhnrkb46UCw5AjAzeDweQujAgQN2dnbLli3btGmTnZ2dXC4HiqRy3BQmMIAEgRTEYvHRo0dPnjwpkUguXLjQ1tYWGhr6BtoKFEuOAKx+gxCSy+VVVVUmJiZffPGFsbHxsWPHcAUZxZIUJjDwPIdMZnl5+bJlywYHB0+ePOnh4QF9im9ayTDFkiOg1WqhE1GtVj98+HD+/PkffPDB7NmzW1tbEUkCY6yHSYHCywK5QxEC9HPmzKmuro6Pj3d0dOzq6oLv36jQPMWSI4AMehY6nW54eNjZ2fmtt96aO3cuYYhqQ25HrVaP9UgpUHgpABMSSAFsxhMnTnh7e9vY2CQmJuJSuTeqzONVsCQiNX4CASkUioGBgbKysuTk5NOnT58+fTojIyMnJyc5OfnUqVMJCQkJCQlZWVlZWVnp6elHjx5NSEhIS0tLSEg4ceJEamrqqVOnYPvMzMy0tDTYMicnJysrKzs7Ozs7Oycn58yZM2fOnMnNzU1PTz927FhaWlpSUtKZM2cyMjLOnDlz+vTp/Pz87OzsjIyMs2fP5ubmFhUVnT9//syZM6mpqfCrvLw8U1PTP//5z0uXLk1JSUlLSzt58iT89uzZszk5Obm5ufjQGRkZubm5KSkpcNyCgoLMzMyzZ89mZ2fD53PnzsGWubm558+fz8zMhF3l5OQUFhYWFBQUFRVlZ2efO3fu/PnzRUVFMKS8vLycnJyioqKCgoLs7Ozz58/n5OTk5+cXFxefPXv26tWrV69evXDhQklJCXnVM6y8/0y3icJrC1yaA9yk0WhGvafhvpO7jPEj/fg3j2+AAbVuer0e71+j0VRVVbm6ui5cuLCiogLCTfBXPN8ePy7shKwzBhvjWmNgW9B7BcsUTvDFXreXCv1TgDd4ZpbEVjp8SEhI+OKLL0JCQiorK+vr6y9fvlxVVVVeXt7a2vrw4cOKiop79+7V1ta2tbXdvn37/PnzWVlZdXV1t27dunv3bklJyc2bN2/fvl1WVnb//v3CwsKbN2/euXOnpKSksLDw6tWrVVVV165du3Xr1qVLlyoqKi5evFhQUFBZWXnr1q0rV65cu3bt0qVLxcXF169fLyoqKi8vv3v3bm5u7rVr1+7cuQMUdv78+YKCgqtXr547d+7kyZPA5kCdubm5hYWFubm5wIBZWVm5ubm5ubmZmZk5OTkxMTHZ2dmpqamXLl06cuTI+fPnk5KSUlNTExMTU1JSDh48GBsbGxsbm5KScuLEib179yYkJCQmJgJXpqamHjt2LDk5OSoqau/evYmJiYmJiUlJSYmJidHR0eHh4YcOHcrJyUlKSgoLCwsLC8vNzT169OjZs2eTkpLc3d0XLFhw+vRpKOAAlqTiAxMGIpEI7Ayy2D7Z5mTLVQAAIABJREFUuhlFWAA8AZ74V0QSs3gceKFEsCiXLl36j3/8g8vl4gGo1WrMg3j/wHTk5bRG7RYzJmFIpqvVarFYDD8cXzWYL5gl8RWHS9zQ0GBvb19cXFxTU9PR0TEwMECn0/GBhULh0NDQ8PAwNEKxWCwWi9XV1aVUKgUCAY1GYzKZWq1WqVQKhUKNRsNms3U6nUwmY7FYNBoNAs9CoVChUDAYjOHhYZFIRKfTIS1DEMTw8LBKpRoeHpbL5QwGA6KQ/f39Q0NDHA6HxWLx+fyenh4OhyORSCQSSU9Pj1AofPDgAZ1Ob25uZjAYMEIejzc0NNTX1zc0NMTn8+Vy+dDQUEtLi0AgGBoaUigUHR0dSqVyaGiIxWLBrrhc7sDAQHd3N5PJpNPpnZ2dYrEY93tJJBKhUIgQYrPZvb29crlcJBJxOJzW1lY+ny8QCGB4dDq9p6dHLBb39vay2Wy4qjwer6Ki4rvvvrtz586op4JiyQkATDEwVSDsg0UPwbQkMxEmL8Lw9BEEMYrUyJYj7AQIDgCHkMvlsAc3N7e5c+dicVWIR5F3QjyJcMmCY7Bz/BPCYOSSefm5VyscE7xgliTfRYVCER0dHRISUltbe+3ataqqKrFYrFAoWCwWj8fjcDiDg4N8Ph8hJBaLxWKxSqWSSqUSiQRuTH9/P2FQ7lEqlTwej8fjDQ8Ps1gseBGp1WoydRIEwWazgV8gyMJisQQCAfCRUCgE40sikXA4HKA/kUjU19fHZrPZbPbw8DCfzxcKhXw+X6VSATkymUw2mw2jZbPZdDqdy+UihBgMBp1OB2rj8/l0Ol2pVEqlUhgGn8/ncDgMBoPBYCiVyuHh4cHBQZlMhomSx+PBURQKRV9fH5fLFQgEcGW4XK5QKOTxeAqFQqvVwhlJpVI6nT40NIQQEggELBbLxsYmPj4e248URU4YIEOIsLu7OzEx8eTJk7t3796/f//BgwcPHjwYHR0N/z127FhmZubJkydTUlLAQcnKykpKSkpJSUlOTk5KSkpOTj558iQEdu7cuXPz5s2Kiory8vLS0tLCwsK8vLzCwsLz589fuHDh3Llzly5dys7OLikpKS0tDQoKMjMzKykpKS8vB1+toaGhurr6zp07N27cuHbtWkVFxd27d+vq6lpaWqqrqysqKurq6tra2urq6q5fv15dXX3jxo1bt241NTXV1dXdvn37wYMH9+/ff/jwYVtbW319/dDQEDyJY32lXySe2ePGbwmdTufi4nLgwAGpVEqj0VpbW5lMJpb85HA4AwMDIpEITHH4fmhoSCqVggHY3d2NEAJyhOAmj8djs9nt7e0sFkskErHZbDAeJRIJmHiDg4MCgYBOpwP5MhgMPp8PNAeGal9fX1tbW1tbG41G43K5SqUSGFMoFMpkMrAxVSqVRCKBY/X398vlciaTyePxZDIZh8Pp6+sDOgP+4vP5Q0NDYDByuVzwU8BkHhwcHBoaEggEIpEItunt7e3q6urv7+/t7R0cHGQymWKxmEajCQQCeLtyuVzIvAMz6nQ6uVwuk8nYbLZer+fz+aBtJZfLL1265Ovri30iiiUnDOCG3r9/PzAw0NfXt7Cw8MiRI0ePHj1+/HhiYuLBgwcjIyMPHDiQmJh46NCh2NjY6Ojo/fv3Hzly5PDhwxEREfDN3r17IyMjo6Ki9u/fHx8fv2/fPojtREZG7ty509/f39fXNzAwMCAgIDg4OCgoKCQkxMvLa+fOncHBwceOHQsKCgoPD9+5c2dQUJCLi4u/v7+/v/+WLVvWrVvn4eGxadOmrVu3wpdeXl4bN24MCAjYvXv3jh07tmzZEhAQsHnzZh8fn/Dw8JCQEF9f39DQUFdXV09Pzx07dvj7+0dFReXn508wEZnnjEvC8+zs7BwWFgakAy8QuVwuEAiGh4eFQiGdTufxeOALg7kONEoQBLiWCCGRSAQ/hAU6gCnYbLZQKMTOCESCgSy4XC6fzwclNKVSCc47m81WKpVarZbP5/f393M4HJFIBIt+MBgMDocDY+bz+SwWS6FQgEEnEAhAo1QsFsOYZTJZf3+/SCQSCoWwDQS/gddEIhGMmcViyWQygUDAYDDAcQYjkcVi9ff39/T0AMkKBAKBQMBkMplMpkQiwW4+0DfYFAwGg0ajge8/ODio1+vhELGxsVu3biWHfqjSzokBMCR9fHzOnj0rkUiUSqWepG+m1+vBF4aNNRrN8PAw/Fev18MzggXQQEka1qaHVDUYKHK5HFQjgargQYCnDAwUWJyZrGMApoxUKoUYJcTBFAoF/JcgZXXg5/AUg1MIx4VODY1G09jYGBQUNDYX96Xh2VgSzB+4ncPDw66urjExMWw2e2hoiMFgECQPH9xhpVLZ2tqKlRzBWR4eHgafFO4EpHQ1Gg2EDoHO1Gq1RCIBC5HH44EAFNAcTAvC4K2D/8tkMkFVVygUqtVqoC3gNbDgeDzeo0eP+Hw+MDiPxwNXncFgyGSygYEBFoslFAp7e3uB9e7duwehSbVaLZfLIYoKhAukLBKJ4BsOh9Pf38/lcsHZ7+/vFwqFwKoymUwikYAFTe6YBCqUy+U4zgtXDy9YdujQoR07diDD4hMEQcBKZy9hAlB4pUAIZWZmWltbg9GADGvRAGBi46glYVgBFIcCceEOmViBB/EqN8Bi2AWBGQVmjVQqBQZUKpX9/f3w/qbRaARByOVyYFKwPyD0BDYKjEEulwuFQnJmAoYEfA2HgwTDuXPnqqqqxvY6v1g8c1wSrhFcuA0bNhw/fhxuJ4fDEQgEYOXJZDJ4vBUKxe3bt3t7e3t6etra2ng83uDgoFwub2lpAWcZqK2jo6OxsVEul9+8eROsMHCHsYEG9CSTyRobGyE0id1hoVD46NEjcLr5fD4Yj1wul81mg7E2NDTU0dHBZDKhnhwaV5uamh4+fAipIaFQ2NfX197eDuR19+5dsVjc0NAArjpBEBCCpNPpYB13dHS0tLTweDzI4zc0NNBotM7OTjhfuEQDAwP9/f1AkQqFAixKeE/QaLTBwUEej0en05lMplQqZbFYMIn1hpaylJQUX19fNLIGaHxVV7xRGJW+gMmPzX+wyOBPBEHY2dllZGRAQAZTIfwE3qy4bQxMQkSKWUGYHh8Cr7cMMSjgU9gn2BPwlGGzEegPnDYwL4aGhmQyGYxfrVZjvkOG+go0skUNvCt4zIFJwVOEs4AtHz58uHnz5rG5E88FfOOetsGzsSRcPrAWtVqts7NzVFQU+NRwreHmSSQSJpMpEolaWloOHjzo7u5eVFRkYmLi4OBgYmIye/ZsBweH6urqwcHBgICA7du3e3l5WVhYODs7Ozg4fPLJJ3l5eTweTyAQdHR0VFZWSqVSoVAIyWWtVisUCsGvp9FoCoWitra2tbVVIBDghAkkqblcLo1GAzpubW3dv3+/mZnZvXv3ent78/Lyli1bdvjw4fLycogk3rhxIz4+vry8/MGDBxs2bLh+/TpQcFFRUUpKSkFBwbFjx/bu3bt27VoHBwdra+tvvvnmypUrDQ0NfX19Dx8+zMnJcXZ2vnv3bmNj461btyoqKmAliaNHjw4MDDCZzPnz5588ebKwsPDRo0fA5jB3h4eH6XQ6WJfg8sNz4uvr6+3tTb7ghKEwjcJrC2A3IAts2eF4ETLE9C0tLXNycuDu4w2wlB/8F1xpnA8cHBzU6XRisRiWBUWGskSdTqdSqSD+A6EhvFvMbiqVSq/Xg4EJzg04OuBFQWRseHgYYlkikQhbr2AbSiQSIGiIFYjFYoIgoC4Fnym2K4HuW1pafH19x/RWPBtePEsSJKV4Nze3ffv2gfPY19eHSJV9YLVBdK+tre3u3buTJk364osv3nrrrf/3//7ftGnTGhsbFQqFl5dXRkaGmZnZ+++/7+TktH79+qVLlzY1NTU1NbW0tKxZs+a7777jcDhyuRy4EhgQIRQeHr5v3z6lUtnR0dHU1ATzSSwWQxxHJpPR6fSHDx/29PQ0NzdbWFh88MEHn3766SeffBIZGblu3br333//vffemzNnTlJSEo/HO3369FtvvfXZZ59ZWFgsX7787Nmzzc3NbDb75MmTQNw5OTnW1tYODg5z5syxs7ObOXNmdnb2Z599Nn/+/Lfeeusvf/nLxx9/PGvWrP/7v//74x//OGvWrKqqqq6urtLS0u+///6DDz74r//6r7feeutPf/rTzJkzgdMhJQVdYuDUI4T4fD7YF/Hx8V5eXrgajhygpPAaQqlUwrTHQfBRIPOmhYVFbm4uQRAKhQKTi1arFYvFer1eIBAMDg7CNOjr66uuru7q6oJXPjYYCYJgMBjNzc03btzo7e2F/VdWVsKxIPgoFAo7OjpEIpFer+dwOI8ePdJoNBD0hwRmZWUll8ul0+l1dXWQ7bx27RpYIfDw8ni8O3fuMJlMYFu5XA7c3dTU1N7ejgxN4hArwM0mMpmso6PDy8trjG/Js+AFsyRmQPjvunXrDh8+TBAE1LLA8wxxXLjKGRkZH3zwgbW1dXt7+7vvvvvRRx998cUX//3f/z116tR79+5BY+mWLVu+/PLL3//+90uXLv3oo48++OCDoqIiuVxeV1c3b968efPm5eXlgYvd3t7u4eHh5ubW0dExefLkjz/++MqVK8HBwQkJCXK5/OzZs8uWLbtw4UJra+ujR4+OHTuWkJBgYWGRmJjo5+e3Z8+eixcvYs2L7OzsnTt3+vr6dnd3NzY22tnZ7dix4+jRo6tWrVq9evXvf//7vXv33rx5s6Wlxd7e/pdffrl9+7ajo+O77777xz/+8Ycffpg1a9bdu3dbWlrKy8svXrzo4OCQkpISGxu7fv36nJyc4uLikJCQSZMmxcTE5OXlPXjw4OOPP05JSXnw4MG1a9cQQgKBAAKgbDYbqjghOCsUChkMhkajCQ0N9fHxIUb23lAs+doCkYq3wQqTSqVKpRKXzYHvBffRwcGhqKgI3C/C4FADV8rl8itXrqxatcrDw8PCwsLGxuZvf/ubmZkZg8HIy8tbt26di4uLt7d3ZGSkm5ubtbX1nDlzbG1tIcQfERHh6+vb2dnZ0NCwfft2f39/Y2PjqKgoFosVHBy8YcMGZ2fnuXPn2tra+vr6Wlpa/ulPf0pLS2ttbTU1Nc3Pz1epVMHBwX19fWDxQAFvQkLClClTrl+/7uHhsW3btvDw8ODg4BkzZixdurS3t1cgEOD5CQlJgiCUSmVbW5uHh8cY35JnwQtmSbxHuOuurq5xcXHwSiEMdULYnJRKpfX19enp6cuWLSsuLl60aJG5ufknn3wya9asTz75BLgsMDAQITQ0NDR16tQ7d+6cPHly5syZPT09fD4/MjIyNTW1oKDg22+/hYqtoKCg4OBgR0dHf39/ExOTlStX8vn8tWvX7t+/v7Ozc8OGDTt37rS3tz9//nx+fv5HH300f/78LVu2+Pn5mZqaLl269OjRo6tXr54xY8a2bds2bdq0d+/emJiY7u7uY8eOffnll/n5+ZcuXTI2Nvby8vL39585c6a9vf2SJUv+9re//fWvf/3xxx8tLCy2bdu2fPlyJyenL774AqZRS0tLf3+/o6Pj5MmT33nnnbfffnvXrl1QWmRiYjJr1qzU1NTCwsLPP/88Ojo6KSlpw4YNly9f7ujoYDAYkJUCaxE/MHANvb29t2/fjkYu3kSx5GsLzHRYWgI/JiqVatT67y4uLqWlpeAF48JsgiA0Go1QKLx586ajo2NycvK5c+du3ry5Zs2aqKgopVLZ3t4+bdo0f3//3NxcS0vLtWvXhoeHOzs7R0dHDw8P37x509fXd+bMmX19fSkpKR999FFQUJC7u3tsbGx/f//3338fExOzdu3a//mf/7GxsXFycvrll1+WL1/e09PT0tJSUFAQERHh4uIya9asjz/++Keffvrd735XWFhIEIRUKnV0dPT29l68eLG1tfU777yzbNkyU1NTWJcUTGAYPPj1cDpNTU3u7u5jdjOeHS+YJcn70ul0a9eujYqKwg64XC7H6R2lUtnX1/fo0aPTp08bGRldvHhx5syZP/zww7fffjt37ty//e1vEHZcuXKltbX14sWL33//fRMTk8WLF7/77rtZWVnXr1+PiooCbvrwww97enoiIyOnTZv28OHDW7duOTs7m5ubh4SE9Pf329jYBAUFBQQEnD17ls1m79q1a/78+RcuXDA2Ns7IyCgqKlqxYsWWLVv+8pe/LFy48MMPPwwPD6+vr7e0tNy6devmzZthty4uLs7Ozt7e3oGBgVu2bKmqqsrKyoqNjW1ra9u+fbupqemRI0dsbGyALt9555358+c3NTUNDQ0plUoWi7Vp06bq6uqjR49+++23nZ2dQqGwqqqqqKho9erVH374oZGR0e9///uPP/54+vTpkydP9vf3FwqFUA2K3y5Qrg/5IoRQcnLy7t27yRYKVTL5OkMsFms0GjqdfvLkyYGBAYjl4SQMWJfI0PtsZWV19uxZgiCgWgPCi/jBycnJeffdd+fOnTtt2rRVq1b9/e9/j4+P7+vrUyqVq1atOnLkSG9v76RJk2bPng0WQF5e3q1bt0JDQzdu3Pjpp5/u2bPH19d36tSp8+bN27lzZ3V1tVKpXLFixblz5/z9/d96662ffvppzZo12dnZixYt6uzsdHZ2tra29jTgr3/964YNG8LCwkQiUV1dXXp6ektLS0xMjLm5+TfffOPu7j537tyFCxdCYxikvHEMFLcD1dfXQ1R9vODFsyRB8rtdXFwiIiIIghAIBNCHBy8TsqNRWlq6evXq6OhoJyenn376yczM7Msvv5w1a1ZDQwOs2AXtB19++SXQ4g8/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" alt="" />

Relevant Link:

http://terryjs.iteye.com/blog/796277
http://terryjs.iteye.com/blog/812265

3. struts2的拦截器机制

拦截器体系是struts2框架的重要组成部分,我们可以把struts2理解成一个空容器,而大量的内建拦截器完成了该框架的大部分操作,比如,params拦截器负责解析HTTP请求的参数,并设置Action的属性

. servlet-config拦截器直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action
. fileUpload拦截器则负责解析请求参数中的文件域,并将一个文件域设置成Action的3个属性
//这些操作都是通过struts2的内建拦截器完成的

struts2拦截器是可插拔式的设计

. 如果我们需要使用某个拦截器,只需要在配置文件中应用该拦截器即可
. 如果不需要使用该拦截器,只需要在配置文件中取消应用该拦截器,不管是否应用某个拦截器,对于struts2框架不会有任何影响
. struts2拦截器由struts-default.xml、struts.xml等配置文件进行管理,开发者很容易扩展自己的拦截器

0x1: 拦截器在struts2中的作用

对于任何MVC框架来说,都会完成一些通用的控制逻辑,例如解析请求参数、类型转换、将请求参数封装成DTO(Dsta Transfer Object)、执行输入校验、解析文件上传表单中的文件域、防止表单多次提交
struts2把大部分核心控制器需要完成的工作按功能分开定义,每个拦截器完成一个功能,而这些拦截器可以自由选择、灵活组合
struts2框架的绝大部分功能都是通过拦截器完成的,当StrutsPrepareAndExecuteFilter拦截到用户请求之后,大量拦截器将会对用户请求进行处理,然后才会调用用户开发的Action实例的方法来处理请求

0x2: struts2内建的拦截器

从struts2框架来看,拦截器几乎完成了struts2框架70%的工作,包括解析请求参数、将请求参数赋值给Action属性、执行数据校验、文件上传,struts2设计的灵巧性,更大程度地得益于拦截器设计,当需要扩展struts2功能时,只需要提供对应拦截器,并将它配置在struts2容器中即可;如果不需要该功能,也只需要取消该拦截器的配置即可,是一种可插拔的设计

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZkAAAE7CAIAAACAE2t8AAAgAElEQVR4nOx9Z1gUydo2e3aPsgaMgGREyUHBAC5JQYJkxAwGEEWMYFrEgEqSIAsiQcWIiijKKkZUMCBBFAUMgCIoIDnODEzs+n4819RVDOo57/uCu9869w+upqdDdXXXXU8uEUoIIf6HQAhxuVyEEEKIx+PBNo/HQwhRFMXj8WAn3iOEEN8BIn91A4T4/w+YuXp6epqamlgsFmxjgmOz2SwWi8Ph8Hi8v7qxQvwoEHKZEP9j8Hi8np6eioqKxMRELy+vrVu37tixY9OmTWfOnMnKynrz5k1HRweQGpPJ/KsbK8SPAiGXCfE/BvDUq1evtmzZYmBgMG/evGXLls2aNWvRokWLFy/28fFJTU2tr68H8e2vbqwQPwqEXCZE/4DL5TY0NNTX12dnZwcFBa1aterGjRtsNpuiKB6Px+FwgAFBD/2rGyvEPxBCLhOifwAWNMDnz5+jo6MXL16cnJzM5XIpisKmNCGXCTFAEHKZEP2GtrY2hFBXVxeDwXj//r2ZmVloaCiTycS+AiGXCTFwEHKZEP0GDoeD5a/m5mZ3d3cvLy8GgwHkJeQyIQYUQi4Ton8AkRlcLpfNZkM0xv79+01MTDo7OxEBYdCZEAMEIZcJ0W9gs9lY+KLT6X5+fkuWLGlvbxdymRDfAUIuE6LfgBDicDjd3d0QWbZjxw4rK6vW1lYhlwnxHfCXcRmPAOyBD51MhfnaR48HBnkdEAewjRkOI+8lcC4eWuQp+Ej0TeDWYvMQRTjyBE6Hf9lsNjQP/4qPZ7FYcF8IXOByuRwOh6Io+BfbzuF4+JfL5YJ/kHyQAXpT/z3gMTGjHThwwNbWltQxobug5UII0b/4a7hMgKRIOoA9JCv99xC42v/09P8eAoSL+FQCO8lYKoDAATDgwcAEG19sLUWwA+YyrMfh6wOlAv39hYAHJJ89JiZmwYIFjY2N4BOgetO9EEL0L/5GchlJEFQfvvvauaRcRv70xcn/i8IgnAikQJ6OmeKL6HtlxJc4sMSEHwQLXHAkFk8wzWGA+Eb2hsDB2A9IipAUMQ38VSC5jM1md3d3R0ZGuri44HwmJJTLhBhI/JVy2Rc5BeQL+Beixr8GAXJhMplABKSoAhCgJDgdDiDHFfq/SXMCD9JXwsIKKfmwXzweIdTT00PSH+zEfNHT04MfFj9pf76h/xUQn7WZTGZXV1doaKidnV1TUxPWiHlCuUyIAcNfxmXfYIS+BCEAUgbBRwowhcClvn1TAIfDYTKZTCYTOI5kQwHweDzMkjgEAYYxFq+AjKBiBGyQ4VfwK0XQGRjCYD+Px6PT6YgQZMhn5BHaN9kJA/3Wvg14KaACw0ZUVJSzs3NrayscgITBZUIMJP5GOiZFUWAFRwh1d3fD2P42KL54hRkBKInNZvMIwzymHiAdoBWSv1gsVl9TOu+bBjuKP3oFToSrIYSAjDCpsVgs0LzgYKx5gWkchCz4l0fY+IEaoJwOl8vFwhrZOVgj/kveowCwEZDL5UZGRtrZ2XV1deGmCnVMIQYOfw2XAd2wWCwY4UAuHR0dra2tPT09XV1dtbW1TU1NPB6v8Utobm5ubGysr6+vqan58OFDRUVFeXl5TU0N/PvmzZtXr15VVFRUVFR8+vSpurr6/fv3ZWVlb968efv2bVlZWXFxcXFxMRzw+vXrFy9evHjxoqSkJCcnp6Sk5OXLl7m5uVlZWVlZWY8fP37wFdy9e/fOnTuZmZm3b9++e/fugwcP7t+///jx45SUlD///PPOnTvnz5/PzMz8888/L1269Pz588uXL2dkZJw6dSo1NfXu3buJiYmXL1++dOnS4cOHk5OTk5KSUlNT09LSYmJikpKSTp06dfjw4aSkpLCwsOjo6H379oWEhISEhOzbty86OjoiIiImJubWrVslJSX19fV0Oh2o+S95lSQQ36HB4/F6enr2799vamra0tKCZyyeMCBDiAFDv3EZTLwsFgtyVnh8pxs2BnO53PLy8rS0tBs3bgQHB5uYmNjZ2RkaGmppaTk4OBgbG8vLy9vb2xsZGS1btkxTU3PWrFnW1tYaGhpaWlo6OjqTJk3S1tbW0NBQU1ObNGmSrKysmpqarKysioqKhISErKyspqamuLi4kpKSmprayJEjJ06cKCcnJy8vr6KiIiMjIyMjM3HiRDExMXV1dTExsUmTJsnIyAwZMmTSpElqamqjR4/W09MbPXq0pqamoqKijIyMhoaGuLj46NGjtbS0xo0bp6ioOG7cuPHjx2toaEhJSUlLS8vJyUlLS2tqakpKSmppaWlpacnIyKirq8vJyWlqak6YMEFSUtLIyEhWVnbixIm//fbb2LFj9fT0pKSkNDU1jY2NxcXFNTQ0tLW1xcXFFRUVFRQU5OXlxcXFJSUllZWV1dXVx48fP2HCBB0dHXh2PT29qVOnTp8+3cDAYMaMGZqamjo6Ourq6qqqqlpaWq6ursePH8/NzQV5jUajAWWAh/T7AHsnsAgWGxs7a9asz58/IyKKRchlQgwQ+pPLIEgS0N7eDmoUi8UqLy+Pj493cHBQUVHR0tIyNTVduHChnZ3d2rVr3dzcHB0d169f7+bmtmTJEn9//02bNoWFha1atWrHjh179+5dt27dhg0bNm/e7Ofnt4uPkJAQPz+/0NDQgICAyMjIwMDAiIiIY8eORURExMXFHTlyJDQ0NC4uLiYm5uTJkykpKSdOnDh16tSFCxfi4+PT09NPnz5979695OTkqKiotLQ0EJ2ePXt2+/btwsLCrKyszMzMp0+fgsxVWlr65MmTZ8+ePX78uLCwEP4tKioqLi4uLCx88+bNkydP3rx5U1pampeXV1pa+vz583fv3lVUVLx69aqjo+Pt27fV1dVtbW0lJSVNTU2vX7+ura2lKKqqqqqjo4NGo9XU1DQ3Nzc1NbW2tn7+/LmhoaGzs5NGo7W1tbW3t7e3t9fX1zc0NIA02tLS0traCj/V19dXVlY+ffo0IiLCwMBg8ODBkpKSN2/exJMK1oW/G4CqQOft6emJjIz87bffGhsbMYsJuUyIgUO/cRkWxKA4Mia1goICeXl5SUlJW1vbuLi4mpqazs5ObO6BZBdsTsKfO41GoygKTEVgjKd6m/lB9GAymaTxiLSjY+cmXATGNhinsDG+ubkZBEYcgIrFGUSgu7ubx+MxGAzY393dDUeCmxVawmKxoIYqr3eoLb4U3AI3taurCx4KHoH0J0B/Cog5fcFkMqHrEEI1NTWPHj1av369nJxcbGws+G2xEfD7ABsoKb5D89ChQ7NmzYLiGVgLRn+PsF4h/nnoTy7DjACj6NmzZ0uWLFm0aNHx48erq6vB8o341nE2mw0kBV85/O3p6aEoCjRTslo89hJgIzcZmQUeA2AB2MB/gRmxh7Gnp4eM4aKIuDDMHRDxgHqHfcF+HFiAo9uBhmAbH8nlx/djiz74Inj8qDfcQmwLhz1ATAKBI18E5n3sReVyud3d3UVFRSYmJtbW1pcvX/7ORjT8+LCBuQyL55iFhVwmxECgn+1lwFY0Gu3atWtjx461t7cHsQUPVDy8SckFe/dA0iHFui+GiX1RTqF6x3ZhdUbgLwALenBHfC/8K+avrwVAoD7xEF+8Eb4g+npohYDUKfBQAj2MO62v1Nbd3Q1EvGLFitGjR4eFhXV0dPTX+/1vgLmMoigOhxMbG2tubi6Uy4T4PuhPLmtqagJ2yM3NlZaWNjU1hTEGahRsgOyGRQkyIweAA7XIaCw8sHm9UyDJkdOXAjBNwCkgGggciY8X0Cv/I6ivhLbhVuH29yVfqjfl4U7AzcYP+x/vTqfTSTMlBEDQ6XQ3N7fBgwefO3euv97vf4SAjokQOnLkiI2NjdBeJsT3QT/by1gsVmNjo4yMjKWlJTAXKeyQI58ipCeEUHd3N1bcviEKkSO5LyuRkk5fIgC2whYrrMqRl8WDjWwkRZR4JgXMvvdFfYQvfF/yIqRaDbohvgJuD8naAr1BEcyLT8TRLWBE4/F406dPNzU17a/3+18C8VVsNpt96NAhMzMzoR9TiO+D/pTLwDISHx8/ceLEzMzM5uZmgcFJEUKHgMyCDU+YI3DGNbZSUXz5C8tZ2AzfNyAA+yJITqEIgQjGGzbu4BsJcAfix9P2pTCKH+aOGy/QErC7YWsdtseRZIcD5TG3knQpkOSELyUgRWInAKbg7u7u58+f//rrr4cOHcJ3wX3eXy+dBH5w3EVhYWELFiyA+DLcfiGdCTFA6E8uY7PZOTk5CgoKCxcuhCgzTCLoK8pdV1dXX+WOoihgAZIRyKthD0DfE7nEctlfvCMiRDPyItgbgPhOSdgAmuBwOLidWKdjsVg4EB/1ThUgb03xxSiSm0C/xvtJIgbximxwc3MzELGAsMlgMEgFE/VWzBsaGmbOnKmvrw+TCunt7a+XLgDwrsAro9PpJ06cMDIy+vTpE9Vbcf6e3lUhfhz0G5fBoDpy5IiEhERBQQF81mSsA1jZGQwGaFVwPB54uAwObMCvMNQxLcJPQC54DAMpUH2kP4qfXUDxpTC4OMUP9SAFQBjeOINKgDKApMi0ISwfCdyUBEVR8KT42fHxJNGTF8SRxviyAkfilHJoElnHlcPhQOYjPpjNZh88eFBEROTevXuI8CQOnOkdro8Llm3YsGHOnDlVVVWoj3lxgBogxI+M/pTLenp6zM3NLS0tMUfAyCEZTcCchGUuLEwJGMsgwgMOwDFl5NWwjiZggBdQ6PB+zB3fEN94/IzIvoTLZDJpNBoW6Oh0OrAzIrRF/FCkIQxMh5is4ZSOjg42m81gMHjECpJwMOYpOp2O5R3MR2Q+KZ4zoOWkpFZYWKisrLxz507SrIYGUsXD6j+LxYqMjDQyMgJ7GXZD4xchhBD9i37jMg6HU1xcPGbMmMzMTEioxj9hMsLsQ9qzsIgBAa444gzbsBERrYpDunAMFw7sAuD9VO/CYViSgrtgIoAGgGjG4derIXmWbBVuEljQ4HZYT0REnBopBmLRDMeXwLNgzRTrmAwGg81m02g0WJatpaWFwWB0dHSAggl5l/giwHdYZYOb4qfAfbV161Y1NTUcfPftMkr/F+BXgDPhd+/ePXv27NraWsS3YAqNZUIMHPpTLjt48KCsrGxbWxuEpJLyxZMnT/7888/r169DtBHil+tDfDmLIoqatba2vnr1Cl8BSKSioiIiIiI+Pj42NragoAALX2REKFyZy+Xi+2KiwfJIV1cXLj6BSzhAGwICAh49ekQKYtjqD+JPXFzc6dOns7KyPD09ly5d6ujoCO3ErIcfTcDLCQeAXIl5/PPnz4cOHerq6urs7CSFyq1bt8rIyEhISEhISJw5c8bc3LywsNDV1dXf3x8htHHjxtTUVHwXcIAgQkvFfgCKophMZnh4+NixY2k0GtavB07Fw1Ihg8Ho6uo6duzYjBkz6uvrya4YoFsLIUS/cRmXyw0NDV25cqWALZ+iqHfv3jk5OYmKig4ZMiQoKKi8vNzb2/vJkycURSGE6urqSBs8nU6PjY11d3evrq5GCDU0NDQ3N3d1dZ0+ffrnn38ePXr0sGHDlixZUlVV1dTU9PnzZxBASkpKwEAOnFJTUwNpjwihlpaWgoKCly9fAns+f/48IyOjubm5oqLiwoULT58+hfvSaLTx48dHRUUhhN6/f//06dOsrKzExMTHjx/39PRcu3YtNDRUXl5+2bJlFy5cGDJkiIuLy+rVq6urq8vKyu7evdvQ0BAbG/vs2bOysrLIyMhTp05B+69evRoYGOjv79/e3n7nzh0wHgUGBt6/f19XV1dWVnbbtm0sFmvLli1btmyprKzkcrnm5ubjx48/evTomTNnHjx4MGfOnLKyMj09vZkzZ65du3bEiBHa2tqFhYXLli0zMDAICQmpqanJy8uzsbGZM2fO48ePERG+hxA6fPjw+PHjGxoaEF+hHlBCQYQiHBgY6OjoCOYzqndk8sA1QIgfFv0plxkbGzs6OnZ1dYEAgk08ra2tYmJiFhYWvr6+Bw4c8Pf3FxUVXbRokaOj4/jx45WUlAICAvT19V+/fl1SUrJ69WpxcXERERFnZ+f9+/ePHDly7NixLi4ucXFxxsbGJSUlLi4usrKyxcXFkyZNkpCQsLOz09LSEhMT09fX37FjB0VRxsbGw4cPHzVq1KZNm969eycrKzt27NjBgwdfuHAhLy/v559/lpeX37Zt26BBg0aOHCkmJrZr1y6Kos6ePTtz5kxXV1c6nX758mVJSUl9fX0oa3H16lUREZEpU6b88ssvNjY2V69elZOTi4mJuXbtGkIoPDxcXFx87ty5ampqT5488fLyUlNTk5KSWrNmzaNHj6SlpVVVVYcPH75kyZIlS5aEhYU1NDSMGTMmKCjIw8Nj+PDh5ubmq1evnjBhgpKSkpGRUVdXl5WVla6urq+vb3x8fH5+/i+//JKcnGxoaGhtbe3t7f3TTz+ZmJiEhoZOmTJl1qxZ8vLyDx48iIuLk5WV9fPze/XqFeod6bJv375Ro0Y1NTVRfGMWqf73L8g5jMPhBAQEWFhYVFRUkHIZaQdAva2oZP4DxPfgipVkOLHABtgTEWFDJOOxUR8/OCIsueTxpBOJIqLhcAQM6WIiXeGkhRfL4KS5lvRTCcQMYjuDwJHk42MXENwIu1bIspd9rwmnkLfD/UNaRSgiphJ+hcGL+EvqIITwqoBg+oB3jfN5yBQauKZAe8gcFS4RHk/arMlTyIRu8qPCnUAahcl6ef3GZV1dXZMmTZo3bx7W+3BcWGVl5eLFi0VERExMTIqKig4fPiwqKpqQkCAvL29lZZWVlXX9+nU5ObmCgoLXr1+vXr3azs5u2LBhCQkJHh4eysrKJiYme/fuTUhIGDp0qLKy8r/+9a+FCxfm5ubKycnt2bMnISFh0KBBy5Yt09bW1tTUrKurc3Bw0NTUDA8P/+2332g02qdPn4KCgkaNGuXq6nrp0iUREZFr167NmTNHVFTUyspKQ0NjxowZDQ0NBw8eXLly5fjx44uLizMzM8eOHXvp0qVz586NHj3a399//vz5z549k5OTs7S0vHbt2uDBg2VlZRUVFRkMxqdPn+zt7UePHh0XF9fa2qqpqampqSktLW1iYpKenj527NgrV668evXqyJEja9asycjIaGhomDRp0vnz548dOyYpKfnu3bslS5YMGzZMW1tbSkoqLy9vzpw5ysrKUOQnMzNTREQkIyPD2NjYwcEhNzd30qRJJ06ccHZ2lpeXl5aW/ve//33o0KHDhw9LS0sXFRXhYrZgLGMymUFBQWpqali1x59Iv0PA+YsQ2rdv3+zZsyEiBNrTN2m/71eLE9oAWGUGiyp5ent7O15gGH/QpAuF9C+DbZTsB3IY4J14m0ajCXgqMImQxgRsBSYbxmQye3p6sE8GO6Op3qXSyahAsKUghCBNAhH5fHAWrtlJ8eNaSFMGjG14OvzIpJ8dbtrV1dX3NXGJSg3kidjyC72HOY706eM+gbeM+Jkn2KoDz97T08PhcGCbw6/GjHoHUYGCJdByNr+UKeLPE1TvNB787BwOpz/lMiMjo+XLlyNi6SAI1OLxePfv34+Ojh4/frysrOzTp09VVVUvX748Y8aMEydOIITu3LkjJyf36tWrtLS0nTt3nj59Wk5OrrS09MKFC+PHj5eQkBg9enRoaOiMGTOuX79+/vz5zs5OiqJUVFSSk5OvXLkybNgwKGFmYmLS3Nzs7e29Zs2ae/fu6evrp6SkaGlpKSoqioiIzJs379KlS1paWh8+fDA1NR00aJCKioqlpaW7u3thYSFUPRMRETl37lxKSoqamlpHR8f58+clJCT8/f2dnZ3Ly8s1NDRcXFxu376tqKh479699+/ft7S0dHd3T506dejQoX5+fvn5+RoaGiYmJjY2Nhs3boyKipKVlU1KSsrIyNi5c+fatWsTEhLS0tLk5OTi4+NPnDihra1dXl5uY2NjZGTk6enp7+/f2NhoaGi4dOlSiqK6urrKysqGDh168eJFY2NjCwsLaMOOHTtcXV319fXt7OycnJzev39/8eJFbW1tMkQDD54dO3ZMmDDh8+fPpFW+v146CVIYhO9h7969xsbG4McUEJ2o3iWzceQdOApwcQH8QePBA+4RkiO4XC6dTufyi+4ioigxzOEURZHrDVNE1gR2VSOE6HQ6cBNFMGlXVxdOC4N/sdETron7HEY1j1/lBT+dQOYsucIeGXMjIMvQaDTy8QXWfsd9QopgGFiugTZD92K7KiICnqCdAjHqQMR4D1wExDE2m33+/PmAgAA6nU6n03EoOG7q7du3s7Ky4Nzw8PCkpCRECJs8Hi85ORkhlJmZWVxcjAhbObkmGQ6Qwl0HS6zCi9i+fTscCfyIz+LxeP3GZUwmU09Pb/bs2RDASZrPCwsL5eXlFyxYYGdnp6Cg8PjxY21t7ZiYGENDw5SUlMbGxszMzOHDh+/Zs0dfX3/dunVJSUmDBg06cODAn3/+6evru3z58kGDBvn7+1tYWMA129raeDyeoaHh27dvHz9+PGLEiLlz586fPz81NbW5uXnq1Kny8vIWFhZ2dnY7d+4UFRXV19eXl5f38fG5cOGChIREbW3t+vXrFRUVlZSUZs6cGRUVde/evTFjxgQGBv72229OTk4ZGRmjRo0qKCi4cuXKL7/8cuLEiXHjxhkbG4uIiMyePfvWrVs//fTT7NmzjY2Njx07tnjxYkVFRV9fX0lJydTUVHd3d0lJyWnTpiUlJZWVlY0YMUJWVlZaWnrdunVbtmyRlpYeOnTo0KFDz5w5c/ny5XHjxpmZmUVGRsrJyUlISISGhlIU5e3t7ePjA2+roqICKHvGjBkuLi7t7e3y8vJqamo7d+5UUVEZPny4qalpTk7OoUOHnJycOjs7YeIiv+zQ0FBJSUmYNrHvuL9eOglyLgU62717t76+PtgNAQJHAiAkBfWupUFqVQCsoFFE1IuAB4lkTCzp4FvjPDlECA6Ir3TjzxWGkEAaHGnSJat+k+RFCkqwegvF11iBjEAd/vDhQ11dXVNTExzc0dGBZRPgU0S4wsg4aiwq9s2fw/3Q0tKCfyVdcAihgoKCR48eZWZmZmVlQTOKi4uZTGZZWRmPx6PT6RRFcTgcXL0dzx9YIkMI3b17V1JSsqioCHdOd3f348ePYabctGlTUFAQnU7/9OnT5MmTTUxM3r9/D736+fPnjIwMPT29kydPXr9+3cHBAX8Y0M4vSseIz/7wKvPy8lRVVVtbW0kdE7q9P7mMwWDMnj1bV1dXIBIdunv16tU6Ojra2toJCQkIoU2bNm3bts3Ozi4nJwc+Mnd3dyMjI319/bi4uEuXLtnZ2S1btmz79u3Tp0+fMWPG/Pnz09PTz549CwQMb3rt2rX3799HCAUEBJiZmXl5eWVnZyOEzM3NpaSk1q1b9+zZMyaTGR8f7+TkFBoaevjw4Y6OjoULF0JPXblyxcvLKz4+vra2tqqqKj4+ns1mx8fHBwYGVlVVnTt3DiFUXl5+5MgRDoeTlJQUHR19+PDh27dvs1is+Ph4Pz8/aGpqaipY3Pfv33/r1q26urozZ87ExcV1dXXR6fTXr19funQpISHh48ePHz9+vHLlytWrV3NzcysrK9lsdn5+PkxQT548efXqFegIz58/Ly0tRfwZEuxN79+/Ly0t5XK55eXlubm5LBbr8+fP6enp8OXxeLyPHz+S4WygUnG53OPHj4uLi2N1Bg08l+GRCXIZ1jGp3qF8FEWRoYJ1dXXBwcGLFi3atm1bS0sLQuj+/fvQD1DrjRy3cEGQjG7evPnixQsgBdIxvX37dgMDA0NDwxUrVoC4h/g0ROaWIYL1cPQM4gtNoBBBnTtQfoFk4W9HRweTydy/f//kyZMPHjwIV4DSewLchBB68+aNmZlZeHi4jIyMmJjYsGHDxMTExMXFk5OTQQrDC7wDjeIMCug3cAfjenxwWSjbGRwcvG/fPszUoMG1trbif6HKloyMjJycnJSUlIqKSlFRkb29vaOjY2Rk5Ny5c2tqagwMDDIyMvB3AplnWNptb29nMBi7du1avHixnp6emZnZsmXLbG1t3d3dsZWmtLTU1tbW39//4cOHUVFRy5cvDwgICA0NraqqgjGuoKBgaGhYV1d39OhRc3Pz169fp6enk7yMXx9scHpXl2Cz2U5OThEREZ6enqiPNMpkMvszviw6OlpOTu7Dhw849AnxJzSsDEPPgvpJauk4+AjHlCL+JAnUC1MlzqnEQWrYNgT0zGQy/fz8jh8/jmOvcDA9nuKwEA4fCr4XVl4gK54iMswhOAOfhRcWgcZA9CwipHecJ4QIfYE0QyBiuXJcNJHNL0ZG8ZdEofjFGkm7LzaXQIfg54LjSZmCy+WCPAvKFBZb+uulkxDQzng8XlBQkL29/adPn8jIMsSvcEeaXeh0up+f36hRoyIjIy0tLWNjY2NiYkaPHr1s2bLCwsKysrJbt25duHDhxIkTV65cKS8v7+rqSk9Pv3fvXlxcnIKCgoeHR3V1dVhY2MGDBw8fPpydnc3lcjU0NPbv33/79m0zMzNra+uGhobjx4+HhYVFRkY+evQoLi4uPDw8IiKiqqqKyWQmJCQcO3YsPDz85MmTbDY7Kytr69atW7duhemzsbExIiIiKioqMzOzoqIiJCQkPDwc5ryysrKJEyfq6+srKCjcvXuXyWTm5eX5+PgEBwdfuHABuOzGjRubNm3atGmTrKxsVFTUqFGjVq9eXVFRUVZWVlBQ0NnZ+eLFi6ioqKysrMDAwM7Ozrdv3+7cuXPNmjWBgYENDQ3V1dX79+/39vYGE0R+fv7u3bsLCwuvXr168+bNwMBAcXFxCN9pampKTExcv3798ePHQfRbs2bNkiVL1q1bl5CQYG5ufufOnaKiopaWFi6XGxgYuHjx4qtXr2ppaS1YsGDo0FMnIP8AACAASURBVKH6+vp3796Ni4tbuHChp6dnUlJSW1vb0qVLFy1a5Ovr++DBAx6PV1ZWZmho6ObmZmlpaWBgUFFRYW5uvnz58ra2tqdPn86YMcPKykpGRsbAwCAyMjI+Pt7GxsbR0bGhoWHbtm2ioqJeXl49PT1JSUmSkpImJiaxsbGdnZ2tra1Pnz7NycnJy8vLzs5++PDhs2fP7t27d/To0aKiIg6H8/Hjx4sXL4aFhR07dmzhwoVPnjzZvn17QkJCfn4+xDPB2O/PtUvKy8vV1NQgsAARwVlAFri4KznOwYKDp3RsmxSw8mIHHB4PpLJAzrHYRiAQzd/d3S1geMa3oHrbSknVHdopYNklpQMIpkOENkRmR+FzuV/KHkWE74zqbT8izdJYeBEIxEOEmZz8i1tCo9EqKytVVVUDAgIwTX+HFQCgJTQabefOnQ4ODiA9AXmRPSkQbBwbGysiIjJs2LCFCxeWlJQ4OTn99NNP7u7uDx8+9Pb2FhERWbRo0datWyUkJNLS0t68eTN48GAfH5/bt29PmjRpz549GzduHDt27OLFiy0sLBwdHRsbG5WUlKSkpAwMDMaPH+/t7f3582czMzNRUdHk5OTAwEAjI6OQkBA5OTkPD4/CwkJVVdUpU6acO3dOV1c3PT3d2tp6w4YNurq6w4cPT0pKun379uTJk+/fv19UVCQnJ2dkZOTh4fHLL78EBASkpKTMnDnz4sWLCgoK7u7uCCE/Pz9xcfHdu3cPHjw4KCgoNjZ2+PDhK1asuHbt2rBhw6KjowcNGiQiIjJ8+HAQzcrKyphMppmZ2ZAhQ/z8/F68eAFrRzg4OAwfPvy3335buXLl0qVLc3JyNm3adPny5cTERGlp6YsXL/r5+QUGBpaWlmpqai5atCg/P9/Hx2fo0KF37twZNWqUp6cnlN6ys7Nrb29vbm6WlpYeNWqUmJiYtbX158+fV6xYoaGhERQUZGdnd+/ePTExsYSEhLdv3/7yyy+KioqWlpZGRkadnZ0aGhqenp7v3r1DCGVnZ6uoqIwaNcrDw2P58uVgCbGysgoODuZwOC9evLCyspKSklq1atWVK1dKSkpyc3NzcnKys7Nfvnw5dOjQ4cOHh4aGfv782dPTU1JS8saNG9hsf+fOnUePHt25c6egoODJkyd5eXlv3rzJyMhobW198eLFsmXLYmJiYGTNnDkTPqfHjx9DoBWIDv3px0QIPX36VEVFxd/fHyJLsTCCg86xMa+/bioECYG1NRFCqampv/76a2FhIRaHB67/+9o7AgICnJycWlpayOmhrzcdWltbWxscHAwDeNeuXampqYMGDUpPT+dwOD4+PpKSkq9fv87MzBw6dGhCQkJxcbGysrKPj09lZaWent6RI0fWr1//66+/jhgxwtnZ+ciRI/X19ZqampMmTfL29o6JiYG7rF692sXFhcVibd26dciQIdLS0oqKijNmzHjw4MGYMWNmz57N5XINDAwOHjzo4eExderUYcOG/etf/0pKSnr69CkU+7506ZKEhMSIESPAcbR///5t27ZNnDjR2tp61KhRkydPptPpv//+u5KS0vPnz7W0tA4cOBAaGqqmplZSUlJXV2doaPjHH3+Iiora29snJiYmJiampaUBTbi7u0tLS9+6daupqUlSUvKXX36RlZVVUFCYM2eOhYXFn3/+iVWQI0eODBky5PTp09u3b9+6dWtZWZmqqqqbmxtCyMPDQ0JCoqGhwdjYWEdH5+LFi4qKips2bUIItbS0GBoapqWllZWVQbChi4uLubl5YmKioaHhzZs3Bw8eHBERUVpaKi0traOj4+Xl5ebm1traqqCgMG/ePITQx48fbWxsjh07JiMjM3PmTEVFxfT09JqammnTpp05cwYhdO/evfHjx+vr6+fk5Ojq6kJMlYGBgYeHR2VlZXFxsba2tqurq7Oz87hx4/T09IqLi3EMB+/rFQfIxRURQubm5l/7AvuNy8Bws2zZMkNDQ6z3Njc3C4gkoFn0102FIEEKZe3t7bW1tS4uLtOnT4egM9z/A5fGhKcumMYOHz5sZ2f39u1bMm8M8U0H5J7u7u4//vgjPDy8srLywIED9vb2p0+flpaWPnXqFELowIEDI0eObG9vBxfNoUOH7ty5IykpuW3bNoQQeG+OHj26d+9eAwODn376aeLEiWVlZdra2leuXMHlPxsaGmAhKxaLFRUVZWdnd+fO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GhXkufuNghAn5ZiqR8NfdkzeQ+DoN/3kcDRidmmWAYWqkoXGcpMff/xxVfwnhfzd8L9rw9OSsYyMVSKR2Lp169SpU+2iMCUTFeknvqPnuRJ2imcxB1vkDvJFp7Q8O0XuCXWrMDXVmJKPeuc2ow1LXo9qUrtyVfUKHo8HcX3RJciOAuRB0/lE8iEUCuFnpaamRqNRnLVoNBoOh2OxWCwW42joZOBlZ2dnR6PR7OzsMWPGpKen82KEmZsbi8VGjx5NGUcsFvsvY7FYLCMjY8yYMbm5uePHj7/99ttDodC4ceNyc3OnTJkyc+bMadOmTZw4cdKkSePGjcvOzh4/fvyECRNyc3Nzc3MnTZqUk5OTk5MzduzY7OzsnJyc3Nxcjj927NgJEyZMnjx50qRJEydOnD59+tSpU2fMmMFhJ0+e/K9//SsnJ+fOO++84447pkyZMm3atJkzZ/LfOXPmzJ49++677961a9egNbtX6v434pprrg0fG5LHZGIrDSv9/f1NTU1VVVVVVVUbN25cv359ZWXlihUrli9f/uyzz65bt+6ZZ5556aWXXn755Y0bN1ZXV2/cuHHz5s188tVXX3399dc3bNjwxhtvVFVVbdmypbq6urq6esuWLZs2beLNd955Z8eOHW+99db27dt37dr1wQcfbNmyZefOndu2bdu0adPWrVu3b9/+9ttv7927d9u2bZs3b965c+fu3bt37969Z8+effv2vf/++3v27NmzZ89777134MCBI0eOHDhw4ODBgwcPHjxw4MChQ4cOHTr00Ucfffzxx99+++3Ro0cPHTq0b9++Tz755Msvv/ziiy9qamrq6urq6uo+//zzzz77jO9+8803dXV1x48fP3r0aE1NzbFjx2pra+vq6mpra7/66quampra2tqampqamhqO+f333//0008///xzfX39jz/+eObMmR9++IFJl/X19adOnaqvr29oaDh58uTJkycbGhoaGhqampp+/fXXU6dOtbe3nzlzprGxsaOjo7u7u7u7+/Tp0/F4vKurq7m5uaur6+zZs01NTT09PUzz7Ozs7O3tjcfjPT09zNZsaWnp6enp7e1tbW3t6urq6Ojo6enp7u6Ox+OJRIJBnBcuXOjs7IzH42fOnGlra+vq6mpra+vt7f3tt9/6+vra2tpaW1svXrxI2mdwcLClpQWd9BsZmQtkrg1zS9bJcM0111z7TzQXy1xzzbVbwVwsc801124Fc7HMNddcuxXMxTLXXHPtVrD/Bjpe3Ewcp7qDAAAAAElFTkSuQmCC" alt="" />

struts2内建了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中

. name: 拦截器的名字,以后使用该拦截器的唯一标识
. class: 指定了该拦截器的实现类,如果我们定义的package继承了struts2的默认struts-default包,则可以自由使用下面定义的拦截器

struts2内建拦截器的简要介绍

. alias: 实现在不同请求中相似参数别名的转换
. autowiring: 这是个自动装配的拦截器,主要用于当struts2和spring整合时,struts2可以使用自动装配的方式来访问spring容器中的bean
. chain: 构建一个Action链,使当前Action可以访问前一个Action的属性,一般和<result="chain"../>一起使用
. conversionError: 这是一个负责处理类型转换错误的拦截器,它负责将类型转换错误从ActionContext中取出,并转换成Action的FieldError错误
. createSession: 该拦截器负责创建一个HttpSession对象,主要用于那些需要有HttpSession对象才能正常工作的拦截器中
. debugging: 当使用struts2的开发模式时,这个拦截器会提供更多的调试信息
. execAndWait: 后台执行Action,负责将等待画面发送给用户
. exception: 这个拦截器负责处理异常,它将异常映射为结果
. fileUpload: 这个拦截器主要用于文件上传,它负责解析表单中文件域的内容
. i18n: 这是支持国际化的拦截器,它负责把所选的语言、区域放入用户Session中
. logger: 这个一个负责日志记录的拦截器,主要是输出Action的名字
. model-driven: 这是一个用于模型驱动的拦截器,当某个Action类实现了ModelDriven接口时,它负责把getModel()方法的结果堆入ValueStack中
. scoped-model-driven: 如果一个Action实现了一个ScopedModelDriven接口,该拦截器负责从指定生存范围中找出指定的Model,并将通过setModel方法将该Model传给Action实例
. params: 这是最基本的拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值
. prepare: 如果Action实现了Preparable接口,将会调用该拦截器的prepare()方法
. static-params: 这个拦截器负责将xml中<action>标签下<param>标签中的参数传入action
. scope: 这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内
. servlet-config: 如果某个Action需要直接访问Servlet API,就是通过这个拦截器实现的
//尽量避免在Action中直接访问Servlet API,这样会导致Action与Servlet的高耦合
. roles: 这是一个JAAS(Java Authentication and Authorization Service Java授权和认证服务)拦截器,只有当浏览者取得合适的授权后,才可以调用被该拦截器拦截的Action
. timer: 这个拦截器负责输出Action的执行时间,这个拦截器在分析该Action的性能瓶颈时比较有用
. token: 这个拦截器主要用于阻止重复提交,它检查传到Action中的token,从而防止多次提交
. token-session: 这个拦截器的作用与token基本类似,只是它把token保存在HttpSession中
. validation: 通过执行在xxxAction-validation.xml中定义的校验器,从而完成数据校验
: workflow: 这个拦截器负责调用Action类中的validate方法,如果校验失败,则返回input的逻辑视图

大部分时候,开发者无须手动控制这些拦截器,因为struts-default.xml文件中已经配置了这些拦截器,只要我们定义的包继承了系统的struts-default包,就可以直接使用这些拦截器

0x3: 配置拦截器

struts.xml文件中可以定义拦截器、也可以定义拦截器栈

. 拦截器
<interceptor name="拦截器名" class="拦截器实现类"/> . 拦截器栈: 相当于一个拦截器整体
<interceptor-stack name="拦截器栈名">
<interceptor-ref name="拦截器1"/>
<interceptor-ref name="拦截器2"/>
..
<interceptor name="拦截器n"/>
</interceptor-stack>

一旦配置成为拦截器栈之后,就可以完全像使用普通拦截器一样使用拦截器占,因为拦截器和拦截器栈的功能是完全统一的,甚至有可能出现拦截器栈里包含拦截器栈
系统为拦截器指定参数有如下两个时机

. 定义拦截器时指定参数值: 这种参数值讲作为拦截器参数的默认参数值,通过<intercepter../>元素来定义拦截器
. 使用拦截器时指定参数值: 在配置Action时为拦截器参数指定值。通过<interceptor-ref../>元素使用拦截器,这种方式用于覆盖拦截器的默认参数值(就近原则)

0x4: 使用拦截器

一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦截器栈来拦截Action了,拦截器(包括拦截器栈)的拦截行为将会在Action的execute方法执行之前被执行
通过<interceptor-ref../>元素可以在Action内使用拦截器

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="crazyit" extends="struts-default">
<interceptors>
<interceptor name="mysimple" class="crazyit.SimpleInterceptor"/>
<interceptor name="later" class="crazyit.LaterInterceptor">
<param name="name">第二个拦截器</param>
</interceptor>
</interceptors>
<action name="register" class="crazyit.RegistAction">
<result name="input">/register.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="mysimple"/>
<interceptor-ref name="later">
<param name="name">动态餐胡</param>
</interceptor>
</action>
</package>
</struts>

在执行LoginAction之前,这3个拦截器都会起作用
0x5: 配置默认拦截器

当配置一个包时,可以为其指定默认拦截器,一旦为某个包指定了默认的拦截器,如果该包中的Action没有显式指定拦截器,则默认的拦截器将会起作用
配置默认拦截器使用<default-interceptor../>元素,该元素作为<package../>元素的子元素使用,为该包下的所有Action配置默认的拦截器

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="crazyit" extends="struts-default">
<interceptors>
<interceptor name="mysimple" class="crazyit.SimpleInterceptor"/>
<interceptor name="later" class="crazyit.LaterInterceptor">
<param name="name">第二个拦截器</param>
</interceptor>
</interceptors> <defaul-interceptor-ref naem="拦截器名或拦截器栈名"/> <action name="register" class="crazyit.RegistAction">
<result name="input">/register.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="mysimple"/>
<interceptor-ref name="later">
<param name="name">动态餐胡</param>
</interceptor>
</action>
</package>
</struts>

每个包只能指定一个默认拦截器,如果我们需要指定多个拦截器共同作为默认拦截器,则应该讲这些拦截器定义成拦截器栈,然后把这个拦截器栈配置成默认拦截器即可
默认情况下,所有Action都无须配置defaultStack拦截器栈,因为在struts2的struts-default.xml文件中有如下配置

<package name="struts-default" abstract="true">
...
default-interceptor-ref name="defaultStack"/>
..
</package>

我们定义的struts2应用中的包,都是struts-default包的子包,当我们定义的包继承struts-default包时,也继承了它的默认拦截器栈: defaultStack

拦截器的工作原理如上图,每一个Action请求都包装在一系列的拦截器的内部。拦截器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作
每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面
0x6: 实现拦截器类

如果用户要开发自己的拦截器类,应该实现com.opensymphony.xwork2.interceptor.Interceptor接口

public interface Interceptor extends Serializable
{
//在拦截器实例被销毁之前,系统讲回调该拦截器的destroy方法,该方法用于销毁在init()方法里打开的资源
void destroy(); //在该拦截器被实例化之后,在该拦截器执行拦截之前,系统将回调该方法,对于每个拦截器而言,其init()方法只执行一次
void init(); /*
该方法是用户需要实现的拦截动作,就像Action的execute一样,intercept方法会返回一个字符串字符串作为逻辑视图
该方法的ActionInvocation参数包含了被拦截的Action的引用,可以通过调用该参数的invoke方法,讲控制权转给下一个拦截器,或者转给Action的execute方法
*/
String intercept(ActionInvocation invocation)throws Exception;
}

下面实现了一个简单的拦截器

package crazyit;

import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class SimpleInterceptor extends AbstractInterceptor
{
//简单拦截器名字
private String name;
public void setName(String name)
{
this.name = name;
} public String intercept(ActionInvocation invocation) throws Exception
{
//取得被拦截的Action实例
RegistAction action = (RegistAction)invocation.getAction();
System.out.println(name + " 拦截器的动作---" + "开始执行登录Action的时间为: " + new Date());
long start = System.currentTimeMillis();
String result = invocation.invoke();
System.out.println(name + " 拦截器的动作---" + "执行完登录Action的时间为: " + new Date());
long end = System.currentTimeMillis();
System.out.println(name + " 拦截器的动作---" + "执行完该Action的事件为: " + (end - start) + "毫秒");
return result;
}
}

当我们实现intercept(ActionInvocation invocation)方法时,可以获得ActionInvocation参数,这个参数又可以获得被拦截的Action实例,一旦取得了Action实例,几乎获得了全部的控制权

. 可以实现讲HTTP请求中的参数解析出来,设置成Action的属性(这个系统params拦截器完成的事情,防御S2-005也是通过这个拦截器的升级实现的)
. 可以直接讲HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action(这是servlet-config拦截器完成的事情)

struts.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="crazyit" extends="struts-default">
<interceptors>
<interceptor name="mysimple" class="crazyit.SimpleInterceptor">
<param name="name">第二个拦截器</param>
</interceptor>
</interceptors> <action name="register" class="crazyit.RegistAction">
<result name="input">/register.jsp</result>
<result name="success">/register.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="mysimple">
<param name="name">动态参数</param>
</interceptor-ref>
</action>
</package>
</struts>

aaarticlea/png;base64,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" alt="" />
0x7: 使用拦截器

如果为Action指定了一个拦截器,则系统默认的拦截器栈将会失去作用,为了继续使用默认拦截器,我们在配置文件中应该显式地应用默认拦截器

struts2拦截器的功能非常强大,它既可以在Action的execute方法之前插入执行代码,也可以在execute方法之后插入执行代码,这种方式的实质就是AOP(面向切面编程)的思想
0x8: 拦截方法的拦截器

在默认情况下,如果我们为某个Action定义了拦截器,则这个拦截会拦截该Action内的所有方法,但在某些情况下,我们需要拦截指定方法,此时就需要使用struts2拦截器的方法过滤特性
为了实现方法过滤的特性,struts2提供了一个MethodFilterInterceptor类,该类是AbstractInterceptor类的子类,如果用户需要自己实现的拦截器支持方法过滤特性,则应该继承MethodFilterInterceptor
MethodFilterInterceptor类重写了AbstractInterceptor类的intercept(ActionInvocation invocation)方法,但提供了一个doIntercept(ActionInvocation invocation)抽象方法,从这种设计可以看出,MethodFilterInterceptor类的intercept已经实现了对Action的拦截行为(只是实现了方法过滤的框架逻辑),但真正的拦截逻辑还需要开发者通过重写提供,也就是通过回调doIntercept方法实现

package crazyit;

import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class SimpleInterceptor extends MethodFilterInterceptor
{
//简单拦截器名字
private String name;
public void setName(String name)
{
this.name = name;
} public String doIntercept(ActionInvocation invocation) throws Exception
{
//取得被拦截的Action实例
RegistAction action = (RegistAction)invocation.getAction();
System.out.println(name + " 拦截器的动作---" + "开始执行登录Action的时间为: " + new Date());
long start = System.currentTimeMillis();
String result = invocation.invoke();
System.out.println(name + " 拦截器的动作---" + "执行完登录Action的时间为: " + new Date());
long end = System.currentTimeMillis();
System.out.println(name + " 拦截器的动作---" + "执行完该Action的事件为: " + (end - start) + "毫秒");
return result;
}
}

实际上,方法过滤拦截器和普通拦截器没有本质区别,后者是基于前者实现的

. 实现方法过滤拦截器需要继承MethodFilterInterceptor抽象类,并且重写doIntercept方法,定义对Action的拦截逻辑
. 在MethodFilterInterceptor类的方法中,增加了如下两个方法
) public void serExcludeMethod(String excludeMethods);
排除需要过滤的方法,相当于设置黑名单
) public void setIncludeMethod(String includeMethods);
设置需要过滤的方法,相当于设置白名单
//如果一个方法同时出现在excludeMethods、includeMethods中,则该方法会被拦截

0x9: 拦截器的执行顺序

随着系统中配置拦截器的顺序的不同,系统执行拦截器的顺序也不一样

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="crazyit" extends="struts-default">
<interceptors>
<interceptor name="mysimple" class="crazyit.SimpleInterceptor">
<param name="name">第二个拦截器</param>
</interceptor>
</interceptors> <action name="register" class="crazyit.RegistAction">
<result name="input">/register.jsp</result>
<result name="success">/register.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="mysimple">
<param name="name">第一个</param>
</interceptor-ref>
<interceptor-ref name="mysimple">
<param name="name">第二个</param>
</interceptor-ref>
</action>
</package>
</struts>

aaarticlea/png;base64,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" alt="" />

从结果上可以看出

. 对于在execute方法之前的动作,配置在前面的拦截器先起作用
. 在execute方法之后的动作,配置在后面的拦截器先起作用
//在Action的控制方法执行之前,位于拦截器链前面的拦截器讲先发生作用,在Action的控制方法执行之后,位于拦截器链后面的拦截器讲先发生作用

这实际上是因为拦截器栈采用了"后进先出LIFO"的堆结构
0x10: 拦截结果的监听器

为了精确定义在execute方法执行结束后,在物理资源转向之前的动作,struts2提供了用于拦截结果的监听器
我们之前介绍的"拦截结果的监听器接口: PreResultListener"它只能在Action中注册该监听器,则该监听器只对指定Action有效,把PreResultListener注册在拦截器中,这样可以只要该拦截器起作用的地方,这个拦截接口的监听器都会被触发
虽然在beforeResult方法中再对ActionInvocation方法进行处理已经没有太大的作用了,但了解Action已经执行完毕,而处理物理资源转向还没有开始执行的时间点也非常重要,可以让开发者精确地控制Action处理的结果,并且对处理结果做有针对性的处理
0x11: 覆盖拦截器栈里特定拦截器的参数

如果需要在使用拦截器栈时直接覆盖栈内某个拦截器的属性值,则在指定需要被覆盖的属性时,不能只指定属性名,必须加上该属性属于的拦截名,即
<拦截器名>.<属性名>

0x12: 使用拦截器完成权限控制

Relevant Link:

http://www.blogjava.net/i369/articles/162407.html

4. 使用struts2的Ajax支持

5. struts2 OGNL表达式

0x1: OGNL简介

OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能

. OGNL表达式的计算是围绕OGNL上下文进行的
OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象
上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀"#key" . Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如: <s:propertyvalue="xxx"/> . Struts2将ActionContext设置为OGNL上下文,并将值栈(ValueStack)作为OGNL的根对象放置到ActionContext中,使得可以通过OGNL表达式访问到ValueStack,进而获得Action的访问能力 . 值栈(ValueStack)
可以在值栈中放入、删除、查询对象。访问值栈中的对象不用"#",因为值栈(ValueStack)位于ActionContext的顶端
Struts2总是把当前Action实例放置在栈顶(即值栈(ValueStack)中)。所以在OGNL中引用Action中的属性也可以省略"#" . 调用ActionContext的put(key,value)放入的数据,需要使用#访问

0x2: OGNL中重要的3个符号:#、%、$

.#符号
#符号的用途一般有三种
) 访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext(),#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg")
) 用于过滤和投影(projecting)集合,如persons.{?#this.age>},persons.{?#this.name=='pla1'}.{age}[]
) 用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'} .%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,这个类似js中的eval .$符号
$符号主要有两个方面的用途
) 在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间
) 在Struts 2框架的配置文件中引用OGNL表达式

0x3: OGNL的使用方法

. 访问属性
名字属性获取: <s:property value="user.username"/>
地址属性获取: <s:property value="user.address.addr"/> . 访问方法
调用值栈中对象的普通方法: <s:property value="user.get()"/> . 访问静态属性和方法
调用Action中的静态方法: <s:property value="@struts.action.LoginAction@get()"/>
调用JDK中的类的静态方法: <s:property value="@java.lang.Math@floor(44.56)"/>
调用JDK中的类的静态方法(同上): <s:property value="@@floor(44.56)"/>
调用JDK中的类的静态方法: <s:property value="@java.util.Calendar@getInstance()"/>
调用普通类中的静态属性: <s:property value="@struts.vo.Address@TIPS"/> . 访问构造方法
调用普通类的构造方法: <s:property value="new struts.vo.Student('李晓红' , '美女' , 3 , 25).username"/> . 访问数组
获取List:<s:property value="testList"/>
获取List中的某一个元素(可以使用类似于数组中的下标获取List中的内容): <s:property value="testList[0]"/>
获取Set: <s:property value="testSet"/>
获取Set中的某一个元素(Set由于没有顺序,所以不能使用下标获取数据): <s:property value="testSet[0]"/>
获取Map: <s:property value="testMap"/>
获取Map中所有的键: <s:property value="testMap.keys"/>
获取Map中所有的值: <s:property value="testMap.values"/>
获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容): <s:property value="testMap['m1']"/>
获取List的大小: <s:property value="testSet.size"/> . 访问集合 – 投影、选择(? ^ $)
利用选择获取List中成绩及格的对象: <s:property value="stus.{?#this.grade>=60}"/>
利用选择获取List中成绩及格的对象的username: <s:property value="stus.{?#this.grade>=60}.{username}"/>
利用选择获取List中成绩及格的第一个对象的username: <s:property value="stus.{?#this.grade>=60}.{username}[0]"/>
利用选择获取List中成绩及格的第一个对象的username: <s:property value="stus.{^#this.grade>=60}.{username}"/>
利用选择获取List中成绩及格的最后一个对象的username: <s:property value="stus.{$#this.grade>=60}.{username}"/>
利用选择获取List中成绩及格的第一个对象然后求大小: <s:property value="stus.{^#this.grade>=600}.{username}.size"/> . 集合的伪属性
OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size()、length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性集合 . Lambda: […]
格式::[…]
使用Lambda表达式计算阶乘: <s:property value="#f = :[#this==1?1:#this*#f(#this-1)] , #f(4)"/><br> . OGNL中#的使用
#可以取出堆栈上下文中的存放的对象
. parameters: 包含当前HTTP请求参数的Map: parameters.id[]作用相当于request.getParameter("id")
. request: 包含当前HttpServletRequest的属性(attribute)的Map: #request.userName相当于request.getAttribute("userName")
. session: 包含当前HttpSession的属性(attribute)的Map: #session.userName相当于session.getAttribute("userName")
. application: 包含当前应用的ServletContext的属性(attribute)的Map: #application.userName相当于application.getAttribute("userName")
. attr: 用于按request > session > application顺序访问其属性(attribute): 获取Paraments对象的属性: <s:property value="#parameters.username"/> . OGNL中%的使用
用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.
例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息. . OGNL中$的使用 . "$"有两个主要的用途
) 用于在国际化资源文件中,引用OGNL表达式
) 在Struts 2配置文件中,引用OGNL表达式

Relevant Link:

http://blog.csdn.net/tjcyjd/article/details/6850203
https://struts.apache.org/docs/ognl-basics.html
https://struts.apache.org/docs/ognl.html

6. struts2的文件上传

为了能上传文件,我们必须将表单的method设置为POST,将enctype设置为multipart/form-data,只有在这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器,Servlet3.0规范的HttpServletRequest已经提供了方法来处理文件上传,但这种上传需要在Servlet中完成,而struts2则提供了更简单的"封装"
需要注意的是,struts2的文件上传还没有使用Servlet3.0 API,因此struts2的文件上传还需要依赖于Common-FileUpload、COS等文件上传组件

0x1: struts2的文件上传

struts2并未提供自己的请求解析器,即struts2不会自己去处理multipart/form-data的请求,它需要调用其他上传框架来解析二进制请求数据,但struts2在原有的上传解析器基础上做了进一步的封装,更进一步简化了文件上传
在struts2的struts.properties配置文件中,我们可以看到如下代码,它们主要用于配置struts2上传文件时的上传解析器

# 指定使用COS的文件上传解析器
struts.multipart.parser=cos
# 指定使用Pell的文件上传解析器
struts.multipart.parser=pell
# struts2默认使用Jakarta的Common-FileUpload的文件上传解析器
struts.multipart.parser=jakarta

struts2的封装隔离了底层文件上传组件的区别,开发者只要在此处配置文件上传所使用的解析器,就可以在不同的文件上传框架之间切换
struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此需要在Web应用中增加两个JAR文件,即将commons-io-xxx.jar、commons-fileupload-xx.jar复制到Web应用下的WEB-INF/lib路径下

0x2: 实现文件上传的Action

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>simple file upload</title>
</head>
<body>
<s:form action="uploadPro" enctype="multipart/form-data">
<s:textfield name="title" label="file title"/><br />
<s:file name="upload" label="select file"/><br />
<s:submit value="upload"/>
</s:form>
</body>
</html>

struts2的Action无须负责处理HttpServletRequest请求,因为struts2的Action已经完全与Servlet API彻底分离了,struts2框架负责解析HttpServletRequest请求中的参数,包括文件域,struts2使用File类型来封装文件域

package S2_XX;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport
{
//封装文件标题请求参数的属性
private String title;
//封装上传文件域的属性
private File upload;
//封装上传文件类型的属性
private String uploadContentType;
//封装上传文件名的属性
private String uploadFileName;
//直接在struts.xml文件中配置的属性
private String savaPath; //接受struts.xml文件配置值方法
public void setSavePath(String value)
{
this.savaPath = value;
}
//返回上传文件的保存位置
private String getSavePath() throws Exception
{
return ServletActionContext.getServletContext().getRealPath("/WEB-INF/" + savaPath);
}
//文件标题的setter、getter方法
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return this.title;
}
//上传文件对应文件内容的setter、getter方法
public void setUpload(File upload)
{
this.upload = upload;
}
public File getUpload()
{
return this.upload;
}
//上传文件的文件类型的setter。getter方法
public void setUploadContentType(String uploadContentType)
{
this.uploadContentType = uploadContentType;
}
public String getUploadContentType()
{
return this.uploadContentType;
}
//上传文件的文件名的setter、getter方法
public void setUploadFileName(String uploadFileName)
{
this.uploadFileName = uploadFileName;
}
public String getUploadFileName()
{
return this.uploadFileName;
} @Override
    public String execute() throws Exception
    {
        String newPath = getSavePath();  
        String newName = getUploadFileName();
        
        File file = new File(newPath);   
        if  (!file .exists()  && !file .isDirectory())       
        {    
            file.mkdir();    
        }    
        else
        {
            FileOutputStream fos = new FileOutputStream(newPath + "\\" + newName);
            FileInputStream fis = new FileInputStream(getUpload());
            byte[] buffer = new byte[1024];
            int len = 0;
            while((len = fis.read(buffer)) > 0)
            {
                fos.write(buffer, 0, len);
            }
            
            fos.close();
            fis.close();
        }
          
        return SUCCESS;
    }
}

我们知道,struts2使用Actoin属性对上传参数进行了封装,同样,struts2通过Action类直接通过File类型属性封装了上传文件的文件内容,但这个File属性无法获取上传文件的文件名和文件类型,所以struts2直接讲文件域中包含的上传文件名和文件类型的信息封装到uploadFileName、uploadContentType属性中,可以认为,如果表单中包含一个name属性为XXX的文件域,则对应Action需要使用3个属性来封装该文件域的信息

. 类型为File的xxx属性: 封装了该文件域对应的文件内容
. 类型为String的xxxFileName属性: 封装了该文件域对应的文件的文件名
. 类型为String的xxxContentType属性: 封装了该文件域对应的文件类型

struts2的Action中的属性,除了可以用于封装HTTP请求参数外,也可以封装Action的处理结果,还可以通过在struts.xml配置文件中进行配置,接收struts2框架的注入,允许在配置文件中为该属性动态指定值

0x3: 配置文件上传的Action

配置struts2文件上传的Action与配置普通Action基本类似,唯一存在的区别是,该Action还配置了一个<param../>元素,该元素用于为该Action的属性动态分配属性值

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="S2_XX" extends="struts-default">
<action name="uploadPro" class="S2_XX.UploadAction">
<param name="savePath">/upload</param>
<result name="success">/succ.jsp</result>
</action>
</package>
</struts>

succ.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>上传成功</title>
</head>
<body>
上传成功! <br/>
文件标题: <s:property value=" + title"/><br/>
文件为: <img src="<s:property value="'uploadFiles/'
+ uploadFileName"/>"/><br/>
</body>
</html>

只要我们讲文件域与Action中的一个类型为File的属性关联,就可以访问到上传文件的文件内容,至于struts2使用何种Multipart解析器,对开发者完全透明的

0x4: 手动实现文件过滤

如果需要手工实现文件过滤,需要按如下步骤进行

. 在Action中定义一个专门用于进行文件过滤的方法,名字是任意的,例如filterTypes()
. 在filterTypes()中实现过滤判断逻辑
. 为了让应用程序可以动态配置允许上传的文件列表,为该Action增加了一个allowTypes属性,该属性的值列出了所有允许上传的文件类型,为了可以在struts.xml文件中配置allowTypes属性的值,必须在Action类中提供setter、getter方法
. 利用struts2的输入校验来判断用户输入的文件是否符合要求,如果不符合要求,则讲错误添加到FieldError中,该Action需要增加validate()方法,并调用filterTypes()方法
//validate()会在execute方法之前被执行

可以看到,这本质上是一个输入校验过程,只是数据来源是上传文件相关的

0x5: 拦截器实现文件过滤

使用手动实现文件过滤的方式虽然简单,但需要写大量的过滤代码,不利于程序的高层次解耦,而且开发复杂,struts2提供了一个文件上传的拦截器,通过配置该拦截器可以更轻松地实现文件过滤,struts2中文件上传的拦截器是fileUpload,为了让该拦截器起作用,只需要在该Action中配置该拦截器引用即可,本质上来说,手动的validate()也是拦截器,只是struts2提供了自动化、框架化的方式来实现这个过程
配置fileUpload拦截器时,可以为其指定两个参数

. allowedTypes: 该参数指定允许上传的文件类型,多个文件类型之间以英文逗号","隔开
. maximumSize: 该参数指定允许上传的文件大小,单位是字节

通过配置fileUpload的拦截器,可以很容易实现文件过滤,当文件过滤失败后,系统自动转入input逻辑视图,因此需要为该Action配置名为input的逻辑视图,除此之外,还需要显示地为该Action配置defaultStack的拦截器引用

必须显式配置引用struts2默认的拦截器栈: defaultStack,而且fileUpload拦截器必须配置在defaultStack拦截器之前

0x6: 输出错误提示

开发者可以使用<s:fielderror/>来显式输出上传失败的校验信息

0x7: 文件上传的常量配置

Relevant Link:

http://www.java3z.com/cwbwebhome/article/article2/2923.html?id=1613
https://struts.apache.org/docs/strutsproperties.html

7. Struts2标签库

Struts2的标签库使用OGNL表达式来访问ActionContext中的对象数据。为了能够访问到ActionContext中的变量,Struts2将ActionContext设置为OGNL的上下文,并将OGNL的跟对象加入ActionContext中

<p>parameters: <s:property value="#parameters.msg" /></p>  

Copyright (c) 2015 Little5ann All rights reserved

struts2 Advanced Learning的更多相关文章

  1. SCI&EI 英文PAPER投稿经验【转】

    英文投稿的一点经验[转载] From: http://chl033.woku.com/article/2893317.html 1. 首先一定要注意杂志的发表范围, 超出范围的千万别投,要不就是浪费时 ...

  2. myhuiban会议,期刊,科研人员,计算机类会议大全

    http://www.myhuiban.com/ List of computer science conferences From Wikipedia, the free encyclopedia ...

  3. machine learning(11) -- classification: advanced optimization 去求cost function最小值的方法

    其它的比gradient descent快, 在某些场合得到广泛应用的求cost function的最小值的方法 when have a large machine learning problem, ...

  4. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  5. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  6. Evolutionary Computing: [reading notes]On the Life-Long Learning Capabilities of a NELLI*: A Hyper-Heuristic Optimisation System

    resource: On the Life-Long Learning Capabilities of a NELLI*: A Hyper-Heuristic Optimisation System ...

  7. (转) Awesome Deep Learning

    Awesome Deep Learning  Table of Contents Free Online Books Courses Videos and Lectures Papers Tutori ...

  8. 视觉中的深度学习方法CVPR 2012 Tutorial Deep Learning Methods for Vision

    Deep Learning Methods for Vision CVPR 2012 Tutorial  9:00am-5:30pm, Sunday June 17th, Ballroom D (Fu ...

  9. Python (1) - 7 Steps to Mastering Machine Learning With Python

    Step 1: Basic Python Skills install Anacondaincluding numpy, scikit-learn, and matplotlib Step 2: Fo ...

随机推荐

  1. C#开发中Windows域认证登录2(扩展吉日嘎拉GPM系统)

    原文地址:http://www.cuiwenyuan.com/shanghai/post/Windows-AD-Logon-Intergrated-into-Jirigala-GPM-DotNet-B ...

  2. Linux 网络编程详解四(流协议与粘包)

    TCP/IP协议是一种流协议,流协议是字节流,只有开始和结束,包与包之间没有边界,所以容易产生粘包,但是不会丢包. UDP/IP协议是数据报,有边界,不存在粘包,但是可能丢包. 产生粘包问题的原因 . ...

  3. QT 数据库编程三

    //mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...

  4. express:webpack dev-server中如何将对后端的http请求转到https的后端服务器中?

    在上一篇文章(Webpack系列:在Webpack+Vue开发中如何调用tomcat的后端服务器的接口?)我们介绍了如何将对于webpack-dev-server的数据请求转发到后端服务器上,这在大部 ...

  5. TF400916错误修复办法

    在使用TFS作为研发过程管理工具的时候,如果调整了工作项的状态信息,可能会出现下面的错误: 要解决此问题非常简单: 1.找一台安装了VS2015程序的环境.因为我们使用的是TFS2015,所以需要对应 ...

  6. 一个看似很简单的SQL却难倒了很多人

    一个选课表,有学生id,课程id,老师id,要求选出同时选了语文和数学的学生 USE [tempschool] GO /****** 对象: Table [dbo].[SelectC] 脚本日期: 0 ...

  7. 你是否还在质疑EF的性能

    1. 写在前面的话 一直没有写博客的习惯,感觉太浪费时间,没有那么多精力,其实仔细一想,写博客是一种习惯,也是一种心境,同时也是对自己所掌握的知识结构的一个梳理过程,对自己知识体系的一个巩固,同时也是 ...

  8. TF-IDF

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或 ...

  9. 13-mv 命令总结

  10. [cross domain] four approachs to cross domain in javascript

    four approachs can cross domain in javascript 1.jsonp 2.document.domain(only in frame and they have ...